Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks
Paper • 1908.10084 • Published • 18
How to use milhamapratama/agree-model-v1 with sentence-transformers:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("milhamapratama/agree-model-v1")
sentences = [
"apa yang terjadi jika saya menonaktifkan sebuah traceability story?",
"sektor hulu merupakan sektor yang berperan di on-farm atau proses produksi saat di sawah atau di ladang seperti pendanaan, penyiapan lahan, pemilihan benih dan lain lain.",
"pengguna memiliki opsi untuk menonaktifkan traceability story yang telah dipublikasikan pada halaman detail traceability story terkait. jika dinonaktifkan, cerita tersebut tidak akan dapat diakses atau dikunjungi oleh pengguna lain.",
"alasan pertama mengapa agree traceability dapat membantu perusahaan menghadapi tantangan dalam industri pangan adalah kemampuannya dalam identifikasi dan pelacakan produk secara cepat. dengan fitur traceability enterprise, sistem ini memungkinkan perusahaan untuk mengidentifikasi serta melacak setiap produk di sepanjang rantai pasokan dengan akurasi tinggi. kemampuan ini sangat penting dalam situasi darurat, di mana perusahaan dapat segera menarik kembali produk yang bermasalah dari pasaran jika terjadi isu keamanan pangan."
]
embeddings = model.encode(sentences)
similarities = model.similarity(embeddings, embeddings)
print(similarities.shape)
# [4, 4]This is a sentence-transformers model finetuned from sentence-transformers/all-MiniLM-L6-v2. It maps sentences & paragraphs to a 384-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': 256, 'do_lower_case': False}) with Transformer model: BertModel
(1): Pooling({'word_embedding_dimension': 384, '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("milhamapratama/finetuned-agree-all-miniLM-L6-v2")
# Run inference
sentences = [
'apa tindakan agree terhadap pengguna yang memberikan informasi palsu saat pendaftaran?',
'jika pengguna dan/atau pelanggan memberikan informasi atau data pribadi yang tidak benar, tidak jelas, tidak akurat, atau tidak lengkap, agree berhak menolak permohonan pembuatan akun dan dapat menangguhkan atau menghentikan sebagian atau seluruh layanan yang diberikan.',
'dengan layanan ini, pengguna dapat berkontribusi dalam menyebarkan pengetahuan dan wawasan terkait berbagai topik agrikultur kepada komunitas lainnya.',
]
embeddings = model.encode(sentences)
print(embeddings.shape)
# [3, 384]
# Get the similarity scores for the embeddings
similarities = model.similarity(embeddings, embeddings)
print(similarities.shape)
# [3, 3]
valEmbeddingSimilarityEvaluator| Metric | Value |
|---|---|
| pearson_cosine | 0.8274 |
| spearman_cosine | 0.7265 |
| pearson_manhattan | 0.8054 |
| spearman_manhattan | 0.7261 |
| pearson_euclidean | 0.8059 |
| spearman_euclidean | 0.7265 |
| pearson_dot | 0.8274 |
| spearman_dot | 0.7265 |
| pearson_max | 0.8274 |
| spearman_max | 0.7265 |
sentence_0, sentence_1, and label| sentence_0 | sentence_1 | label | |
|---|---|---|---|
| type | string | string | float |
| details |
|
|
|
| sentence_0 | sentence_1 | label |
|---|---|---|
bagaimana cara menambahkan nama produk di bagian overview produk? |
pada bagian "overview produk" di halaman pertama formulir tambah traceability story, pengguna dapat mengisi nama produk yang akan digunakan sebagai judul utama pada halaman traceability story. nama produk ini berperan penting dalam memberikan identitas yang jelas terhadap produk yang didaftarkan dalam sistem. |
1.0 |
apakah ada batasan usia atau latar belakang tertentu untuk menjadi agree expert? |
apabila pengguna ingin menjadi expert, pengguna harus memiliki keahlian dan pengalaman di bidang agrikultur serta mengisi formulir pendaftaran dengan informasi yang relevan untuk mendukung proses validasi. |
1.0 |
apakah perubahan dalam pusat resolusi akan berdampak pada cara mengajukan keluhan? |
ketentuan pusat resolusi pada platform agree poin kedua: dalam hal adanya penambahan, pengurangan dan/atau perubahan channel pengaduan akan diinformasikan kemudian melalui dashboard atau situs agree. |
1.0 |
CosineSimilarityLoss with these parameters:{
"loss_fct": "torch.nn.modules.loss.MSELoss"
}
eval_strategy: stepsper_device_train_batch_size: 16per_device_eval_batch_size: 16num_train_epochs: 4multi_dataset_batch_sampler: round_robinoverwrite_output_dir: Falsedo_predict: Falseeval_strategy: stepsprediction_loss_only: Trueper_device_train_batch_size: 16per_device_eval_batch_size: 16per_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: 4max_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: Falsehub_always_push: Falsegradient_checkpointing: Falsegradient_checkpointing_kwargs: Noneinclude_inputs_for_metrics: Falseeval_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: Falsebatch_sampler: batch_samplermulti_dataset_batch_sampler: round_robin| Epoch | Step | Training Loss | val_spearman_max |
|---|---|---|---|
| 0.0806 | 50 | - | 0.5255 |
| 0.1613 | 100 | - | 0.5470 |
| 0.2419 | 150 | - | 0.5847 |
| 0.3226 | 200 | - | 0.6196 |
| 0.4032 | 250 | - | 0.6456 |
| 0.4839 | 300 | - | 0.6653 |
| 0.5645 | 350 | - | 0.6740 |
| 0.6452 | 400 | - | 0.6750 |
| 0.7258 | 450 | - | 0.6746 |
| 0.8065 | 500 | 0.1211 | 0.6870 |
| 0.8871 | 550 | - | 0.6942 |
| 0.9677 | 600 | - | 0.6963 |
| 1.0 | 620 | - | 0.7018 |
| 1.0484 | 650 | - | 0.7001 |
| 1.1290 | 700 | - | 0.7047 |
| 1.2097 | 750 | - | 0.7070 |
| 1.2903 | 800 | - | 0.7044 |
| 1.3710 | 850 | - | 0.7096 |
| 1.4516 | 900 | - | 0.7065 |
| 1.5323 | 950 | - | 0.7014 |
| 1.6129 | 1000 | 0.0848 | 0.7082 |
| 1.6935 | 1050 | - | 0.7148 |
| 1.7742 | 1100 | - | 0.7175 |
| 1.8548 | 1150 | - | 0.7142 |
| 1.9355 | 1200 | - | 0.7126 |
| 2.0 | 1240 | - | 0.7158 |
| 2.0161 | 1250 | - | 0.7154 |
| 2.0968 | 1300 | - | 0.7137 |
| 2.1774 | 1350 | - | 0.7142 |
| 2.2581 | 1400 | - | 0.7218 |
| 2.3387 | 1450 | - | 0.7203 |
| 2.4194 | 1500 | 0.0709 | 0.7205 |
| 2.5 | 1550 | - | 0.7194 |
| 2.5806 | 1600 | - | 0.7175 |
| 2.6613 | 1650 | - | 0.7194 |
| 2.7419 | 1700 | - | 0.7185 |
| 2.8226 | 1750 | - | 0.7195 |
| 2.9032 | 1800 | - | 0.7241 |
| 2.9839 | 1850 | - | 0.7230 |
| 3.0 | 1860 | - | 0.7234 |
| 3.0645 | 1900 | - | 0.7251 |
| 3.1452 | 1950 | - | 0.7260 |
| 3.2258 | 2000 | 0.0614 | 0.7243 |
| 3.3065 | 2050 | - | 0.7257 |
| 3.3871 | 2100 | - | 0.7264 |
| 3.4677 | 2150 | - | 0.7248 |
| 3.5484 | 2200 | - | 0.7255 |
| 3.6290 | 2250 | - | 0.7245 |
| 3.7097 | 2300 | - | 0.7263 |
| 3.7903 | 2350 | - | 0.7262 |
| 3.8710 | 2400 | - | 0.7265 |
| 3.9516 | 2450 | - | 0.7265 |
| 4.0 | 2480 | - | 0.7265 |
@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",
}
Base model
nreimers/MiniLM-L6-H384-uncased