Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks
Paper • 1908.10084 • Published • 15
How to use AhmadAfles/AraGenre-v2-expanded with sentence-transformers:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("AhmadAfles/AraGenre-v2-expanded")
sentences = [
"تحدد الوثيقة الدستورية شروط الترشح لمناصب الدولة العليا، لضمان الكفاءة والشرعية في إدارة شؤون البلاد.",
"تُعَدُّ 'الرَّدَاءَةُ' فِي الفُنُونِ الحَدِيثَةِ بَعْضَ الأَحْيَانِ فِعْلًا مُقَاوِماً لِأَنْسَاقِ النُّخْبَةِ؛ فهي تفرض لغة البسطاء وتتحدى معايير الجمال الكلاسيكية.",
"اسْتَخْدِمْ هَذَا الفِلْتَر التَّفَاعُلِيَّ الجَدِيدَ لِتَكْتَشِفَ شَخْصِيَّتَكَ الكَرْتُونِيَّةَ المُشَابِهَةَ، وَشَارِكِ النَّتِيجَةَ مَعَ أَصْدِقَائِكَ فِي السِّتُورِي.",
"تعتبر الديباجة الدستورية روح الوثيقة، حيث تعبر عن تطلعات الشعب، تاريخه، والقيم والمبادئ التي تأسست عليها الدولة."
]
embeddings = model.encode(sentences)
similarities = model.similarity(embeddings, embeddings)
print(similarities.shape)
# [4, 4]This is a sentence-transformers model trained. 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): NeoWrapper(
(model): NeoBERT(
(encoder): Embedding(65000, 768, padding_idx=0)
(transformer_encoder): ModuleList(
(0-27): 28 x EncoderBlock(
(qkv): Linear(in_features=768, out_features=2304, bias=False)
(wo): Linear(in_features=768, out_features=768, bias=False)
(ffn): SwiGLU(
(w12): Linear(in_features=768, out_features=4096, bias=False)
(w3): Linear(in_features=2048, out_features=768, bias=False)
)
(attention_norm): RMSNorm((768,), eps=1e-05, elementwise_affine=True)
(ffn_norm): RMSNorm((768,), eps=1e-05, elementwise_affine=True)
)
)
(layer_norm): RMSNorm((768,), eps=1e-05, elementwise_affine=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("sentence_transformers_model_id")
# Run inference
sentences = [
'في النهاية، كل اكتشاف أثري هو خطوة جديدة نحو إدراك ذواتنا وتفهم رحلتنا الطويلة كبشر على هذا الكوكب.',
'الاستعانة بصور الأقمار الصناعية تتيح لعلماء الآثار اكتشاف مستوطنات بشرية قديمة مدفونة تحت رمال الصحراء الكبرى.',
'عشان تحافظ على نظرك وصحتك وأنت قاعد طول النهار قدام الكمبيوتر في المكتب، اتبع قاعدة 20-20-20.. يعني كل 20 دقيقة بص لحاجة بعيدة مسافة 20 قدم لمدة 20 ثانية.',
]
embeddings = model.encode(sentences)
print(embeddings.shape)
# [3, 768]
# 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 |
|---|---|
ثقافة الشركة الناشئة بتتحدد من أول 5 موظفين، اختيار الفريق هو أهم قرار هياخده المؤسس؛ لازم تختار ناس عندهم شغف وقدرة على التحمل. |
الـ MVP أو المنتج الأدنى القابل للتجربة هو أهم خطوة؛ ابدأ بحل المشكلة الأساسية، وبعدين ابني باقي المميزات بناءً على ملاحظات المستخدمين. |
في النهاية، الموسيقى هي احتفال بالحياة؛ هي الطريقة التي نعبر بها عن أنفسنا عندما تعجز الكلمات عن وصف ما بداخلنا. |
كتابة الأغاني هي عملية صياغة للمشاعر؛ البحث عن الكلمة الصحيحة التي تتناسب مع النغمة هي أصعب مهام الشاعر الغنائي. |
السياسة دي زي لعبة الشطرنج، خطوة واحدة غلط من الوزير ممكن تضيع مجهود سنين، والشاطر هو اللي يعرف يمتص غضب الشارع في الوقت المناسب. |
العقوبات الاقتصادية المفروضة على بعض الدول غالباً ما تؤثر على المواطن البسيط والطبقات الهشة، بينما تظل النخب الحاكمة بعيدة عن تداعياتها المباشرة. |
MultipleNegativesRankingLoss with these parameters:{
"scale": 20.0,
"similarity_fct": "cos_sim"
}
per_device_train_batch_size: 16per_device_eval_batch_size: 16num_train_epochs: 5multi_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: 5max_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}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: 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: Nonedispatch_batches: Nonesplit_batches: 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 |
|---|---|---|
| 4.7170 | 500 | 0.5321 |
@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}
}