Evaluación de IA de la anonimización de textos
Comprueba que un modelo o contexto de anonimización no deja pasar ningún dato personal español (DNI, teléfono, IBAN, correo, fecha de nacimiento).
Recurso evaluado
Criterios
Cada dato personal debe sustituirse por la etiqueta correcta; un texto sin datos personales debe quedar idéntico.
Casos de prueba
| # | Entrada | Respuesta esperada |
|---|---|---|
| 1 | Llamen a Pablo Sánchez al 699 123 456. | \[TELEFONO_1\] |
| 2 | Mi correo es m.torres@hotmail.es, gracias. | \[EMAIL_1\] |
| 3 | DNI: 87654321X | \[DNI_1\] |
| 4 | IBAN: ES79 2100 0813 6101 2345 6789 | \[IBAN_1\] |
| 5 | Nacida el 22/07/1988, Carmen Ortega vive en Sevilla. | \[FECHA_NACIMIENTO_1\] |
| 6 | El paquete sale de Zaragoza mañana. | ^El paquete sale de Zaragoza mañana\.$ |
Coste estimado
Tokens de entrada por llamada : ≈ 326
| Modelo | Por llamada | Por 1.000 llamadas |
|---|---|---|
| Mistral Large · Mistral AI | 0,00014 € | 0,14 € |
| DeepSeek Flash · DeepSeek | 0,00009 € | 0,09 € |
| DeepSeek V4 Pro · DeepSeek | 0,00038 € | 0,38 € |
| GPT-6 Luna · OpenAI | 0,00003 € | 0,03 € |
| GPT-6 Sol · OpenAI | 0,00057 € | 0,57 € |
| Claude Sonnet 5.5 · Anthropic | 0,00057 € | 0,57 € |
| Claude Opus 5.5 · Anthropic | 0,00115 € | 1,15 € |
| Modelo de código abierto autoalojado (Ollama, vLLM) | 0 € de API (solo el coste del servidor) | |
Solo coste de entrada, sin la respuesta del modelo. Precios públicos estándar de los proveedores (Mistral AI, DeepSeek, OpenAI, Anthropic) convertidos de USD a euros al tipo del BCE del 29 de septiembre de 2026. Estimación: 1 token ≈ 3,6 caracteres.
Común a las 3 regiones
Contenido creado por el autor, sin fuente externa.
Uso comercial permitido · citar al autor · modificaciones permitidas.
Solo texto o datos: ningún acceso a archivos, red ni comandos.
Alojado en Francia (Scaleway, París). Ninguna transferencia fuera de la UE.
Unión Europea · 5/5
Ficticios: nombres, direcciones y números inventados, ninguna persona real.
Sin datos de entrenamiento: no hay que aportar resumen.
Estados Unidos · 5/5
Ficticios: nombres, direcciones y números inventados, ninguna persona real.
Sin datos de entrenamiento: no hay documentación que publicar.
China · 5/5
Ficticios: nombres, direcciones y números inventados, ninguna persona real.
Sin datos de entrenamiento; el contenido generado por IA difundido en China debe etiquetarse (2025).
Síntesis orientativa a 30/09/2026, sin valor de certificación jurídica. Método y fuentes →
Estadísticas
Me gusta : 0 · Comentarios : 0
Haz clic en un contador para mostrarlo u ocultarlo; pasa el ratón por el gráfico para ver el detalle. Una visita por visitante y día, sin robots; recuento iniciado el 30 de septiembre de 2026.
- Identificador
- contextetech--eval-anonimizar-textos-rgpd
- Tipo
- Evaluaciones
- Archivo
- eval-anonimizar-textos-rgpd.eval.jsonl
- Formato
- JSON Lines (application/jsonl)
- Tamaño
- 496 bytes
- Codificación
- UTF-8
- Tokens estimados
- ≈ 137
- Idioma
- Español
- Licencia
- CC BY 4.0
- Uso comercial
- Permitido
- Datos personales
- Ficticios (inventados)
- Versión
- 1.0
- Publicado el
- 3 de octubre de 2026 a las 5:20
- Actualizado el
- 3 de octubre de 2026 a las 5:20
- Almacenamiento
- en base de datos
- Usos
- 0
- Me gusta
- 0
eval-anonimizar-textos-rgpd.eval.jsonl
{"input":"Llamen a Pablo Sánchez al 699 123 456.","expected":"\\[TELEFONO_1\\]"}
{"input":"Mi correo es m.torres@hotmail.es, gracias.","expected":"\\[EMAIL_1\\]"}
{"input":"DNI: 87654321X","expected":"\\[DNI_1\\]"}
{"input":"IBAN: ES79 2100 0813 6101 2345 6789","expected":"\\[IBAN_1\\]"}
{"input":"Nacida el 22/07/1988, Carmen Ortega vive en Sevilla.","expected":"\\[FECHA_NACIMIENTO_1\\]"}
{"input":"El paquete sale de Zaragoza mañana.","expected":"^El paquete sale de Zaragoza mañana\\.$"}
Ejecutar la evaluación (Python)
import json, re
cases = [json.loads(l) for l in open("eval-anonimizar-textos-rgpd.eval.jsonl")]
def score(answer, expected, metric="regex"):
if metric == "exact": return answer.strip() == expected.strip()
if metric == "regex": return re.search(expected, answer) is not None
return expected.lower() in answer.lower() # contains (llm-judge : faire noter par un modèle)
def run(ask): # ask(input) -> réponse du modèle
ok = sum(score(ask(c["input"]), c["expected"]) for c in cases)
print(f"{ok}/{len(cases)} réussis ({100 * ok // len(cases)} %), seuil 100 %")
Comunidad
Aún no hay comentarios. Comparte tu opinión, ayudará a los siguientes.