BGE large Legal Spanish

This is a sentence-transformers model finetuned from BAAI/bge-m3 on the justicio-rag-embedding-qa-tmp-2 dataset. 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.

Model Details

Model Description

  • Model Type: Sentence Transformer
  • Base model: BAAI/bge-m3
  • Maximum Sequence Length: 8192 tokens
  • Output Dimensionality: 1024 dimensions
  • Similarity Function: Cosine Similarity
  • Training Dataset:
  • Language: es
  • License: apache-2.0

Model Sources

Full Model Architecture

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()
)

Usage

Direct Usage (Sentence Transformers)

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("wilfoderek/bge-m3-es-legal-tmp-1")
# Run inference
queries = [
    "Art\u00edculo 6. Definiciones. 1. Discriminaci\u00f3n directa e indirecta. b) La discriminaci\u00f3n indirecta se produce cuando una disposici\u00f3n, criterio o pr\u00e1ctica aparentemente neutros ocasiona o puede ocasionar a una o varias personas una desventaja particular con respecto a otras por raz\u00f3n de las causas previstas en el apartado 1 del art\u00edculo 2.",
]
documents = [
    '¿Qué se considera discriminación indirecta?',
    '¿Qué tipo de información se considera veraz?',
    '¿Cuál es el papel del Consejo de Salud de Área?',
]
query_embeddings = model.encode_query(queries)
document_embeddings = model.encode_document(documents)
print(query_embeddings.shape, document_embeddings.shape)
# [1, 1024] [3, 1024]

# Get the similarity scores for the embeddings
similarities = model.similarity(query_embeddings, document_embeddings)
print(similarities)
# tensor([[0.7562, 0.1522, 0.0675]])

Evaluation

Metrics

Information Retrieval

Metric Value
cosine_accuracy@1 0.5396
cosine_accuracy@3 0.8049
cosine_accuracy@5 0.8598
cosine_accuracy@10 0.9085
cosine_precision@1 0.5396
cosine_precision@3 0.2683
cosine_precision@5 0.172
cosine_precision@10 0.0909
cosine_recall@1 0.5396
cosine_recall@3 0.8049
cosine_recall@5 0.8598
cosine_recall@10 0.9085
cosine_ndcg@10 0.7335
cosine_mrr@10 0.6763
cosine_map@100 0.6798

Information Retrieval

Metric Value
cosine_accuracy@1 0.5152
cosine_accuracy@3 0.8049
cosine_accuracy@5 0.8567
cosine_accuracy@10 0.9085
cosine_precision@1 0.5152
cosine_precision@3 0.2683
cosine_precision@5 0.1713
cosine_precision@10 0.0909
cosine_recall@1 0.5152
cosine_recall@3 0.8049
cosine_recall@5 0.8567
cosine_recall@10 0.9085
cosine_ndcg@10 0.7234
cosine_mrr@10 0.6628
cosine_map@100 0.6662

Information Retrieval

Metric Value
cosine_accuracy@1 0.5427
cosine_accuracy@3 0.811
cosine_accuracy@5 0.8628
cosine_accuracy@10 0.9024
cosine_precision@1 0.5427
cosine_precision@3 0.2703
cosine_precision@5 0.1726
cosine_precision@10 0.0902
cosine_recall@1 0.5427
cosine_recall@3 0.811
cosine_recall@5 0.8628
cosine_recall@10 0.9024
cosine_ndcg@10 0.7337
cosine_mrr@10 0.6783
cosine_map@100 0.6821

Information Retrieval

Metric Value
cosine_accuracy@1 0.5366
cosine_accuracy@3 0.7957
cosine_accuracy@5 0.8567
cosine_accuracy@10 0.8872
cosine_precision@1 0.5366
cosine_precision@3 0.2652
cosine_precision@5 0.1713
cosine_precision@10 0.0887
cosine_recall@1 0.5366
cosine_recall@3 0.7957
cosine_recall@5 0.8567
cosine_recall@10 0.8872
cosine_ndcg@10 0.7246
cosine_mrr@10 0.6708
cosine_map@100 0.6753

Information Retrieval

