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 Type: Sentence Transformer
- Base model: nomic-ai/modernbert-embed-base
- Maximum Sequence Length: 8192 tokens
- Output Dimensionality: 768 dimensions
- Similarity Function: Cosine Similarity
- Training Dataset:
- Language: es
- License: apache-2.0
Model Sources
- Documentation: Sentence Transformers Documentation
- Repository: Sentence Transformers on GitHub
- Hugging Face: Sentence Transformers on Hugging Face
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
- Dataset:
dim_768 - Evaluated with
InformationRetrievalEvaluatorwith these parameters:{ "truncate_dim": 768 }
| 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
- Dataset:
dim_512 - Evaluated with
InformationRetrievalEvaluatorwith these parameters:{ "truncate_dim": 512 }
| 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:
contextandquestion - 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:
MatryoshkaLosswith 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:
contextandquestion - 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:
MatryoshkaLosswith these parameters:{ "loss": "MultipleNegativesRankingLoss", "matryoshka_dims": [ 768, 512 ], "matryoshka_weights": [ 1, 1 ], "n_dims_per_step": -1 }
Training Hyperparameters
Non-Default Hyperparameters
eval_strategy: epochper_device_train_batch_size: 16per_device_eval_batch_size: 16gradient_accumulation_steps: 16learning_rate: 2e-05num_train_epochs: 6lr_scheduler_type: cosinewarmup_ratio: 0.1bf16: Truetf32: Trueload_best_model_at_end: Trueoptim: adamw_torch_fusedbatch_sampler: no_duplicates
All Hyperparameters
Click to expand
overwrite_output_dir: Falsedo_predict: Falseeval_strategy: epochprediction_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: 16eval_accumulation_steps: Nonetorch_empty_cache_steps: Nonelearning_rate: 2e-05weight_decay: 0.0adam_beta1: 0.9adam_beta2: 0.999adam_epsilon: 1e-08max_grad_norm: 1.0num_train_epochs: 6max_steps: -1lr_scheduler_type: cosinelr_scheduler_kwargs: {}warmup_ratio: 0.1warmup_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: Truefp16: Falsefp16_opt_level: O1half_precision_backend: autobf16_full_eval: Falsefp16_full_eval: Falsetf32: Truelocal_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: Trueignore_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: no_duplicatesmulti_dataset_batch_sampler: proportionalrouter_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
Model tree for wilfoderek/modernBert-es-legal-tmp-1
Base model
answerdotai/ModernBERT-base
Finetuned
nomic-ai/modernbert-embed-base
Dataset used to train wilfoderek/modernBert-es-legal-tmp-1
Evaluation results
- Cosine Accuracy@1 on dim 768self-reported0.485
- Cosine Accuracy@3 on dim 768self-reported0.720
- Cosine Accuracy@5 on dim 768self-reported0.759
- Cosine Accuracy@10 on dim 768self-reported0.823
- Cosine Precision@1 on dim 768self-reported0.485
- Cosine Precision@3 on dim 768self-reported0.240
- Cosine Precision@5 on dim 768self-reported0.152
- Cosine Precision@10 on dim 768self-reported0.082
- Cosine Recall@1 on dim 768self-reported0.485
- Cosine Recall@3 on dim 768self-reported0.720