Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks
Paper • 1908.10084 • Published • 15
How to use rntc/medembed-v9 with sentence-transformers:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("rntc/medembed-v9")
sentences = [
"R10-R19 Symptômes et signes relatifs à l'appareil digestif et à l'abdomen",
"Symptômes et signes relatifs à l'appareil digestif et à l'abdomen",
"L'exploration de la classification autour de l'acte HBMD01410, correspondant à la modélisation occlusale par la technique de la cire ajoutée sur une dent (1° activité chirurgicale ou médicale, phase par défaut), révèle un cheminement procédural qui s'inscrit dans le cadre des actes de phase 0. Cet acte est apparenté à l'acte NDFA00310, qui désigne une talectomie avec création d'une néarthrose tibiopédieuse, elle aussi en première activité chirurgicale ou médicale et en phase par défaut. Ce dernier renvoie à son tour à l'acte AHPA01140, correspondant à la libération ou résection d'un nerf digital plantaire par abord direct, réalisé sous anesthésie et en phase par défaut. Cet acte appartient à une catégorie d'interventions chirurgicales de même nature, incluant notamment BADA00540 (canthopexie médiale pour dystopie congénitale, sous anesthésie, phase par défaut) et PAGA00710 (désépiphysiodèse d'un os long par abord direct, 1° activité chir/med, phase par défaut). Un autre acte similaire est GAMA00240, qui concerne la réparation d'une perte de substance du nez par lambeau frontal à pédicule inférieur, également en phase par défaut et sous anesthésie. L'ensemble de ces actes relève de la classe « ActeActivitePhase_Phase_0 », qui regroupe les phases d'actes de phase 0. Cette classe inclut plusieurs procédures de même type, telles que BADA00540, GAMA00240, PAGA00710 et AHPA01140, toutes réalisées en phase par défaut. La classe chirurgicale « ActeActivitePhase_Phase_0 » est liée à d'autres groupes, notamment « ActeActivitePhase_Phase_2 », qui regroupe des actes en phase 2. Ce groupe inclut des procédures telles que HAMA00712 (reconstruction du philtrum par lambeau hétérolabial pour séquelle de fente orofaciale, 1° activité chir/med, phase 2 : section du pédicule), HAMA00742 (même acte, mais sous anesthésie, phase 2), MJMA01412 (reconstruction d'un tendon de la main par transplant pédiculé en deux temps, phase 2 : transplant pédiculé), ainsi que MJMA01442 (même acte sous anesthésie, phase 2). HAMA00742 apparaît également comme une alternative chirurgicale dans ce contexte. Enfin, l'acte HKPA00712, correspondant à la mise à plat d'un abcès ou d'une fistule haute de l'anus (transsphinctérien supérieur ou trajet complexe multiramifié) avec drainage par anse souple, en phase 2 (séance de traction progressive sur l'anse souple), est également apparenté à cette filiation procédurale. Au total, cette exploration a permis d'identifier 20 codes CCAM reliés directement ou indirectement à HBMD01410, illustrant la structure hiérarchique et catégorielle de la classification.",
"N50 Autres affections des organes génitaux de l'homme"
]
embeddings = model.encode(sentences)
similarities = model.similarity(embeddings, embeddings)
print(similarities.shape)
# [4, 4]This is a sentence-transformers model trained on the pairs and triplets datasets. It maps sentences & paragraphs to a 768-dimensional dense vector space and can be used for semantic textual similarity, semantic search, paraphrase mining, text classification, clustering, and more.
SentenceTransformer(
(0): Transformer({'max_seq_length': 8192, 'do_lower_case': False, 'architecture': 'ModernBertModel'})
(1): Pooling({'word_embedding_dimension': 768, 'pooling_mode_cls_token': False, 'pooling_mode_mean_tokens': True, 'pooling_mode_max_tokens': False, 'pooling_mode_mean_sqrt_len_tokens': False, 'pooling_mode_weightedmean_tokens': False, 'pooling_mode_lasttoken': False, 'include_prompt': True})
(2): Normalize()
)
First install the Sentence Transformers library:
pip install -U sentence-transformers
Then you can load this model and run inference.
from sentence_transformers import SentenceTransformer
# Download from the 🤗 Hub
model = SentenceTransformer("sentence_transformers_model_id")
# Run inference
sentences = [
'GALD0011',
'Pose unilatérale ou bilatérale de prothèse de calibrage de la cavité nasale - 1° activité chir/med',
'JDHE002 Biopsie de la vessie à la pince, par endoscopie',
]
embeddings = model.encode(sentences)
print(embeddings.shape)
# [3, 768]
# Get the similarity scores for the embeddings
similarities = model.similarity(embeddings, embeddings)
print(similarities)
# tensor([[1.0000, 0.7786, 0.1076],
# [0.7786, 1.0000, 0.0230],
# [0.1076, 0.0230, 1.0000]])
anchor and positive| anchor | positive | |
|---|---|---|
| type | string | string |
| details |
|
|
| anchor | positive |
|---|---|
LEPA0024 Ostéotomie antérieure ou discectomie totale pour déformation rigide de la colonne vertébrale avec arthrodèse, sans correction instrumentale, sur 1 à 3 vertèbres, par thoracotomie - anesthésie |
LEPA002 Ostéotomie antérieure ou discectomie totale pour déformation rigide de la colonne vertébrale avec arthrodèse, sans correction instrumentale, sur 1 à 3 vertèbres, par thoracotomie |
Z11.8 Examen spécial de dépistage d'autres maladies infectieuses et parasitaires |
Maladies à Rickettsia |
FBFA003 Exérèse du thymus vestigial, par thoracotomie |
YYYY041 Supplément pour récupération peropératoire de sang |
MultipleNegativesRankingLoss with these parameters:{
"scale": 20.0,
"similarity_fct": "cos_sim",
"gather_across_devices": false
}
anchor, positive, and negative| anchor | positive | negative | |
|---|---|---|---|
| type | string | string | string |
| details |
|
|
|
| anchor | positive | negative |
|---|---|---|
Z23.5 Nécessité d'une vaccination contre le tétanos seul |
Le code Z23.5, qui désigne la nécessité d'une vaccination contre le tétanos seul, s'inscrit dans le cadre plus large du groupe nosologique Z23, « Nécessité d'une vaccination contre une seule maladie bactérienne ». Ce groupe inclut plusieurs codes spécifiques selon l'agent infectieux ciblé, permettant une distinction fine entre les différents besoins vaccinaux. Ainsi, Z23.5 doit être différencié de Z23.0 (nécessité d'une vaccination contre le choléra seul), Z23.1 (nécessité d'une vaccination contre la typhoïde-paratyphoïde seule [TAB]), Z23.2 (nécessité d'une vaccination contre la tuberculose [BCG]), Z23.3 (nécessité d'une vaccination contre la peste), Z23.4 (nécessité d'une vaccination contre la tularémie), Z23.6 (nécessité d'une vaccination contre la diphtérie seule), Z23.7 (nécessité d'une vaccination contre la coqueluche seule) et Z23.8 (nécessité d'une vaccination contre d'autres maladies bactériennes uniques). Chacun de ces codes correspond à une indication vaccinale spécifique et... |
Le code Z23.1, qui désigne la nécessité d'une vaccination contre la typhoïde-paratyphoïde seule (vaccination TAB), s'inscrit dans le cadre des actes préventifs liés à une immunisation spécifique contre une maladie bactérienne unique. Ce code appartient à la catégorie plus large Z23, « Nécessité d'une vaccination contre une seule maladie bactérienne », qui regroupe l'ensemble des situations où une vaccination ciblant une bactérie spécifique est indiquée. Pour distinguer Z23.1 des autres codes proches, il est essentiel de considérer l'agent infectieux visé par la vaccination. |
H74.3 Autres anomalies acquises des osselets |
Le code H74.3 désigne les anomalies acquises des osselets, notamment l’ankylose des osselets et la perte partielle des osselets. Ce diagnostic doit être distingué d’autres affections de l’oreille moyenne appartenant au même groupe nosologique ou à des catégories voisines. Ainsi, la tympanosclérose (H74.0), caractérisée par une calcification de la membrane tympanique ou des structures de l’oreille moyenne, peut présenter des similitudes cliniques mais se distingue par sa physiopathologie et ses lésions histologiques spécifiques. Une autre entité proche est le polype de l’oreille moyenne (H74.4), souvent associé à une inflammation chronique et une prolifération granulationnelle, qui doit être différencié sur la base de l’aspect endoscopique et histologique. La dissociation ou la dislocation des osselets (H74.2) représente une atteinte mécanique ou traumatique des chaînes ossiculaires, identifiable par imagerie ou exploration fonctionnelle, contrairement à l’ankylose incluse dans H74.3. U... |
Le code H74.4 désigne un polype de l'oreille moyenne, une affection acquise caractérisée par la formation d'une excroissance muqueuse bénigne dans la cavité tympanique, souvent secondaire à une inflammation chronique. Ce diagnostic doit être distingué de plusieurs autres affections de l'oreille moyenne classées dans le même chapitre (H74), qui regroupe les anomalies acquises de cette région. |
M79.96 Affection des tissus mous, sans précision - " Jambe " |
Le code CIM-10 M79.96 désigne une affection des tissus mous, non précisée, localisée à la jambe. Ce code inclut également les atteintes du péroné, du tibia et de l’articulation du genou, bien qu’il ne spécifie pas la nature exacte de la lésion. Il s’inscrit dans la catégorie plus large M79.9, qui regroupe toutes les affections des tissus mous sans précision, avec une localisation ostéoarticulaire. Cette catégorie exclut expressément la douleur psychogène des tissus mous, codée F45.4. Les subdivisions de localisation (de 0 à 9) permettent d’indiquer le siège anatomique de l’atteinte, notamment la jambe (code 6), et facilitent une codification plus précise dans le cadre du chapitre XIII du CIM-10 relatif aux affections du système ostéoarticulaire et du tissu conjonctif. |
Le code CIM-10 M79.92 désigne une affection des tissus mous, sans précision, localisée au bras. Ce code couvre notamment les atteintes concernant l'humérus et l'articulation du coude, et peut être utilisé de manière synonyme dans ces localisations. Pour distinguer M79.92 des autres entités diagnostiques proches, une attention particulière doit être portée à la localisation anatomique précise de la symptomatologie. |
TripletLoss with these parameters:{
"distance_metric": "TripletDistanceMetric.COSINE",
"triplet_margin": 0.5
}
per_device_train_batch_size: 4gradient_accumulation_steps: 16learning_rate: 2e-05weight_decay: 0.01warmup_ratio: 0.1fp16: Truedataloader_num_workers: 4ddp_find_unused_parameters: Falseoverwrite_output_dir: Falsedo_predict: Falseeval_strategy: noprediction_loss_only: Trueper_device_train_batch_size: 4per_device_eval_batch_size: 8per_gpu_train_batch_size: Noneper_gpu_eval_batch_size: Nonegradient_accumulation_steps: 16eval_accumulation_steps: Nonetorch_empty_cache_steps: Nonelearning_rate: 2e-05weight_decay: 0.01adam_beta1: 0.9adam_beta2: 0.999adam_epsilon: 1e-08max_grad_norm: 1.0num_train_epochs: 3max_steps: -1lr_scheduler_type: linearlr_scheduler_kwargs: Nonewarmup_ratio: 0.1warmup_steps: 0log_level: passivelog_level_replica: warninglog_on_each_node: Truelogging_nan_inf_filter: Truesave_safetensors: Truesave_on_each_node: Falsesave_only_model: Falserestore_callback_states_from_checkpoint: Falseno_cuda: Falseuse_cpu: Falseuse_mps_device: Falseseed: 42data_seed: Nonejit_mode_eval: Falsebf16: Falsefp16: Truefp16_opt_level: O1half_precision_backend: autobf16_full_eval: Falsefp16_full_eval: Falsetf32: Nonelocal_rank: 0ddp_backend: Nonetpu_num_cores: Nonetpu_metrics_debug: Falsedebug: []dataloader_drop_last: Truedataloader_num_workers: 4dataloader_prefetch_factor: Nonepast_index: -1disable_tqdm: Falseremove_unused_columns: Truelabel_names: Noneload_best_model_at_end: Falseignore_data_skip: Falsefsdp: []fsdp_min_num_params: 0fsdp_config: {'min_num_params': 0, 'xla': False, 'xla_fsdp_v2': False, 'xla_fsdp_grad_ckpt': False}fsdp_transformer_layer_cls_to_wrap: Noneaccelerator_config: {'split_batches': False, 'dispatch_batches': None, 'even_batches': True, 'use_seedable_sampler': True, 'non_blocking': False, 'gradient_accumulation_kwargs': None}parallelism_config: Nonedeepspeed: Nonelabel_smoothing_factor: 0.0optim: adamw_torch_fusedoptim_args: Noneadafactor: Falsegroup_by_length: Falselength_column_name: lengthproject: huggingfacetrackio_space_id: trackioddp_find_unused_parameters: Falseddp_bucket_cap_mb: Noneddp_broadcast_buffers: Falsedataloader_pin_memory: Truedataloader_persistent_workers: Falseskip_memory_metrics: Trueuse_legacy_prediction_loop: Falsepush_to_hub: Falseresume_from_checkpoint: Nonehub_model_id: Nonehub_strategy: every_savehub_private_repo: Nonehub_always_push: Falsehub_revision: Nonegradient_checkpointing: Falsegradient_checkpointing_kwargs: Noneinclude_inputs_for_metrics: Falseinclude_for_metrics: []eval_do_concat_batches: Truefp16_backend: autopush_to_hub_model_id: Nonepush_to_hub_organization: Nonemp_parameters: auto_find_batch_size: Falsefull_determinism: Falsetorchdynamo: Noneray_scope: lastddp_timeout: 1800torch_compile: Falsetorch_compile_backend: Nonetorch_compile_mode: Noneinclude_tokens_per_second: Falseinclude_num_input_tokens_seen: noneftune_noise_alpha: Noneoptim_target_modules: Nonebatch_eval_metrics: Falseeval_on_start: Falseuse_liger_kernel: Falseliger_kernel_config: Noneeval_use_gather_object: Falseaverage_tokens_across_devices: Trueprompts: Nonebatch_sampler: batch_samplermulti_dataset_batch_sampler: proportionalrouter_mapping: {}learning_rate_mapping: {}| Epoch | Step | Training Loss |
|---|---|---|
| 0.0167 | 100 | 0.9901 |
| 0.0333 | 200 | 0.698 |
| 0.0500 | 300 | 0.411 |
| 0.0667 | 400 | 0.2986 |
| 0.0834 | 500 | 0.2381 |
| 0.1000 | 600 | 0.1955 |
| 0.1167 | 700 | 0.1746 |
| 0.1334 | 800 | 0.15 |
| 0.1500 | 900 | 0.1356 |
| 0.1667 | 1000 | 0.1214 |
| 0.1834 | 1100 | 0.1179 |
| 0.2001 | 1200 | 0.1044 |
| 0.2167 | 1300 | 0.0846 |
| 0.2334 | 1400 | 0.0852 |
| 0.2501 | 1500 | 0.0736 |
| 0.2667 | 1600 | 0.068 |
| 0.2834 | 1700 | 0.0618 |
| 0.3001 | 1800 | 0.0571 |
| 0.3167 | 1900 | 0.0486 |
| 0.3334 | 2000 | 0.0551 |
| 0.3501 | 2100 | 0.0457 |
| 0.3668 | 2200 | 0.0493 |
| 0.3834 | 2300 | 0.0395 |
| 0.4001 | 2400 | 0.0421 |
| 0.4168 | 2500 | 0.0352 |
| 0.4334 | 2600 | 0.0352 |
| 0.4501 | 2700 | 0.0365 |
| 0.4668 | 2800 | 0.0352 |
| 0.4835 | 2900 | 0.0327 |
| 0.5001 | 3000 | 0.0313 |
| 0.5168 | 3100 | 0.0354 |
| 0.5335 | 3200 | 0.0298 |
| 0.5501 | 3300 | 0.0306 |
| 0.5668 | 3400 | 0.0338 |
| 0.5835 | 3500 | 0.0293 |
| 0.6002 | 3600 | 0.0269 |
| 0.6168 | 3700 | 0.0278 |
| 0.6335 | 3800 | 0.0277 |
| 0.6502 | 3900 | 0.0265 |
| 0.6668 | 4000 | 0.0302 |
| 0.6835 | 4100 | 0.0284 |
| 0.7002 | 4200 | 0.0246 |
| 0.7169 | 4300 | 0.0243 |
| 0.7335 | 4400 | 0.0267 |
| 0.7502 | 4500 | 0.0277 |
| 0.7669 | 4600 | 0.0236 |
| 0.7835 | 4700 | 0.0261 |
| 0.8002 | 4800 | 0.0252 |
| 0.8169 | 4900 | 0.025 |
| 0.8336 | 5000 | 0.0221 |
| 0.8502 | 5100 | 0.0261 |
| 0.8669 | 5200 | 0.0229 |
| 0.8836 | 5300 | 0.023 |
| 0.9002 | 5400 | 0.0211 |
| 0.9169 | 5500 | 0.0222 |
| 0.9336 | 5600 | 0.0221 |
| 0.9502 | 5700 | 0.024 |
| 0.9669 | 5800 | 0.0239 |
| 0.9836 | 5900 | 0.0208 |
| 1.0002 | 6000 | 0.0235 |
| 1.0168 | 6100 | 0.0213 |
| 1.0335 | 6200 | 0.0222 |
| 1.0502 | 6300 | 0.0207 |
| 1.0669 | 6400 | 0.0187 |
| 1.0835 | 6500 | 0.0224 |
| 1.1002 | 6600 | 0.0202 |
| 1.1169 | 6700 | 0.022 |
| 1.1335 | 6800 | 0.0183 |
| 1.1502 | 6900 | 0.0214 |
| 1.1669 | 7000 | 0.0181 |
| 1.1835 | 7100 | 0.0168 |
| 1.2002 | 7200 | 0.0167 |
| 1.2169 | 7300 | 0.0158 |
| 1.2336 | 7400 | 0.02 |
| 1.2502 | 7500 | 0.014 |
| 1.2669 | 7600 | 0.0149 |
| 1.2836 | 7700 | 0.0143 |
| 1.3002 | 7800 | 0.0158 |
| 1.3169 | 7900 | 0.0128 |
| 1.3336 | 8000 | 0.0157 |
| 1.3503 | 8100 | 0.014 |
| 1.3669 | 8200 | 0.0148 |
| 1.3836 | 8300 | 0.0128 |
| 1.4003 | 8400 | 0.0141 |
| 1.4169 | 8500 | 0.0114 |
| 1.4336 | 8600 | 0.0124 |
| 1.4503 | 8700 | 0.0128 |
| 1.4670 | 8800 | 0.0122 |
| 1.4836 | 8900 | 0.011 |
| 1.5003 | 9000 | 0.0126 |
| 1.5170 | 9100 | 0.013 |
| 1.5336 | 9200 | 0.0129 |
| 1.5503 | 9300 | 0.0122 |
| 1.5670 | 9400 | 0.012 |
| 1.5837 | 9500 | 0.0108 |
| 1.6003 | 9600 | 0.0108 |
| 1.6170 | 9700 | 0.0117 |
| 1.6337 | 9800 | 0.0122 |
| 1.6503 | 9900 | 0.0093 |
| 1.6670 | 10000 | 0.012 |
| 1.6837 | 10100 | 0.0106 |
| 1.7003 | 10200 | 0.0096 |
| 1.7170 | 10300 | 0.0095 |
| 1.7337 | 10400 | 0.0111 |
| 1.7504 | 10500 | 0.0125 |
| 1.7670 | 10600 | 0.0114 |
| 1.7837 | 10700 | 0.0105 |
| 1.8004 | 10800 | 0.0106 |
| 1.8170 | 10900 | 0.0111 |
| 1.8337 | 11000 | 0.0096 |
| 1.8504 | 11100 | 0.0111 |
| 1.8671 | 11200 | 0.0112 |
| 1.8837 | 11300 | 0.0111 |
| 1.9004 | 11400 | 0.0101 |
| 1.9171 | 11500 | 0.01 |
| 1.9337 | 11600 | 0.009 |
| 1.9504 | 11700 | 0.011 |
| 1.9671 | 11800 | 0.011 |
| 1.9838 | 11900 | 0.0093 |
| 2.0003 | 12000 | 0.0113 |
| 2.0170 | 12100 | 0.0091 |
| 2.0337 | 12200 | 0.0106 |
| 2.0503 | 12300 | 0.0092 |
| 2.0670 | 12400 | 0.0091 |
| 2.0837 | 12500 | 0.0105 |
| 2.1004 | 12600 | 0.0096 |
| 2.1170 | 12700 | 0.011 |
| 2.1337 | 12800 | 0.0093 |
| 2.1504 | 12900 | 0.0105 |
| 2.1670 | 13000 | 0.0088 |
| 2.1837 | 13100 | 0.0089 |
| 2.2004 | 13200 | 0.0092 |
| 2.2171 | 13300 | 0.0079 |
| 2.2337 | 13400 | 0.0095 |
| 2.2504 | 13500 | 0.0075 |
| 2.2671 | 13600 | 0.0083 |
| 2.2837 | 13700 | 0.0074 |
| 2.3004 | 13800 | 0.0083 |
| 2.3171 | 13900 | 0.0075 |
| 2.3338 | 14000 | 0.0089 |
| 2.3504 | 14100 | 0.0083 |
| 2.3671 | 14200 | 0.0084 |
| 2.3838 | 14300 | 0.0073 |
| 2.4004 | 14400 | 0.0085 |
| 2.4171 | 14500 | 0.0064 |
| 2.4338 | 14600 | 0.0073 |
| 2.4505 | 14700 | 0.0081 |
| 2.4671 | 14800 | 0.0067 |
| 2.4838 | 14900 | 0.0066 |
| 2.5005 | 15000 | 0.0077 |
| 2.5171 | 15100 | 0.0079 |
| 2.5338 | 15200 | 0.0082 |
| 2.5505 | 15300 | 0.0075 |
| 2.5671 | 15400 | 0.0074 |
| 2.5838 | 15500 | 0.0063 |
| 2.6005 | 15600 | 0.0064 |
| 2.6172 | 15700 | 0.0072 |
| 2.6338 | 15800 | 0.0082 |
| 2.6505 | 15900 | 0.0051 |
| 2.6672 | 16000 | 0.0083 |
| 2.6838 | 16100 | 0.0063 |
| 2.7005 | 16200 | 0.0058 |
| 2.7172 | 16300 | 0.0058 |
| 2.7339 | 16400 | 0.0072 |
| 2.7505 | 16500 | 0.008 |
| 2.7672 | 16600 | 0.0072 |
| 2.7839 | 16700 | 0.0065 |
| 2.8005 | 16800 | 0.0062 |
| 2.8172 | 16900 | 0.0069 |
| 2.8339 | 17000 | 0.0061 |
| 2.8506 | 17100 | 0.0067 |
| 2.8672 | 17200 | 0.0074 |
| 2.8839 | 17300 | 0.0077 |
| 2.9006 | 17400 | 0.0068 |
| 2.9172 | 17500 | 0.0069 |
| 2.9339 | 17600 | 0.006 |
| 2.9506 | 17700 | 0.008 |
| 2.9673 | 17800 | 0.0067 |
| 2.9839 | 17900 | 0.0061 |
@inproceedings{reimers-2019-sentence-bert,
title = "Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks",
author = "Reimers, Nils and Gurevych, Iryna",
booktitle = "Proceedings of the 2019 Conference on Empirical Methods in Natural Language Processing",
month = "11",
year = "2019",
publisher = "Association for Computational Linguistics",
url = "https://arxiv.org/abs/1908.10084",
}
@misc{henderson2017efficient,
title={Efficient Natural Language Response Suggestion for Smart Reply},
author={Matthew Henderson and Rami Al-Rfou and Brian Strope and Yun-hsuan Sung and Laszlo Lukacs and Ruiqi Guo and Sanjiv Kumar and Balint Miklos and Ray Kurzweil},
year={2017},
eprint={1705.00652},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
@misc{hermans2017defense,
title={In Defense of the Triplet Loss for Person Re-Identification},
author={Alexander Hermans and Lucas Beyer and Bastian Leibe},
year={2017},
eprint={1703.07737},
archivePrefix={arXiv},
primaryClass={cs.CV}
}