Matryoshka Representation Learning
Paper • 2205.13147 • Published • 26
How to use TawasulAI/Medical-mE5-LoRA with sentence-transformers:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("TawasulAI/Medical-mE5-LoRA")
sentences = [
"query: مرحبا، في كذا سبب ومنها: ممكن يكون ارتفاع الضغط العصبي اللي بيجي بسبب الضغوط والاجهاد البدني والنفسي والتعرض الدائم للتوتر والقلق، وممكن يكون كمان بسبب امراض الكلى، وأنت ما ذكرت أي اعراض حاسس فيها تكون دليل على اصابتك بارتفاع ضغط الدم الفعلي، ومنها الشعور بالدوخه، خفقان القلب، وتضيق الابهر، التعب بس تعمل أي مجهود، والم في الصدر، وبالآخر حدوث جلطة في القلب لا قدر الله، وما عندك المسببات الثانويه مثل السمنه المفرطه، الكحول ومرض السكري والتدخين، وما لازم تتسرع وتاخد ادوية ارتفاع ضغط الدم غير لما تتأكد تماماً.",
"passage: أمورك بشكل عام كتير ممتازة والحمد لله. هلا بس فيه عندك مرحلة ماقبل السكري من النوع الخفيف. كل اللي عليك تركز فيه هو المشي والحمية الصحية.",
"passage: بخصوص قراءة الضغط، ممكن يكون فيه كذا احتمال، منها ارتفاع الضغط العصبي يلي بيرتبط بالضغوط والاجهاد البدني والنفسي والتعرض الدائم للتوتر والقلق، وممكن كمان يرجع لـ امراض الكلى. بما إنك ما ذكرت أي أعراض ممكن تكون دليل على اصابتك بارتفاع ضغط الدم الفعلي، متل الشعور بالدوخه أو خفقان القلب أو تضيق الابهر أو التعب بس تعمل أي مجهود أو الم في الصدر، ولا قدر الله حدوث جلطة في القلب، وكمان ما عندك المسببات الثانويه متل السمنه المفرطه والكحول ومرض السكري والتدخين، فهالأمر مطمئن. لهيك، مهم ما تاخد ادوية ارتفاع ضغط الدم إلا بعد ما تتأكد تماماً.",
"passage: مرحبا، في كذا سبب ومنها: ممكن يكون انخفاض الضغط العصبي اللي بيجي بسبب الضغوط والاجهاد، وما ذكرت أي اعراض حاسس فيها تكون دليل على اصابتك بـ انخفاض الضغط الفعلي، ومنها الشعور بالدوخه، والتعب بس تعمل أي مجهود، والمسببات الثانويه مثل فقدان الدم، وما لازم تتسرع وتاخد ادوية الضغط غير لما تتأكد تماماً."
]
embeddings = model.encode(sentences)
similarities = model.similarity(embeddings, embeddings)
print(similarities.shape)
# [4, 4]This is a sentence-transformers model finetuned from TawasulAI/Faheem-mE5_Base_5_epochs. 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: PeftModelForFeatureExtraction
(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("TawasulAI/Medical-mE5-LoRA")
# Run inference
sentences = [
'query: السمنة يعني الوزن الزايد وغير هيك اكل وجبات كبيرة ودسمة',
'passage: الوزن الزايد اللي هو السمنة غالباً بييجي من اكل وجبات كبيرة ودسمة.',
'passage: النحافة يعني الوزن الناقص وغير هيك قلة اكل وجبات كبيرة ودسمة',
]
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]
medical_validation_evalTripletEvaluator| Metric | Value |
|---|---|
| cosine_accuracy | 0.9983 |
anchor, positive, and negative| anchor | positive | negative | |
|---|---|---|---|
| type | string | string | string |
| details |
|
|
|
| anchor | positive | negative |
|---|---|---|
query: بيوقف الطول عند سن البلوغ |
passage: بيكتمل الطول عند سن البلوغ |
passage: بيوقف ظهور حب الشباب عند سن البلوغ |
query: مراجعة الجراح مهمة وألف سلامة |
passage: لازم تشوف الجراح عشان تطمن على حالك. ألف سلامة. |
passage: مراجعة نتائج التحاليل مهمة وألف سلامة |
query: ما في داعي تصوم و لازم تاخد الدوا بوقته |
passage: بتقدر ما تصوم، بس خليك ملتزم بـالدوا بوقته. |
passage: لازم تصوم و لازم تاخد الدوا بوقته. |
MatryoshkaLoss with these parameters:{
"loss": "MultipleNegativesRankingLoss",
"matryoshka_dims": [
768,
256,
128,
64
],
"matryoshka_weights": [
1,
1,
1,
1
],
"n_dims_per_step": -1
}
eval_strategy: stepsper_device_train_batch_size: 32per_device_eval_batch_size: 32learning_rate: 0.0005weight_decay: 0.05num_train_epochs: 2lr_scheduler_type: cosinewarmup_ratio: 0.15fp16: Truedataloader_drop_last: Trueload_best_model_at_end: Truepush_to_hub: Truehub_model_id: TawasulAI/Medical-mE5-LoRAhub_strategy: endoverwrite_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: 0.0005weight_decay: 0.05adam_beta1: 0.9adam_beta2: 0.999adam_epsilon: 1e-08max_grad_norm: 1.0num_train_epochs: 2max_steps: -1lr_scheduler_type: cosinelr_scheduler_kwargs: {}warmup_ratio: 0.15warmup_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: 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: Trueresume_from_checkpoint: Nonehub_model_id: TawasulAI/Medical-mE5-LoRAhub_strategy: endhub_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: proportional| Epoch | Step | Training Loss | medical_validation_eval_cosine_accuracy |
|---|---|---|---|
| None | 0 | - | 0.9983 |
| 0.1466 | 100 | 0.4957 | - |
| 0.2933 | 200 | 0.4185 | 0.9983 |
| 0.4399 | 300 | 0.507 | - |
| 0.5865 | 400 | 0.4922 | 0.9983 |
| 0.7331 | 500 | 0.4883 | - |
| 0.8798 | 600 | 0.4528 | 0.9983 |
| 1.0264 | 700 | 0.4169 | - |
| 1.1730 | 800 | 0.4371 | 0.9967 |
| 1.3196 | 900 | 0.4162 | - |
| 1.4663 | 1000 | 0.3776 | 0.9983 |
| 1.6129 | 1100 | 0.4078 | - |
| 1.7595 | 1200 | 0.3706 | 0.9983 |
| 1.9062 | 1300 | 0.3934 | - |
| 2.0 | 1364 | - | 0.9983 |
@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{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
TawasulAI/Faheem-mE5_Base_5_epochs