Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks
Paper • 1908.10084 • Published • 14
How to use binh230/bge-m3-finetuned-2 with sentence-transformers:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("binh230/bge-m3-finetuned-2")
sentences = [
"Theo quy định pháp luật, khi một bên trong thỏa thuận tín dụng không thực hiện đúng nội dung đã thỏa thuận, hai bên có quyền thỏa thuận về việc xử lý như thế nào?",
"Điều 206. Tai nạn đâm va\nTai nạn đâm va là tai nạn xảy ra do đâm va giữa tàu biển với tàu biển, tàu biển với phương tiện thuỷ nội địa, tàu biển với thuỷ phi cơ hoặc giữa các phương tiện khác trên biển, trong vùng nước cảng biển.",
"Điều 25. Phạt vi phạm và bồi thường thiệt hại\n1. Tổ chức tín dụng và khách hàng được thỏa thuận về việc phạt vi phạm, bồi thường thiệt hại theo quy định của pháp luật đối với trường hợp tổ chức tín dụng hoặc khách hàng không thực hiện đúng nội dung trong thỏa thuận cho vay, trừ trường hợp quy định tại khoản 4 Điều 13 Thông tư này.\n2. Tổ chức tín dụng và khách hàng có thể thỏa thuận về việc bên vi phạm nghĩa vụ chỉ phải chịu phạt vi phạm mà không phải bồi thường thiệt hại hoặc vừa phải chịu phạt vi phạm và vừa phải bồi thường thiệt hại. Trường hợp tổ chức tín dụng và khách hàng có thỏa thuận về phạt vi phạm nhưng không thỏa thuận về việc vừa phải chịu phạt vi phạm và vừa phải bồi thường thiệt hại thì bên vi phạm nghĩa vụ chỉ phải chịu phạt vi phạm.",
"Điều 16. Hồ sơ vụ tai nạn lao động\n1. Người sử dụng lao động có trách nhiệm lập Hồ sơ vụ tai nạn lao động. Hồ sơ bao gồm bản chính hoặc bản sao các tài liệu sau đây:\na) Biên bản khám nghiệm hiện trường (nếu có);\nb) Sơ đồ hiện trường;\nc) Ảnh hiện trường, ảnh nạn nhân;\nd) Biên bản khám nghiệm tử thi hoặc khám nghiệm thương tích, trừ trường hợp mất tích theo tuyên bố của Tòa án;\nđ) Biên bản giám định kỹ thuật, giám định pháp y, kết luận giám định tư pháp (nếu có);\ne) Biên bản lấy lời khai của nạn nhân, người biết sự việc hoặc người có liên quan đến vụ tai nạn lao động;\ng) Biên bản Điều tra tai nạn lao động;\nh) Biên bản cuộc họp công bố biên bản Điều tra tai nạn lao động;\ni) Giấy chứng thương của cơ sở y tế được Điều trị (nếu có);\nk) Giấy ra viện của cơ sở y tế được Điều trị (nếu có).\n2. Trong một vụ tai nạn lao động, nếu có nhiều người bị tai nạn lao động thì mỗi người bị tai nạn lao động được lập một bộ hồ sơ riêng.\n3. Lưu trữ hồ sơ tai nạn lao động\na) Người sử dụng lao động lưu trữ hồ sơ tai nạn lao động theo quy định tại Khoản 8 Điều 18 Nghị định này.\nb) Cơ quan thành lập Đoàn Điều tra tai nạn lao động cấp tỉnh, cấp trung ương lưu trữ hồ sơ vụ tai nạn lao động theo quy định của pháp luật về lưu trữ."
]
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 1024-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': 8192, 'do_lower_case': False}) with Transformer model: XLMRobertaModel
(1): Pooling({'word_embedding_dimension': 1024, 'pooling_mode_cls_token': True, 'pooling_mode_mean_tokens': False, 'pooling_mode_max_tokens': False, 'pooling_mode_mean_sqrt_len_tokens': False, 'pooling_mode_weightedmean_tokens': False, 'pooling_mode_lasttoken': False, 'include_prompt': True})
(2): Normalize()
)
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("binh230/bge-m3-finetuned-2")
# Run inference
sentences = [
'Người thực hiện việc uỷ thác toàn bộ hoặc một phần việc vận chuyển hàng hoá bằng đường biển được gọi là ai?',
'Điều 72. Các bên liên quan đến hợp đồng vận chuyển hàng hoá bằng đường biển\n1. Người thuê vận chuyển là người tự mình hoặc uỷ quyền cho người khác giao kết hợp đồng vận chuyển hàng hoá bằng đường biển với người vận chuyển. Trong trường hợp hợp đồng vận chuyển theo chứng từ vận chuyển, người thuê vận chuyển được gọi là người gửi hàng.\n2. Người vận chuyển là người tự mình hoặc uỷ quyền cho người khác giao kết hợp đồng vận chuyển hàng hoá bằng đường biển với người thuê vận chuyển.\n3. Người vận chuyển thực tế là người được người vận chuyển uỷ thác thực hiện toàn bộ hoặc một phần việc vận chuyển hàng hoá bằng đường biển.\n4. Người giao hàng là người tự mình hoặc được người khác uỷ thác giao hàng cho người vận chuyển theo hợp đồng vận chuyển hàng hoá bằng đường biển.\n5. Người nhận hàng là người có quyền nhận hàng theo quy định tại Điều 89 và Điều 110 của Bộ luật này.',
'Điều 49. Địa vị pháp lý của thuyền trưởng\n1. Thuyền trưởng là người có quyền chỉ huy cao nhất ở trên tàu biển, chỉ huy tàu theo chế độ thủ trưởng. Mọi người có mặt trên tàu biển phải chấp hành mệnh lệnh của thuyền trưởng.\n2. Thuyền trưởng chịu sự chỉ đạo của chủ tàu hoặc người thuê tàu, người khai thác tàu.',
]
embeddings = model.encode(sentences)
print(embeddings.shape)
# [3, 1024]
# Get the similarity scores for the embeddings
similarities = model.similarity(embeddings, embeddings)
print(similarities.shape)
# [3, 3]
InformationRetrievalEvaluator| Metric | Value |
|---|---|
| cosine_accuracy@1 | 0.2468 |
| cosine_accuracy@3 | 0.7418 |
| cosine_accuracy@5 | 0.8261 |
| cosine_accuracy@10 | 0.9197 |
| cosine_precision@1 | 0.2468 |
| cosine_precision@3 | 0.2473 |
| cosine_precision@5 | 0.1652 |
| cosine_precision@10 | 0.092 |
| cosine_recall@1 | 0.2468 |
| cosine_recall@3 | 0.7418 |
| cosine_recall@5 | 0.8261 |
| cosine_recall@10 | 0.9197 |
| cosine_ndcg@10 | 0.5917 |
| cosine_mrr@10 | 0.4847 |
| cosine_map@100 | 0.4893 |
sentence_0 and sentence_1| sentence_0 | sentence_1 | |
|---|---|---|
| type | string | string |
| details |
|
|
| sentence_0 | sentence_1 |
|---|---|
Tổ chức phát hành có trách nhiệm gì khi quản lý tài khoản vốn phát hành chứng khoán bằng ngoại tệ? |
Điều 8. Trách nhiệm của tổ chức phát hành |
Đơn vị nào có quyền yêu cầu cung cấp chứng từ liên quan đến việc sử dụng tài khoản vốn phát hành chứng khoán bằng ngoại tệ và tổ chức phát hành phải tuân thủ như thế nào? |
Điều 8. Trách nhiệm của tổ chức phát hành |
Tổ chức tín dụng có trách nhiệm gì khi liên quan đến tài khoản vốn phát hành chứng khoán bằng ngoại tệ? |
Điều 9. Trách nhiệm của tổ chức tín dụng được phép |
MultipleNegativesRankingLoss with these parameters:{
"scale": 20.0,
"similarity_fct": "cos_sim"
}
eval_strategy: stepsper_device_train_batch_size: 10per_device_eval_batch_size: 10num_train_epochs: 1multi_dataset_batch_sampler: round_robinoverwrite_output_dir: Falsedo_predict: Falseeval_strategy: stepsprediction_loss_only: Trueper_device_train_batch_size: 10per_device_eval_batch_size: 10per_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: 1max_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 | cosine_ndcg@10 |
|---|---|---|---|
| 0.0735 | 500 | 0.0157 | - |
| 0.1470 | 1000 | 0.0231 | - |
| 0.2204 | 1500 | 0.0191 | - |
| 0.2939 | 2000 | 0.0179 | - |
| 0.3674 | 2500 | 0.0153 | - |
| 0.4409 | 3000 | 0.017 | - |
| 0.4702 | 3200 | - | 0.5705 |
| 0.5143 | 3500 | 0.0181 | - |
| 0.5878 | 4000 | 0.0131 | - |
| 0.6613 | 4500 | 0.0129 | - |
| 0.7348 | 5000 | 0.012 | - |
| 0.8082 | 5500 | 0.0117 | - |
| 0.8817 | 6000 | 0.0096 | - |
| 0.9405 | 6400 | - | 0.5906 |
| 0.9552 | 6500 | 0.0111 | - |
| 1.0 | 6805 | - | 0.5917 |
@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}
}