Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks
Paper • 1908.10084 • Published • 17
How to use Thomas2011/e5-finetuned-magistralis with sentence-transformers:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("Thomas2011/e5-finetuned-magistralis")
sentences = [
"query: La mia conversazione in chat con AI su magistrato è riservata?",
"passage: Esatto. Il vincolo di raffreddamento di 4 giorni te lo impedirebbe. Il sistema cercherà un altro collega disponibile per quel ruolo, che non abbia svolto incarichi pesanti nei giorni immediatamente precedenti.",
"passage: Un vincolo è semplicemente una regola che non può essere infranta. Esempi di vincoli sono: 'Il Dottor Rossi è in ferie dal 10 al 15, quindi non può essere di turno', 'Devono passare almeno 15 giorni tra due turni da Titolare per la stessa persona', 'Nessuno può essere Titolare e Supplente nello stesso giorno'.",
"passage: Sì. Quando si usano le funzioni complesse dell'assistente, solo il testo della sua domanda (e non l'audio) viene inviato in modo anonimo al modello linguistico per l'analisi. Il modello non conosce il contesto del suo ufficio e non ha accesso diretto ai suoi database. Risponde solo sulla base del testo che riceve e delle 'competenze' che gli sono state fornite."
]
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': 512, 'do_lower_case': False, 'architecture': 'BertModel'})
(1): Pooling({'word_embedding_dimension': 1024, '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("sentence_transformers_model_id")
# Run inference
sentences = [
'query: Magistralis permette modifica intestazione/piè di pagina su PDF?',
"passage: No, i report vengono generati con un'intestazione standard e predefinita ('Report turni dei magistrati - Ufficio Gip') per garantire coerenza. Non sono previste opzioni di personalizzazione del layout del documento esportato.",
"passage: Sì, la visualizzazione del log all'interno del programma è dotata di potenti strumenti di ricerca e filtro. È possibile cercare per parola chiave, per livello di gravità (es. mostrare solo gli 'ERRORI'), per componente del programma o per intervallo di date.",
]
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.8105, 0.0467],
# [0.8105, 1.0000, 0.1270],
# [0.0467, 0.1270, 1.0000]])
sentence_0 and sentence_1| sentence_0 | sentence_1 | |
|---|---|---|
| type | string | string |
| details |
|
|
| sentence_0 | sentence_1 |
|---|---|
query: È possibile tutelare l'apertura di Magistralis tramite una password? |
passage: Magistralis non ha un suo sistema di password interno. La protezione dell'accesso è delegata all'account utente del sistema operativo (Windows, MacOS, etc.). Si consiglia di proteggere l'accesso al proprio account con una password robusta per garantire la sicurezza di tutti i programmi installati, incluso Magistralis. |
query: "Magistralis: come cancellare in sicurezza log tecnici" |
passage: {"type": "tutorial", "title": "Guida alla Cancellazione dei Log Tecnici", "description": "Il programma offre una funzione integrata per resettare il database dei log senza rischi.", "steps": ["Passo 1 di 3: Navighi fino alla sezione 'Report e Log' dell'applicazione.", "Passo 2 di 3: Si assicuri di essere nella vista dei 'Log' (se il pulsante in alto dice 'Visualizza report', è nella schermata corretta).", "Passo 3 di 3: In alto a destra, troverà un pulsante chiamato 'Reset DB'. Cliccando questo pulsante e confermando l'operazione, il sistema cancellerà in modo sicuro e definitivo tutti i record dal database dei log, lasciando intatti tutti gli altri dati del programma." ]} |
query: Devo recuperare i dati di ieri da Magistralis, come? |
passage: {"type": "tutorial", "title": "Guida al Ripristino da Backup", "description": "Questa procedura permette di riportare il sistema a uno stato precedente utilizzando un file di backup.", "steps": ["Passo 1 di 4: Si assicuri che nessun altro stia usando il programma. È un'operazione delicata da fare in tranquillità.", "Passo 2 di 4: Vada nella sezione 'Report e Log' e si posizioni nella vista dei 'Log'.", "Passo 3 di 4: Prema il pulsante 'Ripristina Backup'. Si aprirà una finestra per selezionare un file. Navighi fino alla cartella 'backup' e scelga il file corretto (il nome contiene la data e l'ora, aiutandola a identificare quello giusto).", "Passo 4 di 4: Confermi l'operazione. Il programma sovrascriverà i dati attuali con quelli contenuti nel backup. Al termine, l'applicazione si aggiornerà mostrando i dati ripristinati." ]} |
MultipleNegativesRankingLoss with these parameters:{
"scale": 20.0,
"similarity_fct": "cos_sim",
"gather_across_devices": false
}
per_device_train_batch_size: 32per_device_eval_batch_size: 32num_train_epochs: 2multi_dataset_batch_sampler: round_robinoverwrite_output_dir: Falsedo_predict: Falseeval_strategy: noprediction_loss_only: Trueper_device_train_batch_size: 32per_device_eval_batch_size: 32per_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: 2max_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_torch_fusedoptim_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: Falsehub_revision: Nonegradient_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: Noneinclude_tokens_per_second: Falseinclude_num_input_tokens_seen: Falseneftune_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: Falseprompts: Nonebatch_sampler: batch_samplermulti_dataset_batch_sampler: round_robinrouter_mapping: {}learning_rate_mapping: {}| Epoch | Step | Training Loss |
|---|---|---|
| 0.5682 | 500 | 0.3754 |
| 1.1364 | 1000 | 0.3551 |
| 1.7045 | 1500 | 0.3382 |
@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}
}