Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks
Paper • 1908.10084 • Published • 13
How to use andyP/ro-sentence-transformers-v1 with sentence-transformers:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("andyP/ro-sentence-transformers-v1")
sentences = [
"Și i-a trimis să predice împărăția lui Dumnezeu și să vindece bolnavii.",
"Nici nu le-ai auzit, nici nu le-ai cunoscutși nici atunci, demult, urechea nu ți-a fost deschisă să le auzi.Căci am știut că sigur te vei purta cu necredincioșieși că, încă din pântec, ai fost numit răzvrătit.",
"Apoi, i-a trimis să propovăduiască Împărăția lui Dumnezeu și să tămăduiască pe cei bolnavi.",
"Ei s‑au adunat împotriva lui Moise și a lui Aaron și le‑au zis: „Până aici! Ajunge! Toată adunarea, toți sunt sfinți și DOMNUL este în mijlocul lor! De ce vă înălțați voi mai presus de adunarea DOMNULUI?”"
]
embeddings = model.encode(sentences)
similarities = model.similarity(embeddings, embeddings)
print(similarities.shape)
# [4, 4]This is a sentence-transformers model finetuned from readerbench/RoBERT-base. 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': 512, 'do_lower_case': False, 'architecture': 'BertModel'})
(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})
)
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("andyP/ro-sentence-transformers-v1")
# Run inference
sentences = [
'Atunci veți începe să spuneți: «Noi am mâncat și am băut în fața Ta și pe străzile noastre ai dat învățături!»',
'Atunci veți începe să ziceți: Noi am mâncat și am băut înaintea ta și ne‐ai învățat în ulițele noastre.',
'Iar mulţimile se mirau văzând că muţii vorbesc, ciungii se vindecă, şchiopii umblă şi orbii văd. Şi slăveau pe Dumnezeul lui Israel.',
]
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.0844, 0.2598],
# [-0.0844, 1.0000, 0.0068],
# [ 0.2598, 0.0068, 1.0000]])
ro_similarity-dev and ro_similarity-testTripletEvaluator| Metric | ro_similarity-dev | ro_similarity-test |
|---|---|---|
| cosine_accuracy | 0.2702 | 0.2653 |
anchor, positive, and negative| anchor | positive | negative | |
|---|---|---|---|
| type | string | string | string |
| details |
|
|
|
| anchor | positive | negative |
|---|---|---|
Căci viața – daru-acesta sfânt – Acuma, fost-a arătată, Iar noi, care-am văzut-o, iată Că despre ea, mărturisim Și, tuturora, vă vestim De viața veșnică, aflată, La Tatăl – nouă – arătată; |
– căci viața a fost arătată, iar noi am văzut și mărturisim și vă vestim viața veșnică, viață care era cu Tatăl și care ne-a fost arătată – |
Au făcut și doi heruvimi, din aur bătut, la cele două capete ale Capacului ispășirii, |
Dar dintre cele care doar rumegă sau care au doar copita despicată, să nu mâncați. Acestea sunt: cămila, iepurele sălbatic și viezurele; pentru că ele, deși rumegă, nu au copita despicată. Să le considerați necurate. |
Dar dintre cele care doar rumegă sau au doar copita despicată, să nu mâncați următoarele: cămila, iepurele sălbatic și viezurele, pentru că, deși rumegă, acestea nu au copita despicată. Să fie pentru voi necurate. |
Nimeni să nu‑ți disprețuiască tinerețea, ci fii o pildă pentru credincioși: în vorbire, în purtare, în dragoste, în credință, în curăție! |
Din tribul lui Zabulon: Gadiel, fiul lui Sodi. |
Eu m-am întors și am coborât de pe acel munte care ardea ca un foc. Țineam în mâini cele două table ale Legământului. |
Dar nelegiuitul alunecă ușor pe fața apelor,pe pământ n-are decât o parte blestematăși niciodată n-apucă pe drumul celor vii! |
TripletLoss with these parameters:{
"distance_metric": "TripletDistanceMetric.EUCLIDEAN",
"triplet_margin": 5
}
anchor, positive, and negative| anchor | positive | negative | |
|---|---|---|---|
| type | string | string | string |
| details |
|
|
|
| anchor | positive | negative |
|---|---|---|
Ridicându-se, marele preot și toți cei care erau împreună cu el, adică gruparea saducheilor, s-au umplut de mânie, |
Ridicându-se marele preot și toți cei care erau cu el, adică gruparea saduceilor, s-au umplut de mânie, |
Căci Domnul mângâie Siónul,mângâie toate ruinele sale,transformă pustiul într-un Édenși ținutul uscatîntr-o grădină a Domnului.În ea va fi bucurie și veselie,mulțumire și sunet de cântare. |
Ce va rămâne din darul de mâncare, să fie dat lui Aaron și fiilor lui, ca parte foarte sfântă a sacrificiilor consumate de foc pentru Iahve. |
Partea care va rămâne din ofrandă să fie a lui Aaron și a fiilor lui: este un lucru preasfânt din jertfele mistuite de foc aduse DOMNULUI. |
Ție îți voi aduce sacrificiul de mulțumire și voi chema numele DOMNULUI. |
Și în trei caturi se găseau. Ferestrele ce le aveau – Și cari în ziduri sunt tăiate – Față în față-au fost aflate. |
Erau trei caturi și fiecare din ele avea ferestrele față în față. |
Noi am plecat înainte și am călătorit cu corabia până la Asos. În acea localitate urma să ne întâlnim cu Pavel, pentru că el trebuia să ajungă acolo pe jos. |
TripletLoss with these parameters:{
"distance_metric": "TripletDistanceMetric.EUCLIDEAN",
"triplet_margin": 5
}
eval_strategy: stepsper_device_train_batch_size: 156per_device_eval_batch_size: 256learning_rate: 2e-05num_train_epochs: 10warmup_ratio: 0.1bf16: Trueload_best_model_at_end: Truebatch_sampler: no_duplicatesoverwrite_output_dir: Falsedo_predict: Falseeval_strategy: stepsprediction_loss_only: Trueper_device_train_batch_size: 156per_device_eval_batch_size: 256per_gpu_train_batch_size: Noneper_gpu_eval_batch_size: Nonegradient_accumulation_steps: 1eval_accumulation_steps: Nonetorch_empty_cache_steps: Nonelearning_rate: 2e-05weight_decay: 0.0adam_beta1: 0.9adam_beta2: 0.999adam_epsilon: 1e-08max_grad_norm: 1.0num_train_epochs: 10max_steps: -1lr_scheduler_type: linearlr_scheduler_kwargs: {}warmup_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: Falseuse_ipex: Falsebf16: Truefp16: Falsefp16_opt_level: O1half_precision_backend: autobf16_full_eval: Falsefp16_full_eval: Falsetf32: Nonelocal_rank: 1ddp_backend: Nonetpu_num_cores: Nonetpu_metrics_debug: Falsedebug: []dataloader_drop_last: Truedataloader_num_workers: 0dataloader_prefetch_factor: Nonepast_index: -1disable_tqdm: Falseremove_unused_columns: Truelabel_names: Noneload_best_model_at_end: Trueignore_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}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: 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: Falseneftune_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: Falseprompts: Nonebatch_sampler: no_duplicatesmulti_dataset_batch_sampler: proportionalrouter_mapping: {}learning_rate_mapping: {}| Epoch | Step | Training Loss | Validation Loss | ro_similarity-dev_cosine_accuracy | ro_similarity-test_cosine_accuracy |
|---|---|---|---|---|---|
| 0.3075 | 1000 | 4.635 | 4.7713 | 0.4223 | - |
| 0.6150 | 2000 | 3.1348 | 4.4889 | 0.3678 | - |
| 0.9225 | 3000 | 2.8894 | 4.2360 | 0.3451 | - |
| 1.2300 | 4000 | 2.7448 | 3.9488 | 0.3259 | - |
| 1.5375 | 5000 | 2.6447 | 4.0398 | 0.3256 | - |
| 1.8450 | 6000 | 2.5843 | 3.8490 | 0.3127 | - |
| 2.1525 | 7000 | 2.5125 | 3.6485 | 0.3061 | - |
| 2.4600 | 8000 | 2.4558 | 3.6591 | 0.3012 | - |
| 2.7675 | 9000 | 2.4151 | 3.6976 | 0.3199 | - |
| 3.0750 | 10000 | 2.3673 | 3.8166 | 0.3213 | - |
| 3.3825 | 11000 | 2.33 | 3.8099 | 0.3081 | - |
| 3.6900 | 12000 | 2.3025 | 3.7273 | 0.3079 | - |
| 3.9975 | 13000 | 2.2748 | 3.6883 | 0.2974 | - |
| 4.3050 | 14000 | 2.2312 | 3.7944 | 0.3081 | - |
| 4.6125 | 15000 | 2.2177 | 3.6095 | 0.2992 | - |
| 4.9200 | 16000 | 2.1936 | 3.6556 | 0.2941 | - |
| 5.2276 | 17000 | 2.1657 | 3.6203 | 0.2977 | - |
| 5.5351 | 18000 | 2.1387 | 3.5715 | 0.2904 | - |
| 5.8426 | 19000 | 2.1285 | 3.5195 | 0.2870 | - |
| 6.1501 | 20000 | 2.0988 | 3.3412 | 0.2776 | - |
| 6.4576 | 21000 | 2.084 | 3.4944 | 0.2782 | - |
| 6.7651 | 22000 | 2.0676 | 3.3771 | 0.2770 | - |
| 7.0726 | 23000 | 2.0543 | 3.4210 | 0.2823 | - |
| 7.3801 | 24000 | 2.0357 | 3.4060 | 0.2765 | - |
| 7.6876 | 25000 | 2.0251 | 3.4027 | 0.2794 | - |
| 7.9951 | 26000 | 2.0134 | 3.2960 | 0.2741 | - |
| 8.3026 | 27000 | 1.9881 | 3.3512 | 0.2726 | - |
| 8.6101 | 28000 | 1.9898 | 3.2822 | 0.2731 | - |
| 8.9176 | 29000 | 1.9788 | 3.2444 | 0.2711 | - |
| 9.2251 | 30000 | 1.9548 | 3.2346 | 0.2682 | - |
| 9.5326 | 31000 | 1.9525 | 3.2601 | 0.2713 | - |
| 9.8401 | 32000 | 1.9535 | 3.2555 | 0.2702 | - |
| -1 | -1 | - | - | - | 0.2653 |
@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{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}
}
Base model
readerbench/RoBERT-base