Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks
Paper • 1908.10084 • Published • 15
How to use Thomslionel/embedings with sentence-transformers:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("Thomslionel/embedings")
sentences = [
"Les trois malles",
"Autrefois, la hyène et le chien étaient camarades. Un jour, la hyène dit au chien qu'elle connaissait un endroit où il y avait du miel. Le chien dit qu'il en savait un également. « Allons manger chacun notre miel, » dit la hyène, « et nous en rapporterons un peu sur le bout de notre queue pour le faire goûter à l'autre. » La hyène, stupide, ne savait pas ce qu'était le miel et, après avoir mangé de la boue, elle en rapporta au bout de sa queue. Le chien, lui, rapporta vraiment du miel.\n\n« Viens goûter, » dit la hyène. « Mais ce n'est pas du miel, » dit le chien, crachant. « Viens goûter, » dit à son tour le chien, et la hyène sut ce qu'était le miel. « Montre-moi l'endroit tout de suite ou je te tue, » dit-elle au chien. Celui-ci, effrayé, s'enfuit au village et depuis ce temps-là, hyène et chien ne sont plus camarades.",
"Une femme jolie était recherchée par un roi : le général du roi la recherchait aussi : un forgeron aussi. Elle ne voulait pas se décider. Un joli garçon vivait au village : il était pauvre : c’était lui que la femme aimait. Le roi le met en prison. La femme vient chez le roi, et demande qu’on relâche son amoureux. Le roi dit : « Tu sais bien que je t’aime : si tu veux coucher avec moi, je te rendrai ton amoureux ». La femme accepte et lui dit : « Il faut que tu viennes chez moi. » Le roi dit : « J’écrirai demain au chef de la prison et je ferai mettre ton ami en liberté ; à quelle heure puis-je venir chez toi ? ». « À sept heures du soir », dit la femme. La femme va chez le général : « Je viens te demander de faire délivrer mon ami. » Il répond : « Si tu veux coucher avec moi, je le ferai délivrer ». « Bien, dit la femme. Viens à huit heures du soir. » Elle va chez le forgeron, et lui dit : « Je veux que tu me fabriques trois malles ». « Oui, dit le forgeron, si tu couches avec moi ». « Bien, dit la femme. Apporte-les à quatre heures, et viens le soir à neuf heures. »\n\nLe forgeron fait les trois malles. À sept heures arrive le roi déguisé pour qu’on ne le reconnaisse pas. Il apporte une lettre portant son cachet et la donne à la femme pour faire sortir de prison l’ami de la femme. Elle prend le papier, le garde, et dit au roi : « Couche ici jusqu’à demain ».\n\nLe général vient à huit heures, il salue, devant la porte le roi dit : « Qui est là ? ». La femme dit : « C’est le général ». « Dis-lui de se retirer », dit le roi. « Je ne peux pas le renvoyer », dit la femme. « N’y a-t-il pas un endroit où me cacher ? », dit le roi. « Non, dit la femme, mais si tu veux te mettre dans une malle, il ne te verra pas ». Il se met dedans, elle ferme et fait entrer le général. Celui-ci se repose. Mais le forgeron arrive et salue devant la porte. Le général dit : « Qui est-ce ? ». « Le forgeron », dit la femme. « Défends-lui d’entrer », dit le général. « Je ne peux pas, dit la femme ». « Ne puis-je me cacher quelque part ? », dit le général. « Mets-toi dans cette malle », dit la femme. Il s’y met et elle l’enferme. Le forgeron rentre et cause avec la femme.\n\nElle lui dit : « Tu m’as fait des malles trop petites : on ne peut y faire coucher un homme ». « Si, dit le forgeron, on peut y coucher, vois plutôt ». Il se met dans la malle, elle ferme le couvercle, met les trois malles l’une sur l’autre, le roi en bas, et s’en va coucher dans une autre maison.\n\nLe lendemain, elle va à la prison et fait sortir son bon ami : elle lui dit : « Quittons cette ville, car j’ai enfermé le roi, le général et le forgeron dans des malles ». Ils se sauvent.\n\nPersonne ne voit le roi, le général, ni le forgeron. Tout est sans dessus-dessous en ville : la foule s’amasse devant la porte du roi. Les femmes disent aux curieux : « Depuis hier soir le roi n’a pas couché ici ». La foule va chez le général, on fait la même réponse. De même chez le forgeron. Tous les soldats sont rassemblés et vont dans la ville, demandent si on a vu le roi. Les soldats arrivent devant la maison où la femme avait enfermé le roi, on brise la porte, et on trouve le roi qui sanglotait dans la malle. Le forgeron, qui était à moitié mort, urine dans sa malle, et cela tombe sur le général qui en fait autant ; le tout tombe sur le roi.\n\nLes soldats ouvrent les malles, et délivrent les prisonniers. Le général envoie quelqu’un chez lui pour qu’on lui apporte d’autres vêtements : il s’habille : le roi lui ordonne de se rendre au palais et de faire partir tous les gens qui étaient devant la route, puis d’y faire prendre des habits et de les lui apporter. Il envoie 20 hommes chercher la femme : mais ils ne la trouvent pas. Le roi n’a jamais plus cherché à coucher avec les femmes.",
"Il y avait un génie qui volait la femme des nouveaux mariés. Quiconque se mariait, se voyait privé de sa nouvelle épouse, enlevée par le génie. \n\nUn brave et téméraire chasseur apprit la nouvelle et annonça qu'il irait chercher une femme dans ce pays, afn\n\nde savoir si les hommes y sont sans valeur.\n\nAprès avoir dit cela, il se prépara et partit. Quand il arriva dans la cité, on le reçut avec faste. Le roi lui demanda le motif de sa visite. Le chasseur lui dit qu'il venait prendre femme.\n\nLe roi lui dit :\n\n- Ici tu ne peux obtenir une femme, car à tous ceux à qui on a donné une épouse, le génie l'a enlevée et toutes ces épouses ont été ainsi perdues à jamais.\n\nLe jeune homme répondit au roi :\n\n- Moi je suis un chasseur. Si tu me donnes ta flle en mariage et si le génie me la prend, je lutterai avec lui. Toi, observe-moi simplement ; ne te préoccupe que de moi.\n\n- Ce que tu dis, est-ce que c'est sûr ? demanda le roi.\n\n- C'est sûr, répondit l'homme.\n\nLe roi lui donna une femme. Le mariage fut célébré durant trois jours.\n\nLorsque les invités furent partis, le jeune homme rentra avec son épouse dans leur chambre. \n\nDès qu'ils se couchèrent, le mari tenta de la toucher dans l'obscurité, mais ne trouva rien. Il s'inquiéta. Il se leva et alla voir le père de la mariée. Il lui dit qu'en effet, il avait eu raison. \n\nLe génie était venu voler son épouse !\n\nLe matin, il alla trouver un marabout et lui dit :\n\n- J'ai épousé une femme et le génie est venu la prendre.\n\nLe marabout regarda les signes et lui dit :\n\n- Le génie, toutes les personnes qu'il a enlevées d'ici, il les a emportées au-delà du feuve.\n\nSi tu peux dépasser le feuve, tu pourras tuer les génies.\n\nLes génies se trouvent dans une antilope-jument. Dans cette antilope, il y a un kewel. Dans cette petite antilope, il y a un corbeau. Dans ce corbeau, il y a un œuf. Cet œuf, si tu l'écrases, les femmes volées par\n\nle génie vont t'apparaître.\n\nLe marabout dit encore :\n\n- L’antilope Koba quitte son logis vers onze heures pour aller boire à la roche qui se trouve dans le feuve. Louti est son nom.\n\nLe chasseur prit sa gibecière, y mit sa nourriture et partit, accompagné de son chien.\n\nAussitôt qu'ils furent sortis de la ville, un lion les vit, rugit et courut vers eux. L'homme\n\ns'agenouilla pour tirer, mais le lion lui demanda :\n\n- Que vas-tu faire ?\n\n- On a volé ma femme, je suis à sa recherche; si tu veux m'attaquer, je te tue !\n\nLe lion lui dit :\n\n- Partons donc, je m'en vais t'aider. Ce que peut faire un ou deux, trois le feront mieux.\n\nIls marchèrent longtemps ; un aigle venant on ne sait d'où, plana au-dessus du chasseur.\n\nL'homme voulut le tuer, l'aigle dit :\n\n- Que vas-tu faire de moi ?\n\n- On a volé ma femme, je suis à sa recherche. Si tu m'attaques, je te tue tout de suite.\n\nL'aigle lui dit :\n\n- Allons-y, je vais t'aider. Ce que deux ou trois peuvent faire, quatre le pourront mieux.\n\nL'homme, avec les trois animaux, chemina dans la brousse. Quand ils arrivèrent au bord du feuve, le lion creusa un trou profond ; ils s'y tapirent, bien cachés.\n\nVers onze heures, l'antilope-Koba arriva pour boire au rocher du feuve. Le lion bondit et tomba sur elle ; il l'éventra. La petite antilope sortit du ventre et se mit à courir. Le chien la poursuivit. Ils coururent sur deux longueurs de sas, le chien l'attrapa et l'éventra. Un corbeau en sortit et s'envola. L'aigle le rencontra en l'air et le percuta : le corbeau tomba, l'aigle l'éventra. Un œuf en sortit et roula sur le sol, le chasseur l'écrasa.\n\nAussitôt on entendit de l'autre rive du feuve, les cris de nombreuses femmes.\n\nL'homme retourna à la ville pour appeler les habitants. Quand ils vinrent, chacun prit sa pirogue.\n\n Le chasseur, lui, monta sur le lion et ils traversèrent le feuve. Là-bas, il reconnut sa femme, la reprit et rentra avec elle. \n\nC'est là que le conte alla tomber dans la mer ; celui qui le respire ira au paradis."
]
embeddings = model.encode(sentences)
similarities = model.similarity(embeddings, embeddings)
print(similarities.shape)
# [4, 4]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}
}