2D Matryoshka Sentence Embeddings
Paper • 2402.14776 • Published • 8
How to use akhooli/sbert_ar_nli_500k_p100 with sentence-transformers:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("akhooli/sbert_ar_nli_500k_p100")
sentences = [
"ماذا كانت اسماء اطفال تشارلز ديكنز",
"المفاهيم ذات الصلة: النظام الأساسي ، وجمعيات المحامين ، والجمعيات النافعة ، ودعوة الجمعيات ، والجمعيات المساهمة ، وجمعيات المنفعة المتبادلة ، والجمعيات المهنية ، والجمعيات غير المسجلة ، والجمعيات الطوعية ، والتي سمعتها هذه الجمعية بقراءتها ، مع شعور بالرضا التام ، وموافقة غير مشروطة ، الورقة التي أرسلها صمويل بيكويك ، إسق. أوراق ما بعد الوفاة لنادي بيكويك بقلم ديكنز ، عرض تشارلز في السياق. ورأى أن هذه الرابطة كانت مجرد مذيع لإنقاذه من ازدراء الذات.",
"لا تتعرق. تحدث أنابيب التعرق عندما يكون الماء داخل الأنبوب أبرد من الهواء الرطب المحيط به. في حين أن هذا قد يبدو وكأنه مشكلة خاصة بفصل الصيف ، إلا أنه يحدث في كثير من الأحيان عندما يتم تسخين الهواء بواسطة الفرن. عندما يلتقي الهواء الرطب الدافئ بالأنابيب الباردة ، تتشكل الرطوبة في القطرات وتسقط تلك الحبة على الجزء الخارجي من الأنبوب.",
"كان تشارلز ديكنز متزوجًا من كاثرين طومسون هوغارث. أسماء أطفالهم كانت ماري وكيت ووالتر وفرانسيس وألفريد وسيدني وهنري ودرة وإدوارد وتشارلز ديكنز ¢â JR."
]
embeddings = model.encode(sentences)
similarities = model.similarity(embeddings, embeddings)
print(similarities.shape)
# [4, 4]This is a sentence-transformers model finetuned from aubmindlab/bert-base-arabertv02. 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}) with Transformer model: 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("sentence_transformers_model_id")
# Run inference
sentences = [
'في أي مدينة تقع الحديقة الوطنية الجليدية',
'الحديقة الجليدية الوطنية هي حديقة وطنية تقع في ولاية مونتانا الأمريكية ، على الحدود الكندية للولايات المتحدة مع المقاطعات الكندية في ألبرتا وكولومبيا البريطانية. حرائق الغابات الكبيرة غير شائعة في المنتزه. ومع ذلك ، في عام 2003 تم حرق أكثر من 13٪ من المتنزه. حديقة جلاسير الوطنية تقع على حدود متنزه ووترتون ليكس الوطني في كندا - يُعرف المنتزهان باسم منتزه واترتون-جلاسير الدولي للسلام وتم تصنيفهما كأول منتزه سلام دولي في العالم في عام 1932.',
'تصوير: ايرين كونويل - رويترز. 1 بواسطة Alex Dobuzinskis. (2 رويترز) - قال مسؤولون إن حريقًا هائلًا في منتزه مونتانا الجليدي الوطني اندلع لليوم الرابع من خلال الأخشاب الثقيلة يوم الجمعة خلال ذروة موسم الزائرين ، بينما اجتاح حريق آخر في شمال كاليفورنيا الجبال فوق منطقة نبيذ وادي نابا.',
]
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]
eval_strategy: stepsper_device_train_batch_size: 32per_device_eval_batch_size: 32learning_rate: 2e-05num_train_epochs: 1warmup_ratio: 0.1fp16: Truebatch_sampler: no_duplicatesoverwrite_output_dir: Falsedo_predict: Falseeval_strategy: stepsprediction_loss_only: Trueper_device_train_batch_size: 32per_device_eval_batch_size: 32per_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: 1max_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: Falsefp16: Truefp16_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: Falsehub_always_push: Falsegradient_checkpointing: Falsegradient_checkpointing_kwargs: Noneinclude_inputs_for_metrics: Falseeval_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: Falsebatch_sampler: no_duplicatesmulti_dataset_batch_sampler: proportional| Epoch | Step | Training Loss | loss |
|---|---|---|---|
| 0.016 | 250 | 4.087 | - |
| 0.032 | 500 | 1.9943 | - |
| 0.048 | 750 | 1.4472 | - |
| 0.064 | 1000 | 1.2324 | - |
| 0.08 | 1250 | 1.0402 | - |
| 0.096 | 1500 | 1.0357 | - |
| 0.112 | 1750 | 0.8857 | - |
| 0.128 | 2000 | 0.8617 | - |
| 0.144 | 2250 | 0.8101 | - |
| 0.16 | 2500 | 0.8452 | - |
| 0.176 | 2750 | 0.7949 | - |
| 0.192 | 3000 | 0.7706 | - |
| 0.208 | 3250 | 0.7518 | - |
| 0.224 | 3500 | 0.7217 | - |
| 0.24 | 3750 | 0.7225 | - |
| 0.256 | 4000 | 0.6761 | - |
| 0.272 | 4250 | 0.6492 | - |
| 0.288 | 4500 | 0.6379 | - |
| 0.304 | 4750 | 0.6225 | - |
| 0.32 | 5000 | 0.5899 | 0.5937 |
| 0.336 | 5250 | 0.6406 | - |
| 0.352 | 5500 | 0.6109 | - |
| 0.368 | 5750 | 0.5964 | - |
| 0.384 | 6000 | 0.5325 | - |
| 0.4 | 6250 | 0.5633 | - |
| 0.416 | 6500 | 0.5652 | - |
| 0.432 | 6750 | 0.6109 | - |
| 0.448 | 7000 | 0.527 | - |
| 0.464 | 7250 | 0.5215 | - |
| 0.48 | 7500 | 0.5508 | - |
| 0.496 | 7750 | 0.5832 | - |
| 0.512 | 8000 | 0.5817 | - |
| 0.528 | 8250 | 0.5617 | - |
| 0.544 | 8500 | 0.4963 | - |
| 0.56 | 8750 | 0.5168 | - |
| 0.576 | 9000 | 0.5251 | - |
| 0.592 | 9250 | 0.5439 | - |
| 0.608 | 9500 | 0.4962 | - |
| 0.624 | 9750 | 0.5638 | - |
| 0.64 | 10000 | 0.4764 | 0.4306 |
| 0.656 | 10250 | 0.531 | - |
| 0.672 | 10500 | 0.4901 | - |
| 0.688 | 10750 | 0.5076 | - |
| 0.704 | 11000 | 0.4384 | - |
| 0.72 | 11250 | 0.4971 | - |
| 0.736 | 11500 | 0.4457 | - |
| 0.752 | 11750 | 0.4603 | - |
| 0.768 | 12000 | 0.4854 | - |
| 0.784 | 12250 | 0.4702 | - |
| 0.8 | 12500 | 0.5154 | - |
| 0.816 | 12750 | 0.4619 | - |
| 0.832 | 13000 | 0.4829 | - |
| 0.848 | 13250 | 0.5101 | - |
| 0.864 | 13500 | 0.4641 | - |
| 0.88 | 13750 | 0.4797 | - |
| 0.896 | 14000 | 0.4632 | - |
| 0.912 | 14250 | 0.4578 | - |
| 0.928 | 14500 | 0.4552 | - |
| 0.944 | 14750 | 0.4636 | - |
| 0.96 | 15000 | 0.4764 | 0.4142 |
| 0.976 | 15250 | 0.5066 | - |
| 0.992 | 15500 | 0.4567 | - |
@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{li20242d,
title={2D Matryoshka Sentence Embeddings},
author={Xianming Li and Zongxi Li and Jing Li and Haoran Xie and Qing Li},
year={2024},
eprint={2402.14776},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
@misc{kusupati2024matryoshka,
title={Matryoshka Representation Learning},
author={Aditya Kusupati and Gantavya Bhatt and Aniket Rege and Matthew Wallingford and Aditya Sinha and Vivek Ramanujan and William Howard-Snyder and Kaifeng Chen and Sham Kakade and Prateek Jain and Ali Farhadi},
year={2024},
eprint={2205.13147},
archivePrefix={arXiv},
primaryClass={cs.LG}
}
@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}
}
Base model
aubmindlab/bert-base-arabertv02