Metric Value
cosine_accuracy@1 0.5305
cosine_accuracy@3 0.7713
cosine_accuracy@5 0.8232
cosine_accuracy@10 0.872
cosine_precision@1 0.5305
cosine_precision@3 0.2571
cosine_precision@5 0.1646
cosine_precision@10 0.0872
cosine_recall@1 0.5305
cosine_recall@3 0.7713
cosine_recall@5 0.8232
cosine_recall@10 0.872
cosine_ndcg@10 0.7121
cosine_mrr@10 0.6597
cosine_map@100 0.6643

Information Retrieval

Metric Value
cosine_accuracy@1 0.503
cosine_accuracy@3 0.7317
cosine_accuracy@5 0.7835
cosine_accuracy@10 0.8689
cosine_precision@1 0.503
cosine_precision@3 0.2439
cosine_precision@5 0.1567
cosine_precision@10 0.0869
cosine_recall@1 0.503
cosine_recall@3 0.7317
cosine_recall@5 0.7835
cosine_recall@10 0.8689
cosine_ndcg@10 0.6887
cosine_mrr@10 0.631
cosine_map@100 0.6349

Training Details

Training Dataset

justicio-rag-embedding-qa-tmp-2

  • Dataset: justicio-rag-embedding-qa-tmp-2 at 72c1e63
  • Size: 2,947 training samples
  • Columns: context and question
  • Approximate statistics based on the first 1000 samples:
    context question
    type string string
    details
    • min: 22 tokens
    • mean: 63.25 tokens
    • max: 222 tokens
    • min: 8 tokens
    • mean: 20.31 tokens
    • max: 53 tokens
  • Samples:
    context question
    La ley debe entenderse, por tanto, en el contexto del cumplimiento por parte del Estado de la obligación que, en el marco de sus competencias constitucionales, le incumbe en la protección del derecho a acceder a una vivienda digna y adecuada y a su disfrute. ¿Cuál es el objetivo de la ley en cuanto a la vivienda?
    JUAN CARLOS I REY DE ESPAÑA A todos los que la presente vieren y entendieren. Sabed: Que las Cortes Generales han aprobado y Yo vengo en sancionar la siguiente Ley Orgánica. ¿Quién sanciona la Ley Orgánica?
    A esta finalidad responde la modificación del artículo 37 de la Ley 8/2018, de 8 de octubre, de medidas frente al cambio climático y para la transición hacia un modelo energético en Andalucía, con el objetivo de incluir la posibilidad de que se puedan articular la ejecución de proyectos de absorción de emisiones a través de la suscripción por la Consejería competente en materia de medio ambiente de convenios de colaboración público-privada, los cuales podrán tener una duración acorde a la vida útil de dichos proyectos, en función de sus distintas tipologías, atendiendo así la demanda de organizaciones y empresas que, de manera voluntaria, dentro de sus programas de responsabilidad corporativa, quieren reducir sus emisiones de gases de efecto invernadero y están interesadas en la ejecución de estos proyectos bajo esta fórmula para la compensación que ha crecido exponencialmente en los últimos años. ¿Cuál es el objetivo de la modificación del artículo 37 de la Ley 8/2018?
  • Loss: MatryoshkaLoss with these parameters:
    {
        "loss": "MultipleNegativesRankingLoss",
        "matryoshka_dims": [
            1024,
            768,
            512,
            256,
            128,
            64
        ],
        "matryoshka_weights": [
            1,
            1,
            1,
            1,
            1,
            1
        ],
        "n_dims_per_step": -1
    }
    

Evaluation Dataset

justicio-rag-embedding-qa-tmp-2

  • Dataset: justicio-rag-embedding-qa-tmp-2 at 72c1e63
  • Size: 328 evaluation samples
  • Columns: context and question
  • Approximate statistics based on the first 328 samples:
    context question
    type string string
    details
    • min: 20 tokens
    • mean: 64.15 tokens
    • max: 187 tokens
    • min: 9 tokens
    • mean: 19.64 tokens
    • max: 50 tokens
  • Samples:
    context question
    Con el fin de lograr un mejor aprovechamiento de los recursos humanos, que garantice la eficacia del servicio que se preste a los ciudadanos, la Administración General del Estado y las comunidades autónomas y las entidades locales establecerán medidas de movilidad interadministrativa, preferentemente mediante convenio de Conferencia Sectorial u otros instrumentos de colaboración. ¿Cuál es el objetivo de la movilidad interadministrativa?
    Las Administraciones públicas, en el ámbito de sus competencias, continuarán impartiendo formación inicial y continuada al personal a su servicio sobre diversidad en materia de orientación sexual, identidad sexual, expresión de género y características sexuales, sobre diversidad familiar y sobre igualdad y no discriminación de las personas LGTBI. ¿Qué tipo de formación se impartirá al personal al servicio de las Administraciones públicas?
    En los contratos de carácter temporal cuya duración efectiva sea inferior a siete días, la cuota empresarial a la Seguridad Social por contingencias comunes se incrementará en un 36 por ciento. ¿Qué sucede con la cotización en contratos de carácter temporal cuya duración efectiva sea inferior a siete días?
  • Loss: MatryoshkaLoss with these parameters:
    {
        "loss": "MultipleNegativesRankingLoss",
        "matryoshka_dims": [
            1024,
            768,
            512,
            256,
            128,
            64
        ],
        "matryoshka_weights": [
            1,
            1,
            1,
            1,
            1,
            1
        ],
        "n_dims_per_step": -1
    }
    

