Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks
Paper
•
1908.10084
•
Published
•
10
This is a sentence-transformers model finetuned from sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2. It maps sentences & paragraphs to a 384-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': 128, 'do_lower_case': False}) with Transformer model: BertModel
(1): Pooling({'word_embedding_dimension': 384, '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})
)
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("Thomslionel/embedings")
# Run inference
sentences = [
"Papabondieu, l'homme\n et le tigre",
"Comme le dit le proverbe : « Papabondieu est le premier, l'homme le deuxième, et le tigre le dernier. » Un jour, tigre croise l'homme à la rivière et lui demande s'il croit que le proverbe dit la vérité. « Permets-moi de grimper sur ce cocotier pour réfléchir et te répondre. » Lorsqu'il se retrouve très, très haut, sur la cime de l'arbre, l'homme crie à tigre : « Le proverbe dit la vérité : Papabondieu est le premier, l'homme le deuxième, et le tigre le dernier. »\n\nTigre grogne, rugit et siffle longuement pour rameuter ses frères qui accourent aussitôt en rangs serrés. « L'homme qui est dans ce cocotier prétend que : Papabondieu est le premier, l'homme le deuxième, et le tigre le dernier. » « Mensonge, » rétorquent les tigres qui ceinturent l'arbre, lui labourent le tronc avec leurs griffes, le secouent sans pour autant arriver à y grimper. Du haut du cocotier, l'homme regarde la scène avec un sourire narquois. « Nous ferons la courte échelle, » s'écrie tigre, « et avec nos corps nous élèverons une tour assez haute pour que le dernier d'entre nous puisse faire tomber l'homme de son perchoir. Tigre ne sera jamais le dernier ! »\n\nEt c'est ce que les tigres firent avec entrain et détermination. Les vieux et les moins vieux consolidèrent la base, les adultes et les jeunes grimpèrent au sommet de l'échelle. C'est alors que l'homme, perché sur la cime qu'avait atteint le plus jeune des tigres, se pencha et lui glissa à l'oreille, assez fort pour qu'on l'entende : « Si tu bouges d'une semelle, je te coupe la tête avec mon couteau. » En entendant la menace faite à son petit, la mère du jeune tigre qui se trouvait au milieu de la tour, rugit de terreur : « Yooowwwwwwwwwwwwwwwww ! »\n\nLes tigres sursautèrent et déséquilibrèrent la tour qui s'écroula ; ils tombèrent et prirent la poudre d'escampette. Quand ils eurent tous disparu, l'homme debout au pied du cocotier déclara : « Et toc ! Comme le dit la parole : Papabondieu est le premier, l'homme le deuxième et le tigre le dernier. »",
'L’autruche était depuis toujours la Reine des Oiseaux. Grande et forte, elle savait courir très vite, mais surtout, elle était extrêmement sage et perspicace. Cependant, certains oiseaux, surtout ceux qui étaient fiers de voler haut et bien, se plaignaient de leur reine.\n\nL’aigle protestait plus que les autres :\n\n« Comment se fait-il que l’autruche soit notre reine puisqu’elle ne sait pas voler ? Pendant que nous y sommes, une poule pourrait aussi bien faire l’affaire ! »\n\nLe cormoran, l’albatros, puis le serpentaire se rallièrent à l’aigle, obtenant que l’on procède à de nouvelles élections. L’oiseau qui volerait le plus haut, régnerait sur les autres. L’autruche ne participa même pas à la compétition et, de honte, cacha sa tête dans le sable.\n\nLa compétition commença. Le cormoran, l’albatros et le serpentaire s’élevèrent très haut dans le ciel, mais l’aigle vola encore plus haut. Il planait triomphalement dans les nuages, quand il vit soudain un petit troglodyte s’agiter au-dessus de lui. Il s’était caché subrepticement dans le plumage de l’aigle qui l’avait emporté jusque dans le ciel.\n\nL’aigle tenta en vain de voler encore plus haut, mais les forces lui manquèrent. Les oiseaux furent interloqués et mécontents. Ce minuscule troglodyte ferait, en vérité, un piètre roi ! Le petit oiseau se hâta de les rassurer :\n\n« Je ne veux pas être roi. Quel souverain pourrais-je faire ? Aussi mauvais que ce stupide aigle qui se laisse duper par n’importe qui ? Que la sage autruche continue à être notre reine ! »\n\nEt c’est ainsi que l’autruche resta la Reine des Oiseaux.',
]
embeddings = model.encode(sentences)
print(embeddings.shape)
# [3, 384]
# Get the similarity scores for the embeddings
similarities = model.similarity(embeddings, embeddings)
print(similarities.shape)
# [3, 3]
sentence_0 and sentence_1| sentence_0 | sentence_1 | |
|---|---|---|
| type | string | string |
| details |
|
|
| sentence_0 | sentence_1 |
|---|---|
Le lièvre, la hyène et les pois de terre |
Il était une fois, un cultivateur qui sema des pois de terre. Le champ produisit beaucoup et le cultivateur en récolta une grande quantité qu'il conserva dans un grenier. La même année, une famine frappa les animaux de la brousse. Alors le lièvre trouva un plan pour se nourrir avec sa famille à partir du grenier du cultivateur. Il se rendait au village en l'absence des grandes personnes et trouvait un enfant à la maison. Il disait à l'enfant d'aller enlever des pois de terre et de lui amener pour qu'il en fasse un tour de magie. Quand l'enfant lui apportait une certaine quantité, il prononçait des formules en alignant les grains de pois de terre sur le sol de sorte à présenter une belle image. L'enfant, tout content, applaudissait et le lièvre emportait la quantité de pois de terre pour manger avec sa famille. Au retour des parents, l'enfant leur expliqua : « Il y a quelqu'un qui vient jouer avec moi en votre absence et emporte des pois de terre en repartant. » Les parents guettaient d... |
La bataille des animaux |
L'éléphant apporta un jour ses dabas chez le forgeron pour qu'il les lui arrangeât. Or il arriva que le coq fit la même chose en même temps. Le forgeron arrangea d'abord les dabas du coq. L'éléphant étant survenu blâma le forgeron disant : « Il faut d'abord arranger mes dabas, car je suis plus fort que le coq. » « Montre-le, » dit le forgeron. |
Les trois plus petits hommes du monde |
Un jour, Wende dit au chien : « Va me chercher les trois hommes les plus petits que tu trouveras pour que je fasse un sacrifice. » Le chien vit d'abord un homme assis à l'ombre des feuilles des arachides : « Il est bien petit, » dit-il, et il l'emporta. Puis il en trouva un autre qui avait fabriqué une échelle pour pouvoir mettre du grain dans une corbeille à mil. « Est-il petit celui-là ! » et il l'emporta. Puis il en trouva un troisième qui voulait monter à cheval sur une fourmi mais qui ne pouvait pas le faire, étant trop petit, et qui roulait un grain de sable pour pouvoir enfourcher sa monture. Il les amena tous les trois à Wende : « Ce sont bien là, en effet, les plus petits hommes, » dit le dieu, « et c'est avec eux que je vais faire mon sacrifice. » |
MultipleNegativesRankingLoss with these parameters:{
"scale": 20.0,
"similarity_fct": "cos_sim"
}
per_device_train_batch_size: 16per_device_eval_batch_size: 16num_train_epochs: 100multi_dataset_batch_sampler: round_robinoverwrite_output_dir: Falsedo_predict: Falseeval_strategy: noprediction_loss_only: Trueper_device_train_batch_size: 16per_device_eval_batch_size: 16per_gpu_train_batch_size: Noneper_gpu_eval_batch_size: Nonegradient_accumulation_steps: 1eval_accumulation_steps: Nonetorch_empty_cache_steps: Nonelearning_rate: 5e-05weight_decay: 0.0adam_beta1: 0.9adam_beta2: 0.999adam_epsilon: 1e-08max_grad_norm: 1num_train_epochs: 100max_steps: -1lr_scheduler_type: linearlr_scheduler_kwargs: {}warmup_ratio: 0.0warmup_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: Falseuse_ipex: Falsebf16: Falsefp16: Falsefp16_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: Falsedataloader_num_workers: 0dataloader_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}tp_size: 0fsdp_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}deepspeed: Nonelabel_smoothing_factor: 0.0optim: adamw_torchoptim_args: Noneadafactor: Falsegroup_by_length: Falselength_column_name: lengthddp_find_unused_parameters: Noneddp_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: Falsegradient_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: Falseneftune_noise_alpha: Noneoptim_target_modules: Nonebatch_eval_metrics: Falseeval_on_start: Falseuse_liger_kernel: Falseeval_use_gather_object: Falseaverage_tokens_across_devices: Falseprompts: Nonebatch_sampler: batch_samplermulti_dataset_batch_sampler: round_robin| Epoch | Step | Training Loss |
|---|---|---|
| 22.7273 | 500 | 0.3077 |
| 45.4545 | 1000 | 0.0072 |
| 68.1818 | 1500 | 0.0039 |
| 90.9091 | 2000 | 0.0025 |
@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}
}