Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks
Paper • 1908.10084 • Published • 15
How to use YesayaAlvinK/indobert-alkitab-search with sentence-transformers:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("YesayaAlvinK/indobert-alkitab-search")
sentences = [
"Dan siapa yang membawa bangkainya, haruslah mencuci pakaiannya dan ia menjadi najis sampai matahari terbenam. Haram semuanya itu bagimu.",
"Ya Abner, tanganmu tidak diikat, kakimu tidak dirantai. Tidak, Abner, orang jahat membunuhmu.” Kemudian semua orang menangis lagi karena Abner.",
"Orang Israel mengatakan, “Hal itu tidak adil. Tuhanku tidak adil.” “Aku adil. Kamulah yang tidak adil.",
"Jika kamu mengambil bangkai binatang yang najis itu, kamu harus mencuci pakaianmu. Kamu menjadi najis sampai sore. Binatang itu najis bagimu.”"
]
embeddings = model.encode(sentences)
similarities = model.similarity(embeddings, embeddings)
print(similarities.shape)
# [4, 4]This is a sentence-transformers model finetuned from indobenchmark/indobert-base-p1. It maps sentences & paragraphs to a 768-dimensional dense vector space and can be used for retrieval.
SentenceTransformer(
(0): Transformer({'transformer_task': 'feature-extraction', 'modality_config': {'text': {'method': 'forward', 'method_output_name': 'last_hidden_state'}}, 'module_output_name': 'token_embeddings', 'architecture': 'BertModel'})
(1): Pooling({'embedding_dimension': 768, 'pooling_mode': 'mean', '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 = [
'Lagipula, kepada siapakah aku memperhambakan diri? Bukankah kepada anaknya? Sebagaimana aku memperhambakan diri kepada ayahmu, demikianlah aku memperhambakan diri kepadamu."',
'Lagi pula, kepada siapakah aku akan mengabdi? Bukankah kepada anaknya? Seperti aku mengabdi kepada ayahmu, demikianlah aku akan berlaku kepadamu.”',
'Pasanglah telingamu dan datanglah kepada-Ku dengarlah supaya jiwamu akan hidup. Aku akan mengadakan perjanjian yang kekal denganmu, menurut kebaikan-Ku yang teguh kepada Daud.',
]
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.8390, 0.0139],
# [0.8390, 1.0000, 0.0512],
# [0.0139, 0.0512, 1.0000]])
sentence_0 and sentence_1| sentence_0 | sentence_1 | |
|---|---|---|
| type | string | string |
| modality | text | text |
| details |
|
|
| sentence_0 | sentence_1 |
|---|---|
Dan dengan berani Yesaya mengatakan: "Aku telah berkenan ditemukan mereka yang tidak mencari Aku, Aku telah menampakkan diri kepada mereka yang tidak menanyakan Aku." |
Kemudian Yesaya dengan berani berkata atas nama Allah, “Orang yang tidak mencari Aku akan menemukan Aku. Aku menyatakan diri-Ku kepada orang yang tidak menanyakan Aku.” |
Pada pergantian tahun, pada waktu raja-raja biasanya maju berperang, maka Daud menyuruh Yoab maju beserta orang-orangnya dan seluruh orang Israel. Mereka memusnahkan bani Amon dan mengepung kota Raba, sedang Daud sendiri tinggal di Yerusalem. |
Pada pergantian tahun, saat raja-raja keluar, Daud mengirim Yoab beserta anak buahnya dan semua orang Israel untuk memusnahkan orang Amon dan mengepung kota Raba, sedangkan Daud tinggal di Yerusalem. |
Sesuatu apapun yang beragi tidak boleh kamu makan; kamu makanlah roti yang tidak beragi di segala tempat kediamanmu." |
Kamu tidak boleh makan apa pun yang beragi. Di seluruh tempat tinggalmu, kamu harus makan roti tidak beragi.’” |
MultipleNegativesRankingLoss with these parameters:{
"scale": 20.0,
"similarity_fct": "cos_sim",
"gather_across_devices": false,
"directions": [
"query_to_doc"
],
"partition_mode": "joint",
"hardness_mode": null,
"hardness_strength": 0.0
}
per_device_train_batch_size: 16num_train_epochs: 5per_device_eval_batch_size: 16multi_dataset_batch_sampler: round_robinper_device_train_batch_size: 16num_train_epochs: 5max_steps: -1learning_rate: 5e-05lr_scheduler_type: linearlr_scheduler_kwargs: Nonewarmup_steps: 0optim: adamw_torch_fusedoptim_args: Noneweight_decay: 0.0adam_beta1: 0.9adam_beta2: 0.999adam_epsilon: 1e-08optim_target_modules: Nonegradient_accumulation_steps: 1average_tokens_across_devices: Truemax_grad_norm: 1label_smoothing_factor: 0.0bf16: Falsefp16: Falsebf16_full_eval: Falsefp16_full_eval: Falsetf32: Nonegradient_checkpointing: Falsegradient_checkpointing_kwargs: Nonetorch_compile: Falsetorch_compile_backend: Nonetorch_compile_mode: Noneuse_liger_kernel: Falseliger_kernel_config: Noneuse_cache: Falseneftune_noise_alpha: Nonetorch_empty_cache_steps: Noneauto_find_batch_size: Falselog_on_each_node: Truelogging_nan_inf_filter: Trueinclude_num_input_tokens_seen: nolog_level: passivelog_level_replica: warningdisable_tqdm: Falseproject: huggingfacetrackio_space_id: Nonetrackio_bucket_id: Nonetrackio_static_space_id: Noneper_device_eval_batch_size: 16prediction_loss_only: Trueeval_on_start: Falseeval_do_concat_batches: Trueeval_use_gather_object: Falseeval_accumulation_steps: Noneinclude_for_metrics: []batch_eval_metrics: Falsesave_only_model: Falsesave_on_each_node: Falseenable_jit_checkpoint: Falsepush_to_hub: Falsehub_private_repo: Nonehub_model_id: Nonehub_strategy: every_savehub_always_push: Falsehub_revision: Noneload_best_model_at_end: Falseignore_data_skip: Falserestore_callback_states_from_checkpoint: Falsefull_determinism: Falseseed: 42data_seed: Noneuse_cpu: Falseaccelerator_config: {'split_batches': False, 'dispatch_batches': None, 'even_batches': True, 'use_seedable_sampler': True, 'non_blocking': False, 'gradient_accumulation_kwargs': None}parallelism_config: Nonedataloader_drop_last: Falsedataloader_num_workers: 0dataloader_pin_memory: Truedataloader_persistent_workers: Falsedataloader_prefetch_factor: Noneremove_unused_columns: Truelabel_names: Nonetrain_sampling_strategy: randomlength_column_name: lengthddp_find_unused_parameters: Noneddp_bucket_cap_mb: Noneddp_broadcast_buffers: Falseddp_static_graph: Noneddp_backend: Noneddp_timeout: 1800fsdp: Nonefsdp_config: Nonedeepspeed: Nonedebug: []skip_memory_metrics: Truedo_predict: Falseresume_from_checkpoint: Nonewarmup_ratio: Nonelocal_rank: -1prompts: Nonebatch_sampler: batch_samplermulti_dataset_batch_sampler: round_robinrouter_mapping: {}learning_rate_mapping: {}| Epoch | Step | Training Loss |
|---|---|---|
| 0.1286 | 500 | 0.0770 |
| 0.2572 | 1000 | 0.0190 |
| 0.3858 | 1500 | 0.0195 |
| 0.5144 | 2000 | 0.0209 |
| 0.6430 | 2500 | 0.0219 |
| 0.7716 | 3000 | 0.0207 |
| 0.9002 | 3500 | 0.0229 |
| 1.0288 | 4000 | 0.0174 |
| 1.1574 | 4500 | 0.0120 |
| 1.2860 | 5000 | 0.0097 |
| 1.4146 | 5500 | 0.0125 |
| 1.5432 | 6000 | 0.0115 |
| 1.6718 | 6500 | 0.0108 |
| 1.8004 | 7000 | 0.0107 |
| 1.9290 | 7500 | 0.0070 |
| 2.0576 | 8000 | 0.0046 |
| 2.1862 | 8500 | 0.0032 |
| 2.3148 | 9000 | 0.0049 |
| 2.4434 | 9500 | 0.0058 |
| 2.5720 | 10000 | 0.0040 |
| 2.7006 | 10500 | 0.0038 |
| 2.8292 | 11000 | 0.0032 |
| 2.9578 | 11500 | 0.0023 |
| 3.0864 | 12000 | 0.0029 |
| 3.2150 | 12500 | 0.0019 |
| 3.3436 | 13000 | 0.0023 |
| 3.4722 | 13500 | 0.0021 |
| 3.6008 | 14000 | 0.0017 |
| 3.7294 | 14500 | 0.0014 |
| 3.8580 | 15000 | 0.0013 |
| 3.9866 | 15500 | 0.0017 |
| 4.1152 | 16000 | 0.0016 |
| 4.2438 | 16500 | 0.0006 |
| 4.3724 | 17000 | 0.0011 |
| 4.5010 | 17500 | 0.0012 |
| 4.6296 | 18000 | 0.0010 |
| 4.7582 | 18500 | 0.0006 |
| 4.8868 | 19000 | 0.0021 |
@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{oord2019representationlearningcontrastivepredictive,
title={Representation Learning with Contrastive Predictive Coding},
author={Aaron van den Oord and Yazhe Li and Oriol Vinyals},
year={2019},
eprint={1807.03748},
archivePrefix={arXiv},
primaryClass={cs.LG},
url={https://arxiv.org/abs/1807.03748},
}
Base model
indobenchmark/indobert-base-p1