Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks
Paper
• 1908.10084 • Published
• 12
This is a Cross Encoder model finetuned from MatMulMan/araelectra-base-discriminator-tydi-tafseer-pairs using the sentence-transformers library. It computes scores for pairs of texts, which can be used for text reranking and semantic search.
First install the Sentence Transformers library:
pip install -U sentence-transformers
Then you can load this model and run inference.
from sentence_transformers import CrossEncoder
# Download from the 🤗 Hub
model = CrossEncoder("cross_encoder_model_id")
# Get scores for pairs of texts
pairs = [
['بخصوص الاشتراكات، ممكن توضحلي مين بيدفع كام؟ يعني العامل بيساهم بقد إيه وصاحب الشغل بيكمل الباقي؟', 'أيوه، العامل له الحق يرفض التغييرات اللي بتضره، خصوصًا لو كانت في مواعيد الشغل، الراتب، أو طبيعة العمل. ولو صاحب العمل أصر، العامل يقدر يلجأ لمكتب العمل أو المحكمة المختصة.'],
['السؤال بالبلدي: الفلوس دي بندفعها للموظف لو قرر يسيب الشغل بعد سن معين، ولا دي بس للناس اللي الشركة بتستغنى عنهم؟', 'أيوه، العامل يقدر ياخد المكافأة حتى لو هو اللي قرر يسيب الشغل بعد سن الستين. مش لازم يكون اتفصل، المهم إن خدمته انتهت بعد ما كمل المدة المطلوبة.'],
['لو قررت امشي من الشركة، هل فيه ورق أو تصديق لازم اخده من مكتب العمل عشان اضمن حقي بعد كده؟ (تركيز على الحقوق بعد الاستقالة)', 'مدة فترة التجربة في أي عقد ماينفعش تزيد عن 3 شهور، وخلال المدة دي ينفع فسخ العقد من أي طرف بدون تعويض.'],
['لو أم بترضع طفلها في الشغل، وقت الرضاعة ده بيعتبر جزء من الدوام الرسمي بتاعها ولا لازم تعوضه بعدين؟', 'لو اتفقت مع الشركة كتابيًا إنك تلتزم بفترة معينة بعد التدريب، وسِبت الشغل قبل ما تكمّل المدة دي، ساعتها ممكن الشركة تطلب منك تدفع جزء من تكلفة التدريب، لكن لازم ده يكون مكتوب بوضوح في العقد.'],
['ممكن آخد المرتب بتاعي كله فلوس مباشرة من غير ما يتحط في البنك؟ ولا ده إجباري؟', 'نعم، الضرائب والتأمينات مش داخلة في الحد الأقصى للخصومات (الـ25%)، لأنها إلزامية من الدولة. يعني ممكن المرتب يتخصم منه ضرائب وتأمينات فوق الـ25% حسب القانون.'],
]
scores = model.predict(pairs)
print(scores.shape)
# (5,)
# Or rank different texts based on similarity to a single text
ranks = model.rank(
'بخصوص الاشتراكات، ممكن توضحلي مين بيدفع كام؟ يعني العامل بيساهم بقد إيه وصاحب الشغل بيكمل الباقي؟',
[
'أيوه، العامل له الحق يرفض التغييرات اللي بتضره، خصوصًا لو كانت في مواعيد الشغل، الراتب، أو طبيعة العمل. ولو صاحب العمل أصر، العامل يقدر يلجأ لمكتب العمل أو المحكمة المختصة.',
'أيوه، العامل يقدر ياخد المكافأة حتى لو هو اللي قرر يسيب الشغل بعد سن الستين. مش لازم يكون اتفصل، المهم إن خدمته انتهت بعد ما كمل المدة المطلوبة.',
'مدة فترة التجربة في أي عقد ماينفعش تزيد عن 3 شهور، وخلال المدة دي ينفع فسخ العقد من أي طرف بدون تعويض.',
'لو اتفقت مع الشركة كتابيًا إنك تلتزم بفترة معينة بعد التدريب، وسِبت الشغل قبل ما تكمّل المدة دي، ساعتها ممكن الشركة تطلب منك تدفع جزء من تكلفة التدريب، لكن لازم ده يكون مكتوب بوضوح في العقد.',
'نعم، الضرائب والتأمينات مش داخلة في الحد الأقصى للخصومات (الـ25%)، لأنها إلزامية من الدولة. يعني ممكن المرتب يتخصم منه ضرائب وتأمينات فوق الـ25% حسب القانون.',
]
)
# [{'corpus_id': ..., 'score': ...}, {'corpus_id': ..., 'score': ...}, ...]
sentence_0, sentence_1, and label| sentence_0 | sentence_1 | label | |
|---|---|---|---|
| type | string | string | float |
| details |
|
|
|
| sentence_0 | sentence_1 | label |
|---|---|---|
بخصوص الاشتراكات، ممكن توضحلي مين بيدفع كام؟ يعني العامل بيساهم بقد إيه وصاحب الشغل بيكمل الباقي؟ |
أيوه، العامل له الحق يرفض التغييرات اللي بتضره، خصوصًا لو كانت في مواعيد الشغل، الراتب، أو طبيعة العمل. ولو صاحب العمل أصر، العامل يقدر يلجأ لمكتب العمل أو المحكمة المختصة. |
0.0 |
السؤال بالبلدي: الفلوس دي بندفعها للموظف لو قرر يسيب الشغل بعد سن معين، ولا دي بس للناس اللي الشركة بتستغنى عنهم؟ |
أيوه، العامل يقدر ياخد المكافأة حتى لو هو اللي قرر يسيب الشغل بعد سن الستين. مش لازم يكون اتفصل، المهم إن خدمته انتهت بعد ما كمل المدة المطلوبة. |
1.0 |
لو قررت امشي من الشركة، هل فيه ورق أو تصديق لازم اخده من مكتب العمل عشان اضمن حقي بعد كده؟ (تركيز على الحقوق بعد الاستقالة) |
مدة فترة التجربة في أي عقد ماينفعش تزيد عن 3 شهور، وخلال المدة دي ينفع فسخ العقد من أي طرف بدون تعويض. |
0.0 |
BinaryCrossEntropyLoss with these parameters:{
"activation_fn": "torch.nn.modules.linear.Identity",
"pos_weight": null
}
per_device_train_batch_size: 16per_device_eval_batch_size: 16num_train_epochs: 5disable_tqdm: Trueoverwrite_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: Trueremove_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: 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: batch_samplermulti_dataset_batch_sampler: proportional| Epoch | Step | Training Loss |
|---|---|---|
| 0.2762 | 500 | 0.5834 |
| 0.5525 | 1000 | 0.2288 |
| 0.8287 | 1500 | 0.1489 |
| 1.1050 | 2000 | 0.1207 |
| 1.3812 | 2500 | 0.1102 |
| 1.6575 | 3000 | 0.0987 |
| 1.9337 | 3500 | 0.0813 |
| 2.2099 | 4000 | 0.0759 |
| 2.4862 | 4500 | 0.0675 |
| 2.7624 | 5000 | 0.0621 |
| 3.0387 | 5500 | 0.0535 |
| 3.3149 | 6000 | 0.0568 |
| 3.5912 | 6500 | 0.0494 |
| 3.8674 | 7000 | 0.0449 |
| 4.1436 | 7500 | 0.0471 |
| 4.4199 | 8000 | 0.0446 |
| 4.6961 | 8500 | 0.0508 |
| 4.9724 | 9000 | 0.0386 |
@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",
}