Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks
Paper • 1908.10084 • Published • 13
How to use TextModel/E5_Law-v4-Indo with sentence-transformers:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("TextModel/E5_Law-v4-Indo")
sentences = [
"query: Seorang pria bernama Eko Santoso di Kota Semarang pada tahun 2024 secara terang-terangan di hadapan kerumunan massa di alun-alun kota menyampaikan orasi yang berisi hasutan untuk melakukan diskriminasi terhadap penganut agama tertentu yang ada di Indonesia, dengan menyatakan bahwa agama tersebut adalah ancaman dan harus dilawan. Pernyataan tersebut disampaikan secara langsung di muka umum dan direkam oleh banyak orang. Pasal apa yang tepat dikenakan kepada Eko Santoso?",
"passage: Ya, karena mantan pejabat yang tanpa izin dari pejabat berwenang menahan atau tetap menyimpan surat dinas yang ada padanya setelah tidak lagi menjabat dapat dipidana penjara paling lama 6 bulan atau denda paling banyak kategori II. (Pasal 541 KUHP)",
"passage: Pasal 300: Setiap Orang Di Muka Umum yang: a. melakukan perbuatan yang bersifat permusuhan; b. menyatakan kebencian atau permusuhan; atau c. menghasut untuk melakukan Kekerasan, atau diskriminasi, terhadap agama, kepercayaan orang lain, golongan, atau kelompok atas dasar agama atau kepercayaan di Indonesia, dipidana dengan pidana penjara paling lama 3 (tiga) tahun atau pidana denda paling banyak kategori IV.. Pasal ini berlaku karena Eko Santoso secara Di Muka Umum menyatakan kebencian dan menghasut untuk melakukan diskriminasi terhadap penganut agama tertentu di Indonesia berdasarkan agama mereka, yang secara langsung memenuhi unsur tindak pidana dalam Pasal 300 KUHP 2023..",
"passage: Pasal 301: (1) Setiap Orang yang menyiarkan, mempertunjukkan, menempelkan tulisan atau gambar, atau memperdengarkan suatu rekaman, termasuk menyebarluaskan melalui sarana teknologi informasi yang berisi Tindak Pidana sebagaimana dimaksud dalam Pasal 300, dengan maksud agar isi tulisan, gambar, atau rekaman tersebut diketahui atau lebih diketahui oleh umum, dipidana dengan pidana penjara paling lama 5 (lima) tahun atau pidana denda paling banyak kategori V. (2) Jika Setiap Orang sebagaimana dimaksud pada ayat (1) melakukan perbuatan tersebut dalam menjalankan profesinya dan pada waktu itu belum lewat 2 (dua) tahun sejak adanya putusan pemidanaan yang telah memperoleh kekuatan hukum tetap karena melakukan Tindak Pidana yang sama, dapat dijatuhi pidana tambahan berupa pencabutan hak sebagaimana dimaksud dalam Pasal 86 huruf f.. Pasal ini mengatur penyebarluasan melalui media konten yang memuat tindak pidana Pasal 300, merupakan pasal turunan dari Pasal 300 bukan pasal induk kebencian berbasis agama itu sendiri.."
]
embeddings = model.encode(sentences)
similarities = model.similarity(embeddings, embeddings)
print(similarities.shape)
# [4, 4]This is a sentence-transformers model finetuned from intfloat/multilingual-e5-base. 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})
(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("TextModel/E5_Law-v4-Indo")
# Run inference
sentences = [
'query: Di Bandung, seorang dokter bedah bernama Dr. Lestari melakukan operasi pada pasien bernama Tn. Agus. Karena kurang teliti dalam memeriksa alat operasi, Dr. Lestari menyebabkan komplikasi serius yang mengakibatkan Tn. Agus mengalami cacat permanen dan tidak dapat bekerja lagi sebagai tukang bangunan. Pasal apa yang dapat dikenakan kepada Dr. Lestari?',
'passage: Pasal 475: (1) Jika Tindak Pidana sebagaimana dimaksud dalam Pasal 474 dilakukan dalam menjalankan jabatan, mata pencaharian, atau profesi, pidananya dapat ditambah 1/3 (satu per tiga). (2) Setiap Orang sebagaimana dimaksud pada ayat (1) dapat juga dijatuhi pidana tambahan berupa pengumuman putusan hakim sebagaimana dimaksud dalam Pasal 66 ayat (1) huruf c dan pencabutan hak sebagaimana dimaksud dalam Pasal 86 huruf f. Pasal ini berlaku karena kasus tersebut melibatkan kelalaian dalam menjalankan profesi medis yang mengakibatkan Luka Berat, sehingga merupakan aggravating circumstance dari Pasal 474 yang diatur dalam Pasal 475.',
'passage: Pasal 459: Setiap Orang yang dengan rencana terlebih dahulu merampas nyawa orang lain, dipidana karena pembunuhan berencana, dengan pidana mati atau pidana penjara seumur hidup atau pidana penjara paling lama 20 (dua puluh) tahun. Pasal ini mengatur pembunuhan dengan unsur perencanaan atau premeditasi.',
]
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.4145, -0.0171],
# [ 0.4145, 1.0000, 0.0258],
# [-0.0171, 0.0258, 1.0000]])
val and testTripletEvaluator| Metric | val | test |
|---|---|---|
| cosine_accuracy | 0.9413 | 0.9341 |
anchor, positive, and negative| anchor | positive | negative | |
|---|---|---|---|
| type | string | string | string |
| details |
|
|
|
| anchor | positive | negative |
|---|---|---|
query: Kalo mau lapor ke polisi soal pencemaran nama baik, apa emang harus nunggu korban datang lapor sendiri atau polisi bisa langsung tangkap pelakunya? |
passage: Pasal 24: Dalam hal tertentu, pelaku Tindak Pidana hanya dapat dituntut atas dasar pengaduan. Tindak Pidana aduan harus ditentukan secara tegas dalam Undang-Undang. |
passage: Pasal 28: Pengaduan dilakukan dengan cara menyampaikan pemberitahuan dan permohonan untuk dituntut. Pengaduan sebagaimana dimaksud diajukan secara lisan atau tertulis kepada Pejabat yang berwenang. |
query: Anak saya yang masih 14 tahun kena aniaya sama tetangga, saya sebagai bapaknya yang lapor polisi. Tapi ternyata Anak saya yang masih 14 tahun kena aniaya, saya sebagai bapaknya yang mau lapor polisi. Apakah saya berhak melapor mewakili anak saya?? |
passage: Pasal 25: Dalam hal Korban Tindak Pidana aduan belum berumur 16 tahun, yang berhak mengadu merupakan Orang Tua atau walinya. Dalam hal Orang Tua atau wali tidak ada atau Orang Tua/wali itu sendiri yang harus diadukan, pengaduan dilakukan oleh keluarga sedarah dalam garis lurus. |
passage: Pasal 26: Dalam hal Korban Tindak Pidana aduan berada di bawah pengampuan, yang berhak mengadu merupakan pengampunya, kecuali bagi Korban yang berada dalam pengampuan karena boros. Jika pengampu tidak ada atau pengampu itu sendiri yang harus diadukan, pengaduan dilakukan oleh suami/istri atau keluarga sedarah. |
query: Saya kemarin udah lapor polisi soal kejadian yang menimpa saya, tapi sekarang saya udah maafin pelakunya dan mau cabut laporan. Apa yang bakal terjadi sama perkara ini? |
passage: Pasal 30: Pengaduan dapat ditarik kembali oleh pengadu dalam waktu 3 Bulan terhitung sejak tanggal pengaduan diajukan. Pengaduan yang ditarik kembali tidak dapat diajukan lagi. |
passage: Pasal 29: Pengaduan harus diajukan dalam tenggang waktu 6 Bulan terhitung sejak tanggal orang yang berhak mengadu mengetahui adanya Tindak Pidana jika bertempat tinggal di wilayah NKRI. Jika yang berhak mengadu lebih dari 1 orang, tenggang waktu dihitung sejak tanggal masing-masing pengadu mengetahui adanya Tindak Pidana. |
MultipleNegativesRankingLoss with these parameters:{
"scale": 20.0,
"similarity_fct": "cos_sim",
"gather_across_devices": false
}
anchor, positive, and negative| anchor | positive | negative | |
|---|---|---|---|
| type | string | string | string |
| details |
|
|
|
| anchor | positive | negative |
|---|---|---|
query: Berapa hukuman untuk menyatakan kebencian terhadap suku tertentu di depan orang banyak? |
passage: Orang yang menyatakan kebencian terhadap suatu suku atau golongan penduduk di depan umum dapat dihukum penjara paling lama 3 tahun atau denda paling banyak kategori IV. (Pasal 242 KUHP) |
passage: Orang yang menyatakan kebencian terhadap suatu golongan agama atau kepercayaan tertentu di depan umum dapat dihukum penjara paling lama 3 tahun atau denda paling banyak kategori IV. (Pasal 300 KUHP) |
query: Arief Budiman, warga Kota Semarang, pada bulan Maret 2024 secara lisan menyampaikan tuduhan kepada sejumlah tetangganya bahwa DR. Santi Rahayu, seorang dokter terhormat di lingkungan mereka, terlibat dalam praktik penipuan pasien. Pernyataan tersebut diucapkan di depan warga dalam rapat RT dengan tujuan agar tuduhan tersebut diketahui umum. Pernyataan Arief tidak disertai bukti apapun dan terbukti tidak benar. DR. Santi merasa nama baiknya sangat dirugikan. Pasal apa yang dapat dikenakan kepada Arief Budiman? |
passage: Pasal 433: (1) Setiap Orang yang dengan lisan menyerang kehormatan atau nama baik orang lain dengan cara menuduhkan suatu hal, dengan maksud supaya hal tersebut diketahui umum, dipidana karena pencemaran, dengan pidana penjara paling lama 9 (sembilan) Bulan atau pidana denda paling banyak kategori II. (2) Jika perbuatan sebagaimana dimaksud pada ayat (1) dilakukan dengan tulisan atau gambar yang disiarkan, dipertunjukkan, atau ditempelkan di tempat umum, dipidana karena pencemaran tertulis, dengan pidana penjara paling lama 1 (satu) tahun 6 (enam) Bulan atau pidana denda paling banyak kategori III.. Pasal ini berlaku karena Arief Budiman secara lisan menyerang kehormatan dan nama baik DR. Santi Rahayu dengan cara menuduhkan suatu hal (keterlibatan dalam penipuan pasien) dengan maksud agar hal tersebut diketahui umum, yang tepat masuk dalam kualifikasi pencemaran sebagaimana diatur dalam Pasal 433 ayat (1) KUHP 2023.. |
passage: Pasal 434: (1) Jika Setiap Orang sebagaimana dimaksud dalam Pasal 433 diberi kesempatan membuktikan kebenaran hal yang dituduhkan tetapi tidak dapat membuktikannya, dan tuduhan tersebut bertentangan dengan yang diketahuinya, dipidana karena fitnah, dengan pidana penjara paling lama 3 (tiga) tahun atau pidana denda paling banyak kategori IV. (2) Pembuktian kebenaran tuduhan sebagaimana dimaksud pada ayat (1), hanya dapat dilakukan dalam hal: a. hakim memandang perlu untuk memeriksa kebenaran tuduhan tersebut guna mempertimbangkan keterangan terdakwa bahwa terdakwa melakukan perbuatan tersebut untuk kepentingan umum atau karena terpaksa untuk membela diri; atau b. Pejabat dituduh melakukan suatu hal dalam menjalankan tugas jabatannya.. Pasal ini mengatur fitnah, yaitu pencemaran di mana pelaku diberikan kesempatan membuktikan kebenaran tuduhan tetapi tidak dapat membuktikannya dan tuduhan bertentangan dengan yang diketahuinya, merupakan kualifikasi lebih berat dari pencemaran bi... |
query: Kalau orang yang saya tuduh dibebaskan pengadilan, apakah itu otomatis jadi bukti kalau tuduhan saya salah? |
passage: Ya, jika putusan pengadilan yang telah berkekuatan hukum tetap menyatakan orang yang dihina dibebaskan dari hal yang dituduhkan, putusan tersebut dianggap sebagai bukti sempurna bahwa hal yang dituduhkan tidak benar. (Pasal 435 ayat (2) KUHP) |
passage: Jika tuduhan tersebut hanya dapat dituntut atas pengaduan dan pengaduan tidak diajukan, maka pembuktian kebenaran tuduhan tidak dapat dilakukan meskipun ada bukti lain. (Pasal 434 ayat (3) KUHP) |
MultipleNegativesRankingLoss with these parameters:{
"scale": 20.0,
"similarity_fct": "cos_sim",
"gather_across_devices": false
}
eval_strategy: epochper_device_train_batch_size: 4per_device_eval_batch_size: 4gradient_accumulation_steps: 4learning_rate: 1e-05weight_decay: 0.01num_train_epochs: 5warmup_ratio: 0.3warmup_steps: 0.3fp16: Trueload_best_model_at_end: Truedataloader_pin_memory: Falsegradient_checkpointing: Truebatch_sampler: no_duplicatesdo_predict: Falseeval_strategy: epochprediction_loss_only: Trueper_device_train_batch_size: 4per_device_eval_batch_size: 4gradient_accumulation_steps: 4eval_accumulation_steps: Nonetorch_empty_cache_steps: Nonelearning_rate: 1e-05weight_decay: 0.01adam_beta1: 0.9adam_beta2: 0.999adam_epsilon: 1e-08max_grad_norm: 1.0num_train_epochs: 5max_steps: -1lr_scheduler_type: linearlr_scheduler_kwargs: Nonewarmup_ratio: 0.3warmup_steps: 0.3log_level: passivelog_level_replica: warninglog_on_each_node: Truelogging_nan_inf_filter: Trueenable_jit_checkpoint: Falsesave_on_each_node: Falsesave_only_model: Falserestore_callback_states_from_checkpoint: Falseuse_cpu: Falseseed: 42data_seed: Nonebf16: Falsefp16: Truebf16_full_eval: Falsefp16_full_eval: Falsetf32: Nonelocal_rank: -1ddp_backend: Nonedebug: []dataloader_drop_last: Falsedataloader_num_workers: 0dataloader_prefetch_factor: Nonedisable_tqdm: Falseremove_unused_columns: Truelabel_names: Noneload_best_model_at_end: Trueignore_data_skip: Falsefsdp: []fsdp_config: {'min_num_params': 0, 'xla': False, 'xla_fsdp_v2': False, 'xla_fsdp_grad_ckpt': False}accelerator_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: Nonegroup_by_length: Falselength_column_name: lengthproject: huggingfacetrackio_space_id: trackioddp_find_unused_parameters: Noneddp_bucket_cap_mb: Noneddp_broadcast_buffers: Falsedataloader_pin_memory: Falsedataloader_persistent_workers: Falseskip_memory_metrics: Truepush_to_hub: Falseresume_from_checkpoint: Nonehub_model_id: Nonehub_strategy: every_savehub_private_repo: Nonehub_always_push: Falsehub_revision: Nonegradient_checkpointing: Truegradient_checkpointing_kwargs: Noneinclude_for_metrics: []eval_do_concat_batches: Trueauto_find_batch_size: Falsefull_determinism: Falseddp_timeout: 1800torch_compile: Falsetorch_compile_backend: Nonetorch_compile_mode: Noneinclude_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: Trueuse_cache: Falseprompts: 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.8949 | 0.8732 |
| 1.0 | 63 | 1.5265 | 0.4622 | 0.9315 | - |
| 2.0 | 126 | 0.4451 | 0.2844 | 0.9389 | - |
| 3.0 | 189 | 0.2151 | 0.2508 | 0.9315 | - |
| 4.0 | 252 | 0.1429 | 0.242 | 0.9413 | - |
| 5.0 | 315 | 0.1171 | 0.2386 | 0.9413 | - |
| -1 | -1 | - | - | 0.9413 | 0.9341 |
@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}
}
Base model
intfloat/multilingual-e5-base