ModernBert Legal Spanish

This is a sentence-transformers model finetuned from nomic-ai/modernbert-embed-base on the justicio-rag-embedding-qa-tmp-2 dataset. 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.

Model Details

Model Description

Model Sources

Full Model Architecture

SentenceTransformer(
  (0): Transformer({'max_seq_length': 8192, 'do_lower_case': False, 'architecture': 'ModernBertModel'})
  (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()
)

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/modernBert-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, 768] [3, 768]

# Get the similarity scores for the embeddings
similarities = model.similarity(query_embeddings, document_embeddings)
print(similarities)
# tensor([[ 0.7326,  0.1281, -0.0159]])

Evaluation

Metrics

Information Retrieval

Metric Value
cosine_accuracy@1 0.4848
cosine_accuracy@3 0.7195
cosine_accuracy@5 0.7591
cosine_accuracy@10 0.8232
cosine_precision@1 0.4848
cosine_precision@3 0.2398
cosine_precision@5 0.1518
cosine_precision@10 0.0823
cosine_recall@1 0.4848
cosine_recall@3 0.7195
cosine_recall@5 0.7591
cosine_recall@10 0.8232
cosine_ndcg@10 0.6611
cosine_mrr@10 0.6085
cosine_map@100 0.614

Information Retrieval

Metric Value
cosine_accuracy@1 0.4878
cosine_accuracy@3 0.7073
cosine_accuracy@5 0.7622
cosine_accuracy@10 0.8049
cosine_precision@1 0.4878
cosine_precision@3 0.2358
cosine_precision@5 0.1524
cosine_precision@10 0.0805
cosine_recall@1 0.4878
cosine_recall@3 0.7073
cosine_recall@5 0.7622
cosine_recall@10 0.8049
cosine_ndcg@10 0.6557
cosine_mrr@10 0.6069
cosine_map@100 0.6136

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: 32 tokens
    • mean: 86.95 tokens
    • max: 308 tokens
    • min: 10 tokens
    • mean: 27.44 tokens
    • max: 64 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": [
            768,
            512
        ],
        "matryoshka_weights": [
            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: 32 tokens
    • mean: 88.58 tokens
    • max: 266 tokens
    • min: 11 tokens
    • mean: 26.34 tokens
    • max: 65 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": [
            768,
            512
        ],
        "matryoshka_weights": [
            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_768_cosine_ndcg@10 dim_512_cosine_ndcg@10
0.4324 5 1.0504 - - -
0.8649 10 0.5793 - - -
1.0 12 - 0.4410 0.6330 0.6259
1.2595 15 0.3704 - - -
1.6919 20 0.2609 - - -
2.0 24 - 0.3409 0.6538 0.6529
2.0865 25 0.2393 - - -
2.5189 30 0.1617 - - -
2.9514 35 0.1318 - - -
3.0 36 - 0.3242 0.6574 0.6551
3.3459 40 0.1007 - - -
3.7784 45 0.1089 - - -
4.0 48 - 0.3077 0.6609 0.6566
4.1730 50 0.0912 - - -
4.6054 55 0.0636 - - -
5.0 60 0.0768 0.3075 0.659 0.6567
5.4324 65 0.0831 - - -
5.8649 70 0.0797 - - -
6.0 72 - 0.3064 0.6611 0.6557
  • 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
7
Safetensors
Model size
0.1B params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for wilfoderek/modernBert-es-legal-tmp-1

Finetuned
(90)
this model

Dataset used to train wilfoderek/modernBert-es-legal-tmp-1

Evaluation results