Training Hyperparameters

Non-Default Hyperparameters

  • eval_strategy: epoch
  • per_device_train_batch_size: 16
  • per_device_eval_batch_size: 16
  • gradient_accumulation_steps: 16
  • learning_rate: 2e-05
  • num_train_epochs: 6
  • lr_scheduler_type: cosine
  • warmup_ratio: 0.1
  • bf16: True
  • tf32: True
  • load_best_model_at_end: True
  • optim: adamw_torch_fused
  • batch_sampler: no_duplicates

All Hyperparameters

Click to expand
  • overwrite_output_dir: False
  • do_predict: False
  • eval_strategy: epoch
  • prediction_loss_only: True
  • per_device_train_batch_size: 16
  • per_device_eval_batch_size: 16
  • per_gpu_train_batch_size: None
  • per_gpu_eval_batch_size: None
  • gradient_accumulation_steps: 16
  • eval_accumulation_steps: None
  • torch_empty_cache_steps: None
  • learning_rate: 2e-05
  • weight_decay: 0.0
  • adam_beta1: 0.9
  • adam_beta2: 0.999
  • adam_epsilon: 1e-08
  • max_grad_norm: 1.0
  • num_train_epochs: 6
  • max_steps: -1
  • lr_scheduler_type: cosine
  • lr_scheduler_kwargs: {}
  • warmup_ratio: 0.1
  • warmup_steps: 0
  • log_level: passive
  • log_level_replica: warning
  • log_on_each_node: True
  • logging_nan_inf_filter: True
  • save_safetensors: True
  • save_on_each_node: False
  • save_only_model: False
  • restore_callback_states_from_checkpoint: False
  • no_cuda: False
  • use_cpu: False
  • use_mps_device: False
  • seed: 42
  • data_seed: None
  • jit_mode_eval: False
  • use_ipex: False
  • bf16: True
  • fp16: False
  • fp16_opt_level: O1
  • half_precision_backend: auto
  • bf16_full_eval: False
  • fp16_full_eval: False
  • tf32: True
  • local_rank: 0
  • ddp_backend: None
  • tpu_num_cores: None
  • tpu_metrics_debug: False
  • debug: []
  • dataloader_drop_last: False
  • dataloader_num_workers: 0
  • dataloader_prefetch_factor: None
  • past_index: -1
  • disable_tqdm: False
  • remove_unused_columns: True
  • label_names: None
  • load_best_model_at_end: True
  • ignore_data_skip: False
  • fsdp: []
  • fsdp_min_num_params: 0
  • fsdp_config: {'min_num_params': 0, 'xla': False, 'xla_fsdp_v2': False, 'xla_fsdp_grad_ckpt': False}
  • fsdp_transformer_layer_cls_to_wrap: None
  • accelerator_config: {'split_batches': False, 'dispatch_batches': None, 'even_batches': True, 'use_seedable_sampler': True, 'non_blocking': False, 'gradient_accumulation_kwargs': None}
  • deepspeed: None
  • label_smoothing_factor: 0.0
  • optim: adamw_torch_fused
  • optim_args: None
  • adafactor: False
  • group_by_length: False
  • length_column_name: length
  • ddp_find_unused_parameters: None
  • ddp_bucket_cap_mb: None
  • ddp_broadcast_buffers: False
  • dataloader_pin_memory: True
  • dataloader_persistent_workers: False
  • skip_memory_metrics: True
  • use_legacy_prediction_loop: False
  • push_to_hub: False
  • resume_from_checkpoint: None
  • hub_model_id: None
  • hub_strategy: every_save
  • hub_private_repo: None
  • hub_always_push: False
  • hub_revision: None
  • gradient_checkpointing: False
  • gradient_checkpointing_kwargs: None
  • include_inputs_for_metrics: False
  • include_for_metrics: []
  • eval_do_concat_batches: True
  • fp16_backend: auto
  • push_to_hub_model_id: None
  • push_to_hub_organization: None
  • mp_parameters:
  • auto_find_batch_size: False
  • full_determinism: False
  • torchdynamo: None
  • ray_scope: last
  • ddp_timeout: 1800
  • torch_compile: False
  • torch_compile_backend: None
  • torch_compile_mode: None
  • include_tokens_per_second: False
  • include_num_input_tokens_seen: False
  • neftune_noise_alpha: None
  • optim_target_modules: None
  • batch_eval_metrics: False
  • eval_on_start: False
  • use_liger_kernel: False
  • liger_kernel_config: None
  • eval_use_gather_object: False
  • average_tokens_across_devices: False
  • prompts: None
  • batch_sampler: no_duplicates
  • multi_dataset_batch_sampler: proportional
  • router_mapping: {}
  • learning_rate_mapping: {}

