Matryoshka Representation Learning
Paper • 2205.13147 • Published • 27
How to use noace/mpnet-final with sentence-transformers:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("noace/mpnet-final")
sentences = [
"Lãi suất vay tiêu dùng từ thẻ kỳ hạn 2-5 tháng là 12%/năm.",
"Mức lãi suất áp dụng cho khoản vay tiêu dùng thẻ kỳ hạn ngắn (2-5 tháng) là 12%.",
"Hạn dùng ưu đãi của khách hàng VIP được tính theo năm dương lịch hưởng quyền lợi.",
"dịch vụ áp dụng cho nhân viên sacombank được ủy quyền sử dụng thẻ"
]
embeddings = model.encode(sentences)
similarities = model.similarity(embeddings, embeddings)
print(similarities.shape)
# [4, 4]This is a sentence-transformers model finetuned from sentence-transformers/paraphrase-multilingual-mpnet-base-v2. 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': 'XLMRobertaModel'})
(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 = [
'Quy đổi 1 lượt golf thành 1 đêm nghỉ dưỡng tiêu chuẩn cho 2 người.',
'Mỗi lượt golf trong tài khoản tương đương với 01 đêm phòng tiêu chuẩn dành cho 02 khách.',
'Giao dịch ở siêu thị bằng thẻ được hoàn lại giá trị',
]
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.7473, -0.0708],
# [ 0.7473, 1.0000, -0.0487],
# [-0.0708, -0.0487, 1.0000]])
banking-valEmbeddingSimilarityEvaluator| Metric | Value |
|---|---|
| pearson_cosine | 0.4878 |
| spearman_cosine | 0.4829 |
sentence1 and sentence2| sentence1 | sentence2 | |
|---|---|---|
| type | string | string |
| details |
|
|
| sentence1 | sentence2 |
|---|---|
Hạn mức chuyển tiền qua internet banking |
Giới hạn giao dịch trên mobile banking mỗi ngày |
Lãi suất tiền gửi Tương lai kỳ hạn 1 năm là 3,70%/năm. |
Sản phẩm Tiền gửi Tương lai 12 tháng có lãi suất 3,70%. |
Chi tiêu khác ngoài siêu thị và di chuyển được hoàn 0,5%. |
Các giao dịch chi tiêu thông thường khác áp dụng tỷ lệ hoàn tiền là 0,5%. |
MatryoshkaLoss with these parameters:{
"loss": "MultipleNegativesRankingLoss",
"matryoshka_dims": [
768
],
"matryoshka_weights": [
1
],
"n_dims_per_step": -1
}
eval_strategy: epochper_device_train_batch_size: 32learning_rate: 2e-05num_train_epochs: 8warmup_ratio: 0.1fp16: Trueload_best_model_at_end: Truebatch_sampler: no_duplicatesoverwrite_output_dir: Falsedo_predict: Falseeval_strategy: epochprediction_loss_only: Trueper_device_train_batch_size: 32per_device_eval_batch_size: 8per_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: 8max_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: 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: 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}parallelism_config: Nonedeepspeed: Nonelabel_smoothing_factor: 0.0optim: adamw_torch_fusedoptim_args: Noneadafactor: Falsegroup_by_length: Falselength_column_name: lengthproject: huggingfacetrackio_space_id: trackioddp_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: noneftune_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: Trueprompts: Nonebatch_sampler: no_duplicatesmulti_dataset_batch_sampler: proportionalrouter_mapping: {}learning_rate_mapping: {}| Epoch | Step | Training Loss | banking-val_spearman_cosine |
|---|---|---|---|
| 0.2857 | 10 | 0.4973 | - |
| 0.5714 | 20 | 0.3515 | - |
| 0.8571 | 30 | 0.2183 | - |
| 1.0 | 35 | - | 0.4564 |
| 1.1429 | 40 | 0.1684 | - |
| 1.4286 | 50 | 0.0942 | - |
| 1.7143 | 60 | 0.117 | - |
| 2.0 | 70 | 0.0823 | 0.4266 |
| 2.2857 | 80 | 0.0539 | - |
| 2.5714 | 90 | 0.0506 | - |
| 2.8571 | 100 | 0.1039 | - |
| 3.0 | 105 | - | 0.4439 |
| 3.1429 | 110 | 0.0516 | - |
| 3.4286 | 120 | 0.0325 | - |
| 3.7143 | 130 | 0.0457 | - |
| 4.0 | 140 | 0.0933 | 0.4489 |
| 4.2857 | 150 | 0.0759 | - |
| 4.5714 | 160 | 0.0441 | - |
| 4.8571 | 170 | 0.0379 | - |
| 5.0 | 175 | - | 0.4735 |
| 5.1429 | 180 | 0.0337 | - |
| 5.4286 | 190 | 0.0368 | - |
| 5.7143 | 200 | 0.0536 | - |
| 6.0 | 210 | 0.0487 | 0.4899 |
| 6.2857 | 220 | 0.0355 | - |
| 6.5714 | 230 | 0.0469 | - |
| 6.8571 | 240 | 0.0319 | - |
| 7.0 | 245 | - | 0.4845 |
| 7.1429 | 250 | 0.0306 | - |
| 7.4286 | 260 | 0.0272 | - |
| 7.7143 | 270 | 0.0398 | - |
| 8.0 | 280 | 0.0313 | 0.4829 |
@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}
}
from sentence_transformers import SentenceTransformer model = SentenceTransformer("noace/mpnet-final") sentences = [ "Lãi suất vay tiêu dùng từ thẻ kỳ hạn 2-5 tháng là 12%/năm.", "Mức lãi suất áp dụng cho khoản vay tiêu dùng thẻ kỳ hạn ngắn (2-5 tháng) là 12%.", "Hạn dùng ưu đãi của khách hàng VIP được tính theo năm dương lịch hưởng quyền lợi.", "dịch vụ áp dụng cho nhân viên sacombank được ủy quyền sử dụng thẻ" ] embeddings = model.encode(sentences) similarities = model.similarity(embeddings, embeddings) print(similarities.shape) # [4, 4]