MrBERT Legal Anonymization — Spanish NER
Fine-tune de BSC-LT/MrBERT-legal (ModernBERT, 307M params) para anonimización automática de textos legales mediante reconocimiento de entidades nombradas (NER).
El modelo identifica y clasifica entidades sensibles en documentos jurídicos: personas, direcciones, fechas, organizaciones, cantidades y tiempos.
Entidades reconocidas
| Etiqueta | Descripción | Ejemplo |
|---|---|---|
PERSON |
Nombres de personas físicas | Juan García López |
ADDRESS |
Direcciones y ubicaciones | Calle Mayor 15, Madrid |
DATE |
Fechas | 14 de marzo de 2024 |
ORGANISATION |
Organizaciones e instituciones | Tribunal Superior de Justicia |
AMOUNT |
Cantidades monetarias o numéricas | 15.000 euros |
TIME |
Referencias temporales | a las 10:30 horas |
Esquema de etiquetas IOB: O, B-PERSON, I-PERSON, B-ADDRESS, I-ADDRESS, B-DATE, I-DATE, B-ORGANISATION, I-ORGANISATION, B-AMOUNT, I-AMOUNT, B-TIME, I-TIME (13 etiquetas).
Uso
from transformers import pipeline
ner = pipeline(
"token-classification",
model="pauvanbr/mrbert-legal-anonymization-es",
aggregation_strategy="simple",
)
text = (
"El señor Juan García López, residente en Calle Mayor 15, Madrid, "
"presentó la demanda el 14 de marzo de 2024 contra la empresa "
"Construcciones Pérez S.L. por un importe de 25.000 euros."
)
entities = ner(text)
for ent in entities:
print(f" {ent['entity_group']:15s} {ent['score']:.3f} → {ent['word']}")
Anonimización de texto
def anonymize(text, ner_pipeline):
"""Reemplaza entidades sensibles por marcadores [ENTIDAD]."""
entities = ner_pipeline(text)
# Procesar de derecha a izquierda para mantener índices
for ent in sorted(entities, key=lambda e: e["start"], reverse=True):
label = ent["entity_group"]
text = text[:ent["start"]] + f"[{label}]" + text[ent["end"]:]
return text
print(anonymize(text, ner))
# → "El señor [PERSON], residente en [ADDRESS], presentó la demanda
# el [DATE] contra la empresa [ORGANISATION] por un importe de [AMOUNT]."
Pipeline de anotación y evaluación
Los scripts de carga de datos, preanotación, y evaluación están en el Space de anotación:
👉 pauvanbr/ner-anotation — scripts/
Incluye:
- Carga de leyes desde legalize-es con chunking por artículos
- Preanotación con este modelo + langextract (Gemini)
- Evaluación multi-modelo contra anotaciones humanas (exact + partial match)
Guía completa: PIPELINE.md
Resultados de evaluación
Mejor checkpoint (evaluación en validación — todas las lenguas)
⚠️ Estas métricas son sobre el dataset de entrenamiento (MAPA). Para una evaluación independiente, usa el pipeline de anotación con datos de legalize-es.
| Métrica | Valor |
|---|---|
| F1 | 0.8122 |
| Precision | 0.7767 |
| Recall | 0.8511 |
| Accuracy | 0.9918 |
| Loss | 0.0357 |
F1 por entidad (validación)
| Entidad | F1 |
|---|---|
| DATE | 0.9744 |
| ADDRESS | 0.8125 |
| PERSON | 0.7838 |
| ORGANISATION | 0.0 |
| AMOUNT | 0.0 |
| TIME | — |
Nota: Las puntuaciones de 0.0 en ORGANISATION y AMOUNT en el mejor checkpoint se deben a la selección por F1 global — en epochs posteriores estos valores mejoraron significativamente (AMOUNT alcanzó 0.83, ORGANISATION 0.53). El best model fue epoch 1 por F1 global. Consulta la tabla de entrenamiento completa abajo.
Dataset: MAPA
Entrenado con el dataset Joelito/mapa — Multilingual Anonymisation for Public Administrations.
- Fuente: Documentos de EUR-Lex (sentencias y disposiciones legales de la UE)
- Idiomas: 21 lenguas oficiales de la UE (bg, cs, da, de, el, en, es, et, fi, fr, ga, hu, it, lt, lv, mt, nl, pt, ro, sk, sv)
- Anotación: Esquema de etiquetado del proyecto MAPA con dos niveles (coarse/fine-grained)
- Licencia: CC BY 4.0
Estrategia de entrenamiento: transferencia cross-lingüe
Se utilizaron todas las lenguas del dataset para entrenamiento (~28K+ muestras), aprovechando la naturaleza multilingüe de MrBERT-legal para maximizar los datos de entrenamiento. La evaluación final se realiza sobre el subconjunto en español.
| Split | Muestras |
|---|---|
| Train (todas las lenguas) | ~27.8K |
| Validation (todas las lenguas) | ~3.4K |
| Test — español | ~155 |
Modelo base: MrBERT-legal
BSC-LT/MrBERT-legal es un modelo ModernBERT de 307M parámetros pre-entrenado por el Barcelona Supercomputing Center (BSC) específicamente para el dominio legal en español e inglés. Soporta secuencias de hasta 8192 tokens.
- Arquitectura: ModernBERT (22 capas, 768 hidden, 12 attention heads)
- Atención: Combinación de full attention y sliding attention (ventana local de 128)
- Referencia: arXiv:2602.21379
Procedimiento de entrenamiento
Hiperparámetros
| Parámetro | Valor |
|---|---|
| Learning rate | 3e-05 |
| LR scheduler | Cosine con warmup 10% |
| Batch size (train) | 16 |
| Batch size (eval) | 32 |
| Épocas | 10 (early stopping patience=3) |
| Max sequence length | 512 |
| Optimizer | AdamW (fused) |
| Weight decay | 0.01 |
| Precisión | bf16 |
| Gradient checkpointing | ✓ |
| Seed | 42 |
Progresión del entrenamiento
| Training Loss | Epoch | Step | Val Loss | Precision | Recall | F1 | Accuracy | F1 Person | F1 Address | F1 Date | F1 Organisation | F1 Amount |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0.0437 | 1.0 | 1739 | 0.0854 | 0.5071 | 0.5717 | 0.5375 | 0.9796 | 0.3997 | 0.2391 | 0.8531 | 0.2164 | 0.3944 |
| 0.0238 | 2.0 | 3478 | 0.0477 | 0.6579 | 0.6754 | 0.6665 | 0.9883 | 0.5831 | 0.4440 | 0.9214 | 0.5345 | 0.0711 |
| 0.0158 | 3.0 | 5217 | 0.0549 | 0.6709 | 0.7076 | 0.6888 | 0.9875 | 0.5928 | 0.3881 | 0.9175 | 0.5187 | 0.7373 |
| 0.0158 | 4.0 | 6956 | 0.0579 | 0.6801 | 0.6936 | 0.6868 | 0.9883 | 0.5846 | 0.3805 | 0.9329 | 0.4802 | 0.8257 |
| 0.0045 | 5.0 | 8695 | 0.0639 | 0.6964 | 0.7127 | 0.7045 | 0.9886 | 0.5771 | 0.4435 | 0.9398 | 0.5255 | 0.7650 |
| 0.0046 | 6.0 | 10434 | 0.0709 | 0.6825 | 0.7122 | 0.6970 | 0.9882 | 0.6281 | 0.4962 | 0.9367 | 0.4399 | 0.8056 |
| 0.0014 | 7.0 | 12173 | 0.0725 | 0.7019 | 0.7283 | 0.7148 | 0.9891 | 0.6494 | 0.4144 | 0.9435 | 0.5271 | 0.7963 |
| 0.0017 | 8.0 | 13912 | 0.0823 | 0.7064 | 0.7190 | 0.7127 | 0.9888 | 0.6395 | 0.4508 | 0.9367 | 0.5112 | 0.8208 |
| 0.0008 | 9.0 | 15651 | 0.0872 | 0.7057 | 0.7224 | 0.7139 | 0.9887 | 0.6380 | 0.4577 | 0.9461 | 0.4992 | 0.8302 |
| 0.0008 | 10.0 | 17390 | 0.0876 | 0.7052 | 0.7237 | 0.7143 | 0.9888 | 0.6409 | 0.4499 | 0.9456 | 0.5035 | 0.8302 |
Limitaciones
- Dominio: Entrenado exclusivamente con documentos legales de EUR-Lex; el rendimiento puede degradarse en otros tipos de textos legales (contratos, escrituras notariales, etc.).
- Entidades infrecuentes: ORGANISATION y AMOUNT tienen scores más bajos debido a su baja frecuencia en el dataset MAPA.
- Idioma: Aunque usa transferencia cross-lingüe, el rendimiento es óptimo en textos legales en español.
Cita del dataset
@article{DeGibertBonet2022,
author = {{de Gibert Bonet}, Ona and {García Pablos}, Aitor and Cuadros, Montse and Melero, Maite},
title = {{Spanish Datasets for Sensitive Entity Detection in the Legal Domain}},
journal = {Proceedings of the Language Resources and Evaluation Conference},
pages = {3751--3760},
year = {2022},
url = {https://aclanthology.org/2022.lrec-1.400}
}
Versiones de frameworks
- Transformers 5.6.1
- PyTorch 2.11.0+cu130
- Datasets 4.8.4
- Tokenizers 0.22.2
- Downloads last month
- 197
Model tree for pauvanbr/mrbert-legal-anonymization-es
Paper for pauvanbr/mrbert-legal-anonymization-es
Evaluation results
- F1 on MAPA (Multilingual Anonymisation for Public Administrations)validation set self-reported0.812
- Precision on MAPA (Multilingual Anonymisation for Public Administrations)validation set self-reported0.777
- Recall on MAPA (Multilingual Anonymisation for Public Administrations)validation set self-reported0.851
- Accuracy on MAPA (Multilingual Anonymisation for Public Administrations)validation set self-reported0.992