Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks
Paper • 1908.10084 • Published • 18
How to use ryma-tharouma/bge-m3-finetuned_v2 with sentence-transformers:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("ryma-tharouma/bge-m3-finetuned_v2")
sentences = [
"comment créer une règle pour que les missions urgentes soient toujours validées par le directeur",
"Restreindre la visibilité des sinistres par site pour un gestionnaire Administration > Gestion des utilisateurs > Périmètre sinistres\nPar défaut, un gestionnaire de site a accès en lecture aux sinistres de tous les sites. Pour le restreindre à son seul site, configurez son périmètre d'accès aux sinistres.\n\n1. Accédez à « Administration » > « Gestion des utilisateurs ».\n2. Ouvrez le profil du gestionnaire de site concerné.\n3. Cliquez sur « Modifier les droits ».\n4. Dans l'onglet « Modules » > section « Sinistres » :\n - Vérifiez que les droits de consultation et de modification sont cochés.\n - Dans le sous-champ « Périmètre des sinistres », sélectionnez « Sinistres de mon site uniquement » (au lieu de « Tous les sinistres »).\n5. Assurez-vous également que l'onglet « Périmètre d'accès » > « Sites autorisés » ne liste que le(s) site(s) du gestionnaire.\n6. Cliquez sur « Enregistrer les modifications ».\n\n**Effets de cette configuration :**\n- Le gestionnaire ne voit dans le module Sinistres que les dossiers dont le véhicule impliqué est rattaché à son site.\n- Les sinistres des autres sites n'apparaissent pas dans ses listes, ses rapports ou ses alertes.\n- Si un sinistre implique un véhicule de son site mais que la mission partait d'un autre site, le dossier reste visible pour lui car le véhicule lui appartient.\n\n Cette restriction s'applique également aux rapports de sinistres : le gestionnaire ne peut générer que des rapports sur ses propres sinistres.",
"Configurer une règle de validation spécifique pour les missions urgentes Paramètres > Workflows > Validation des missions > Règle par priorité\nL'application permet de définir des circuits de validation différents selon la priorité de la mission.\n\n1. Accédez à « Paramètres » > « Workflows » > « Validation des missions ».\n2. Cliquez sur « + Nouvelle règle de validation ».\n3. Configurez la règle :\n - Nom * : « Validation directeur – Missions urgentes »\n - Condition de déclenchement * : Priorité de la mission = Urgente\n - Type de mission concerné : Tous (ou sélectionnez des types spécifiques)\n4. Définissez le validateur :\n - Profil requis : Directeur de site, ou\n - Utilisateur spécifique : sélectionnez le directeur dans la liste\n5. Configurez le comportement :\n - La mission reste en statut « En attente de validation » jusqu'à approbation\n - Délai de réponse attendu : 2 heures (pour une urgence)\n - En cas de non-réponse dans le délai : escalade vers le directeur régional ou validation automatique\n6. Canal de notification : E-mail + SMS + Notification push (recommandé pour les urgences)\n7. Cliquez sur « Enregistrer ».\n\n**Impact :**\nChaque fois qu'une mission est créée ou que sa priorité est passée à « Urgente », le workflow est déclenché automatiquement. La mission ne peut pas être confirmée sans l'approbation du directeur désigné.\n\n Pour éviter les blocages, désignez un validateur de secours dans le cas où le directeur principal est absent (utilisez la fonctionnalité de délégation).",
"Droits d'annulation de mission selon le profil Missions > Permissions\nDispatcheur : annule Planifiée/Confirmée. Gestionnaire de site : tous statuts sur son périmètre. Gestionnaire principal : tous statuts. Administrateur : tous statuts y compris Terminée."
]
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 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': 'XLMRobertaModel'})
(1): Pooling({'embedding_dimension': 1024, 'pooling_mode': 'cls', '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("ryma-tharouma/bge-m3-finetuned_v2")
# Run inference
sentences = [
'je dois créer un rapport de performance commerciale consolidé pour la direction',
"Générer un rapport de performance commerciale consolidé pour la direction\nChemin : CRM > Reporting > Tableau de bord direction > Rapport consolidé\n1. Naviguer vers CRM > Reporting et créer un rapport consolidé ou utiliser le modèle Rapport de direction si disponible.\n2. Configurer les sections : KPIs clés en chiffres, performance vs objectifs (réalisé vs quota par commercial et par équipe), évolution du pipeline vs N-1, top 10 des opportunités actives, analyse des pertes (montant et causes), prévisions du trimestre suivant.\n3. Définir la période de référence et les indicateurs : taux d'atteinte des quotas, taux de conversion global, durée du cycle de vente, taille moyenne des deals.\n4. Personnaliser le format pour une présentation direction : graphiques synthétiques, tableaux clairs, codes couleur.\n5. Programmer l'envoi automatique en PDF chaque lundi matin ou avant chaque comité de direction.\nNote : Un rapport de direction doit être synthétique et orienté décision. La direction a besoin de tendances et d'alertes, pas de lignes de données brutes.",
"Générer le rapport de gestion financière mensuel pour la direction\nChemin : Finance > Reporting > Rapport de gestion mensuel\n1. Depuis Finance > Reporting, générer le rapport de gestion mensuel incluant P&L, bilan simplifié et trésorerie.\n2. Configurer les comparatifs avec les budgets et l'année précédente.\n3. Ajouter les commentaires de gestion sur les écarts significatifs.\n4. Valider avec le DAF avant diffusion à la direction générale.\nNote : Le rapport de gestion financière mesure la performance économique de l'entreprise (P&L, trésorerie, bilan). Le rapport de performance commerciale CRM mesure la performance des équipes de vente (pipeline, quotas, opportunités). Ces deux rapports sont présentés à la direction mais mesurent des dimensions entièrement différentes de l'entreprise.",
]
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.8067, 0.5939],
# [0.8067, 1.0000, 0.6884],
# [0.5939, 0.6884, 1.0000]])
anchor, positive, and negative| anchor | positive | negative | |
|---|---|---|---|
| type | string | string | string |
| modality | text | text | text |
| details |
|
|
|
| anchor | positive | negative |
|---|---|---|
comment intégrer les exigences de cybersécurité dans les marchés informatiques |
Intégrer les exigences de cybersécurité dans les marchés de fournitures et services informatiques |
Mettre en œuvre une politique de sécurité des achats en ligne |
comment voir les indicateurs de performance de mes techniciens maintenance ? |
Consulter les indicateurs de performance des techniciens maintenance Maintenance > Rapports > Performance techniciens |
Consulter le taux de disponibilité des équipements Maintenance > Rapports > Disponibilité équipements |
comment saisir des frais kilométriques remboursés à un salarié ? |
Comptabiliser les frais kilométriques d'un salarié Finance > Comptabilité > OD ou Achats > Notes de frais |
Comptabiliser les frais de déplacement sur justificatifs (billet, hôtel, repas) Finance > Comptabilité > Achats > Notes de frais |
TripletLoss with these parameters:{
"distance_metric": "TripletDistanceMetric.EUCLIDEAN",
"triplet_margin": 5
}
anchor, positive, and negative| anchor | positive | negative | |
|---|---|---|---|
| type | string | string | string |
| modality | text | text | text |
| details |
|
|
|
| anchor | positive | negative |
|---|---|---|
c'est quoi le chemin critique et comment je le vois dans l'appli |
Comprendre et afficher le chemin critique Projets > Gantt > Affichage du chemin critique |
Reporter une tâche sans casser les dépendances Projets > Tâches > Décalage |
comment ajouter des notes privées sur une tâche que seul moi je vois |
Ajouter une note privée sur une tâche visible uniquement par l'auteur Projets > Tâches > Commentaires > Note privée |
Ajouter des commentaires sur une tâche pour communiquer avec l'équipe Projets > Tâches > Commentaires |
comment voir toutes les modifications apportées dans l'appli sur la journée d'hier |
Consulter le journal d'activité complet de la journée précédente Administration > Audit > Journal d'activité |
Consulter le journal des connexions sur une période Administration > Audit > Journal des connexions |
TripletLoss with these parameters:{
"distance_metric": "TripletDistanceMetric.EUCLIDEAN",
"triplet_margin": 5
}
per_device_train_batch_size: 32per_device_eval_batch_size: 32learning_rate: 4e-05weight_decay: 0.001num_train_epochs: 1warmup_ratio: 0.0warmup_steps: 0.19fp16: Truedataloader_drop_last: Truegradient_checkpointing: Truedo_predict: Falseprediction_loss_only: Trueper_device_train_batch_size: 32per_device_eval_batch_size: 32gradient_accumulation_steps: 1eval_accumulation_steps: Nonetorch_empty_cache_steps: Nonelearning_rate: 4e-05weight_decay: 0.001adam_beta1: 0.9adam_beta2: 0.999adam_epsilon: 1e-08max_grad_norm: 1.0num_train_epochs: 1max_steps: -1lr_scheduler_type: linearlr_scheduler_kwargs: Nonewarmup_ratio: 0.0warmup_steps: 0.19log_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: Truedataloader_num_workers: 0dataloader_prefetch_factor: Nonedisable_tqdm: Falseremove_unused_columns: Truelabel_names: Noneload_best_model_at_end: Falseignore_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: Truedataloader_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: batch_samplermulti_dataset_batch_sampler: proportionalrouter_mapping: {}learning_rate_mapping: {}| Epoch | Step | Training Loss | Validation Loss |
|---|---|---|---|
| 1.0 | 31 | 4.8110 | 4.7508 |
@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{hermans2017defense,
title={In Defense of the Triplet Loss for Person Re-Identification},
author={Alexander Hermans and Lucas Beyer and Bastian Leibe},
year={2017},
eprint={1703.07737},
archivePrefix={arXiv},
primaryClass={cs.CV}
}
Base model
BAAI/bge-m3