Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks
Paper • 1908.10084 • Published • 13
How to use CaesArdi/Indo-Law-v2 with sentence-transformers:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("CaesArdi/Indo-Law-v2")
sentences = [
"query: Berapa hukuman untuk kejahatan sistematis berupa penyiksaan terhadap penduduk sipil?",
"passage: Agar bisa dikualifikasi sebagai pengaduan fitnah, harus ada pengaduan atau pemberitahuan palsu yang diajukan secara tertulis kepada pejabat yang berwenang, dan perbuatan tersebut harus mengakibatkan serangan terhadap kehormatan atau nama baik orang yang dilaporkan. (Pasal 437 ayat (1) KUHP)",
"passage: Perbuatan mengakibatkan penderitaan fisik atau mental berat untuk memusnahkan suatu kelompok tertentu dipidana penjara paling singkat 5 tahun dan paling lama 20 tahun. (Pasal 598 KUHP)",
"passage: Perbuatan penyiksaan yang merupakan bagian dari serangan sistematis terhadap penduduk sipil dipidana penjara paling singkat 5 tahun dan paling lama 15 tahun. (Pasal 599 huruf b KUHP)"
]
embeddings = model.encode(sentences)
similarities = model.similarity(embeddings, embeddings)
print(similarities.shape)
# [4, 4]This is a sentence-transformers model finetuned from BAAI/bge-m3. 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, 'architecture': '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("CaesArdi/Indo-Law-v2")
# Run inference
sentences = [
'query: Apa saja syarat agar perbuatan permusuhan terhadap golongan agama bisa dipidana?',
'passage: Syaratnya adalah perbuatan permusuhan tersebut dilakukan di muka umum dan ditujukan kepada agama, kepercayaan, atau golongan tertentu atas dasar keyakinan mereka di Indonesia. (Pasal 300 KUHP)',
'passage: Syaratnya adalah perbuatan permusuhan tersebut dilakukan di muka umum dan ditujukan kepada kelompok tertentu atas dasar ras, kebangsaan, etnis, warna kulit, atau jenis kelamin. (Pasal 242 KUHP)',
]
embeddings = model.encode(sentences)
print(embeddings.shape)
# [3, 1024]
# Get the similarity scores for the embeddings
similarities = model.similarity(embeddings, embeddings)
print(similarities)
# tensor([[1.0000, 0.7404, 0.4978],
# [0.7404, 1.0000, 0.6977],
# [0.4978, 0.6977, 1.0000]])
val and testTripletEvaluator| Metric | val | test |
|---|---|---|
| cosine_accuracy | 0.9478 | 0.9143 |
anchor, positive, and negative| anchor | positive | negative | |
|---|---|---|---|
| type | string | string | string |
| details |
|
|
|
| anchor | positive | negative |
|---|---|---|
query: Ada orang yang merekam percakapan rahasia lalu mengunggahnya ke YouTube, kena pasal berapa? |
passage: Mengunggah hasil perekaman percakapan rahasia ke YouTube termasuk menyiarkan atau menyebarluaskan hasil perekaman transmisi informasi elektronik yang tidak publik, diancam penjara paling lama 10 tahun atau denda kategori M. (Pasal 288 ayat (2) KUHP) |
passage: Mengunggah konten pornografi ke YouTube termasuk menyiarkan pornografi melalui media, diancam penjara paling singkat 6 bulan dan paling lama 10 tahun atau denda kategori IV sampai VI. (Pasal 407 ayat (1) KUHP) |
query: Apakah aparat kepolisian yang melakukan penyadapan sesuai prosedur hukum bisa dipidana? |
passage: Tidak dipidana, karena ketentuan pidana penyadapan informasi elektronik tidak berlaku bagi orang yang melaksanakan ketentuan peraturan perundang-undangan atau melaksanakan perintah jabatan sesuai Pasal 31 dan Pasal 32. (Pasal 288 ayat (3) KUHP) |
passage: Tidak dipidana, karena orang yang melakukan kajian terhadap ajaran komunisme/marxisme-leninisme untuk kepentingan ilmu pengetahuan juga mendapat pengecualian dari pidana. (Pasal 188 ayat (6) KUHP) |
query: Apa bedanya menyadap percakapan elektronik dengan menyebarkan konten porno lewat internet? |
passage: Menyadap percakapan elektronik berfokus pada mengakses transmisi yang tidak bersifat publik secara ilegal, diancam penjara paling lama 10 tahun atau denda kategori M, sedangkan menyebarkan pornografi diancam penjara 6 bulan sampai 10 tahun. (Pasal 288 ayat (1) KUHP) |
passage: Menyebarkan konten porno lewat internet adalah memproduksi, menyebarluaskan, atau menyediakan pornografi melalui media elektronik, diancam penjara paling singkat 6 bulan dan paling lama 10 tahun atau denda kategori IV sampai VI. (Pasal 407 ayat (1) KUHP) |
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
}
anchor, positive, and negative| anchor | positive | negative | |
|---|---|---|---|
| type | string | string | string |
| details |
|
|
|
| anchor | positive | negative |
|---|---|---|
query: Apa hukumannya kalau ada yang mencatat seluruh percakapan di grup chat yang bersifat rahasia? |
passage: Mencatat transmisi informasi elektronik atau dokumen elektronik yang tidak bersifat publik secara melawan hukum dapat dipidana penjara paling lama 10 tahun atau denda paling banyak kategori M. (Pasal 288 ayat (1) KUHP) |
passage: Merekam atau memperbanyak konten pornografi yang kemudian disebarluaskan melalui grup chat dapat dipidana penjara paling singkat 6 bulan dan paling lama 10 tahun atau denda kategori IV sampai VI. (Pasal 407 ayat (1) KUHP) |
query: Apa saja syarat supaya penyadapan komunikasi elektronik bisa dipidana? |
passage: Syaratnya adalah perbuatan dilakukan secara melawan hukum, berupa mendengarkan, merekam, membelokkan, mengubah, menghambat, dan/atau mencatat transmisi informasi atau dokumen elektronik yang tidak bersifat publik. (Pasal 288 ayat (1) KUHP) |
passage: Syaratnya adalah melakukan perbuatan memproduksi, memperbanyak, menyebarluaskan, menyiarkan, mengimpor, mengekspor, menawarkan, menjual, menyewakan, atau menyediakan konten pornografi. (Pasal 407 ayat (1) KUHP) |
query: Kalau cuma menawarkan konten porno tanpa menjualnya, apakah tetap bisa dipidana? |
passage: Ya, menawarkan pornografi sudah cukup untuk dipidana dengan penjara paling singkat 6 bulan dan paling lama 10 tahun atau denda kategori IV sampai VI. (Pasal 407 ayat (1) KUHP) |
passage: Ya, menghambat atau mencatat transmisi informasi elektronik yang tidak publik tanpa izin sudah cukup untuk dipidana penjara paling lama 10 tahun atau denda kategori M. (Pasal 288 ayat (1) KUHP) |
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: 10learning_rate: 2e-05warmup_steps: 0.1fp16: Trueeval_strategy: stepsper_device_eval_batch_size: 16batch_sampler: no_duplicatesper_device_train_batch_size: 16num_train_epochs: 10max_steps: -1learning_rate: 2e-05lr_scheduler_type: linearlr_scheduler_kwargs: Nonewarmup_steps: 0.1optim: 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: 1.0label_smoothing_factor: 0.0bf16: Falsefp16: Truebf16_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: trackioeval_strategy: stepsper_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_backend: Noneddp_timeout: 1800fsdp: []fsdp_config: {'min_num_params': 0, 'xla': False, 'xla_fsdp_v2': False, 'xla_fsdp_grad_ckpt': False}deepspeed: Nonedebug: []skip_memory_metrics: Truedo_predict: Falseresume_from_checkpoint: Nonewarmup_ratio: Nonelocal_rank: -1prompts: Nonebatch_sampler: no_duplicatesmulti_dataset_batch_sampler: proportionalrouter_mapping: {}learning_rate_mapping: {}| Epoch | Step | Training Loss | Validation Loss | val_cosine_accuracy | test_cosine_accuracy |
|---|---|---|---|---|---|
| -1 | -1 | - | - | 0.9304 | - |
| 0.4167 | 10 | 1.0580 | 0.4615 | 0.9304 | - |
| 0.8333 | 20 | 0.6129 | 0.2930 | 0.9478 | - |
| 1.25 | 30 | 0.4159 | 0.2436 | 0.9478 | - |
| 1.6667 | 40 | 0.2591 | 0.2074 | 0.9652 | - |
| 2.0833 | 50 | 0.2382 | 0.1992 | 0.9478 | - |
| 2.5 | 60 | 0.1013 | 0.2022 | 0.9565 | - |
| 2.9167 | 70 | 0.1238 | 0.2143 | 0.9478 | - |
| 3.3333 | 80 | 0.1051 | 0.2236 | 0.9565 | - |
| 3.75 | 90 | 0.0828 | 0.2214 | 0.9478 | - |
| 4.1667 | 100 | 0.0654 | 0.2213 | 0.9565 | - |
| 4.5833 | 110 | 0.0350 | 0.2294 | 0.9565 | - |
| 5.0 | 120 | 0.0548 | 0.2424 | 0.9565 | - |
| 5.4167 | 130 | 0.0754 | 0.2319 | 0.9565 | - |
| 5.8333 | 140 | 0.0437 | 0.2283 | 0.9478 | - |
| 6.25 | 150 | 0.0578 | 0.2381 | 0.9478 | - |
| 6.6667 | 160 | 0.0217 | 0.2441 | 0.9478 | - |
| 7.0833 | 170 | 0.0516 | 0.2446 | 0.9478 | - |
| 7.5 | 180 | 0.0230 | 0.2380 | 0.9478 | - |
| 7.9167 | 190 | 0.0151 | 0.2441 | 0.9478 | - |
| 8.3333 | 200 | 0.0265 | 0.2485 | 0.9478 | - |
| 8.75 | 210 | 0.0212 | 0.2509 | 0.9478 | - |
| 9.1667 | 220 | 0.0410 | 0.2492 | 0.9478 | - |
| 9.5833 | 230 | 0.0136 | 0.2476 | 0.9478 | - |
| 10.0 | 240 | 0.0104 | 0.2466 | 0.9478 | - |
| -1 | -1 | - | - | 0.9478 | 0.9143 |
@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
BAAI/bge-m3