Training Logs

Epoch Step Training Loss Validation Loss dim_1024_cosine_ndcg@10 dim_768_cosine_ndcg@10 dim_512_cosine_ndcg@10 dim_256_cosine_ndcg@10 dim_128_cosine_ndcg@10 dim_64_cosine_ndcg@10
0.4324 5 1.6474 - - - - - - -
0.8649 10 1.1634 - - - - - - -
1.0 12 - 0.7731 0.7239 0.7134 0.7226 0.7259 0.6998 0.6529
1.2595 15 0.8271 - - - - - - -
1.6919 20 0.5396 - - - - - - -
2.0 24 - 0.649 0.7274 0.7221 0.7319 0.7322 0.7139 0.669
2.0865 25 0.5425 - - - - - - -
2.5189 30 0.3327 - - - - - - -
2.9514 35 0.2893 - - - - - - -
3.0 36 - 0.6038 0.7266 0.7241 0.7323 0.7266 0.7094 0.6762
3.3459 40 0.214 - - - - - - -
3.7784 45 0.2363 - - - - - - -
4.0 48 - 0.5849 0.7247 0.7246 0.7307 0.7230 0.7117 0.6859
4.1730 50 0.2066 - - - - - - -
4.6054 55 0.1616 - - - - - - -
5.0 60 0.2014 0.5632 0.7322 0.7237 0.7331 0.7240 0.7133 0.6889
5.4324 65 0.1772 - - - - - - -
5.8649 70 0.1806 - - - - - - -
6.0 72 - 0.5578 0.7335 0.7234 0.7337 0.7246 0.7121 0.6887
  • The bold row denotes the saved checkpoint.

Framework Versions

  • Python: 3.11.13
  • Sentence Transformers: 5.1.0
  • Transformers: 4.55.0
  • PyTorch: 2.6.0+cu124
  • Accelerate: 1.10.0
  • Datasets: 4.0.0
  • Tokenizers: 0.21.4

Citation

BibTeX

Sentence Transformers

@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",
}

MatryoshkaLoss

@misc{kusupati2024matryoshka,
    title={Matryoshka Representation Learning},
    author={Aditya Kusupati and Gantavya Bhatt and Aniket Rege and Matthew Wallingford and Aditya Sinha and Vivek Ramanujan and William Howard-Snyder and Kaifeng Chen and Sham Kakade and Prateek Jain and Ali Farhadi},
    year={2024},
    eprint={2205.13147},
    archivePrefix={arXiv},
    primaryClass={cs.LG}
}

MultipleNegativesRankingLoss

@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}
}
Downloads last month
4
Safetensors
Model size
0.6B params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for wilfoderek/bge-m3-es-legal-tmp-1

Base model

BAAI/bge-m3
Finetuned
(393)
this model

Dataset used to train wilfoderek/bge-m3-es-legal-tmp-1

Papers for wilfoderek/bge-m3-es-legal-tmp-1

Evaluation results