Saltar al contenido
← Cuaderno

Seguridad & Privacidad

¿Cómo anonimizar datos personales antes de ChatGPT? 5 detectores gratuitos medidos con DNI, IBAN y nombres en español

Ningún detector local de datos personales bajó del 10 % de fugas solo. Reglas para DNI, IBAN y teléfonos más GLiNER dejaron escapar el 0,6 % de 1.878 datos en 500 documentos.

Fecha
7 nov 2026
Lectura
8 min
Resultado
Reglas + GLiNER: escapa el 0,6 % de los datos • mejor modelo solo: 10,6 % • Presidio por defecto: 32,6 % • GLiNER: 76,7 ms por documento en CPU

Si tu empresa tapa los datos personales antes de pegar un texto en ChatGPT, ninguna herramienta gratuita sirve sola: la mejor dejó escapar el 10,6 % de los datos. Combinar unas reglas para DNI, NIE, IBAN, correos y teléfonos con el modelo GLiNER bajó la fuga al 0,6 %: 12 de 1.878 datos en 500 documentos. Presidio, una de las librerías más citadas, dejó escapar el 32,6 % con su configuración por defecto para español. Medido el 7 de noviembre de 2026 en un portátil, sin enviar nada a internet.

La pregunta es de las que más hacen las pymes antes de usar IA con documentos de clientes: «¿puedo quitar los datos personales antes de mandarlo a ChatGPT?». Las respuestas que circulan nombran herramientas (Presidio, el filtro de privacidad que OpenAI publicó en abierto en 2026, GLiNER), pero no hay una medida en español con DNI, IBAN y teléfonos de España. Aquí está, con el código.

Definiciones

  • Dato personal: cualquier dato que identifica a una persona. Aquí medimos seis tipos: nombre, correo, teléfono, DNI o NIE, IBAN y dirección postal.
  • Detector: programa que encuentra esos datos en un texto para taparlos (por ejemplo, cambiar «Clara Pinto» por «[PERSONA]») antes de enviarlo a un modelo de IA.
  • Se escapa: un dato que queda visible del todo o en parte. Un IBAN con los cuatro últimos dígitos visibles o una dirección con la calle sin tapar cuentan como fuga.
  • Tapado de más: texto que no era dato personal y se tapó igualmente (por ejemplo, «Buenos días»). Estorba al modelo, pero no es un riesgo legal.
  • Reglas (expresiones regulares): patrones fijos que reconocen formatos, como «8 cifras y una letra». Sirven para DNI, IBAN o teléfonos; no para nombres ni direcciones.
  • Seudonimizar no es anonimizar: según el RGPD, un texto en el que se han cambiado los nombres por marcas sigue siendo dato personal si se puede volver a identificar a la persona. Tapar reduce el riesgo; no saca el tratamiento del RGPD.

Hipótesis

  1. Un modelo de IA local detecta más datos personales que unas reglas.
  2. Presidio, la opción más recomendada, funciona bien en español tal cual se instala.
  3. Reglas para los identificadores más un modelo para nombres y direcciones dejan escapar menos del 1 %.

Montaje

  • Documentos: 500 textos de pyme generados por programa, en cinco tipos: correo a una gestoría, ticket de una tienda online, nota de RRHH, ficha de una clínica y mensaje de WhatsApp (en minúsculas y sin tildes, como se escriben). Contienen 1.878 datos personales con su posición exacta: 546 nombres, 303 teléfonos, 301 direcciones, 283 DNI o NIE, 266 correos y 179 IBAN.
  • Formatos reales: DNI seguido, con guion o con puntos; NIE; IBAN con y sin espacios; móviles y fijos con espacios, guiones, seguidos o con +34.
  • Datos inventados: nombres, correos y direcciones salen de la librería Faker; los DNI, NIE e IBAN son aleatorios con su letra o dígitos de control válidos. No hay datos de personas reales.
  • Detectores, todos gratuitos y en local:
    • Reglas: expresiones regulares propias para correo, teléfono, DNI/NIE e IBAN.
    • Presidio por defecto: Microsoft Presidio 2.2.366 con el modelo de español de spaCy (es_core_news_lg).
    • Presidio con teléfonos de España: lo mismo, con el reconocedor de teléfonos limitado a la región ES (un cambio de una línea).
    • GLiNER multi PII v1: modelo pequeño de detección de entidades, con seis etiquetas en inglés (persona, correo, teléfono, dirección, documento de identidad, IBAN).
    • OpenAI Privacy Filter: el modelo de 1.500 millones de parámetros que OpenAI publicó con licencia Apache 2.0, ejecutado con transformers 5.22.2.
    • Además, la unión de las reglas con cada modelo: se tapa lo que marque cualquiera de los dos.
  • Tiempo: cinco pasadas completas por los 500 documentos, uno cada vez, en CPU. Mediana, mínimo y máximo.
  • Equipo: portátil Apple M1 Max con 64 GB, macOS 26.6.2, Python 3.12.13, conectado a la corriente.

Resultados

Qué se escapa con cada detector

Detector Datos que se escapan Documentos con alguna fuga Texto tapado de más Tiempo por documento
Reglas 46,6 % 100,0 % 0,0 % 0,02 ms
Presidio por defecto 32,6 % 84,2 % 7,3 % 4,9 ms
Presidio con teléfonos de España 23,6 % 72,0 % 7,3 % 4,3 ms
GLiNER multi PII 11,7 % 40,8 % 0,4 % 76,7 ms
OpenAI Privacy Filter 10,6 % 37,0 % 1,4 % 309,9 ms
Reglas + Presidio con teléfonos de España 18,3 % 65,6 % 7,3 % —
Reglas + OpenAI Privacy Filter 9,9 % 35,6 % 1,4 % —
Reglas + GLiNER 0,6 % 2,4 % 0,4 % —

Las combinaciones no se cronometraron aparte: tardan lo que el modelo, porque las reglas suman 0,02 ms. La dispersión del tiempo es baja: GLiNER fue de 76,1 a 79,4 ms entre las cinco pasadas y OpenAI Privacy Filter, de 309,4 a 310,7 ms. Las detecciones fueron idénticas en las cinco.

Qué tipo de dato se escapa (porcentaje de cada tipo)

Detector Nombre Correo Teléfono DNI/NIE IBAN Dirección
Reglas 100,0 % 0,0 % 9,2 % 0,0 % 0,0 % 100,0 %
Presidio por defecto 7,7 % 0,0 % 72,6 % 17,3 % 0,0 % 100,0 %
Presidio con teléfonos de España 7,7 % 0,0 % 17,2 % 17,3 % 0,0 % 100,0 %
GLiNER multi PII 0,9 % 0,0 % 0,7 % 21,9 % 80,4 % 2,3 %
OpenAI Privacy Filter 21,2 % 0,0 % 0,0 % 4,6 % 0,0 % 23,3 %
Reglas + GLiNER 0,9 % 0,0 % 0,0 % 0,0 % 0,0 % 2,3 %
  • Cada modelo falla en algo distinto. GLiNER encuentra casi todos los nombres y direcciones, pero deja pasar 144 de los 179 IBAN. OpenAI Privacy Filter tapa todos los IBAN y teléfonos, pero se le escapa el 21,2 % de los nombres; en los mensajes escritos en minúsculas, el 66,0 %. También deja pasar el 13,2 % de los DNI escritos con puntos.
  • Presidio no tapa ninguna dirección entera. Marca la ciudad o parte de la calle y deja el resto: de media tapa el 73,0 % de cada dirección. Con su configuración por defecto, además, se le escapa el 72,6 % de los teléfonos; limitarlo a teléfonos de España lo baja al 17,2 %. Y tapa de más palabras como «Buenos», «Domicilio» o «Teléfono»: el 7,3 % del texto que no era dato personal.
  • Las reglas son perfectas para los formatos que conocen (DNI, NIE, IBAN y correos, sin fallos) y ciegas para nombres y direcciones. Las nuestras fallaron con algunos teléfonos fijos con espacios: el 9,2 % de los teléfonos.
  • Lo que se escapa con reglas + GLiNER: 5 nombres y 7 direcciones, en 12 de los 500 documentos.

Carga y volumen

Para 500 documentos, GLiNER tardó 38,4 s y OpenAI Privacy Filter, 154,9 s, en un portátil y sin tarjeta gráfica. Cargar GLiNER en memoria, con el modelo ya descargado, llevó 8,5 s.

Qué significa para una empresa

  • Hipótesis 1: se cumple. Los dos modelos dejan escapar entre el 10,6 % y el 11,7 % de los datos, frente al 46,6 % de las reglas. Pero eso deja algún dato visible en casi cuatro de cada diez documentos (del 37,0 % al 40,8 %), y en documentos reales sería peor.
  • Hipótesis 2: no se cumple. Presidio tal cual deja escapar el 32,6 % de los datos en español. Se puede ajustar (aquí bajó al 23,6 % con un cambio), pero con las direcciones no basta.
  • Hipótesis 3: se cumple con GLiNER (0,6 %) y no con OpenAI Privacy Filter (9,9 %), porque las reglas tapan justo lo que falla en GLiNER (IBAN y DNI) y no lo que falla en el filtro de OpenAI (nombres y direcciones).

Una gestoría que pega en ChatGPT 300 correos de clientes al mes para resumirlos o clasificarlos puede tapar los datos antes en su propio ordenador, gratis y en menos de un segundo por documento. Pero ni la mejor combinación llega a cero: si el contrato o la política de la empresa prohíbe que salga un solo dato, hace falta revisión humana o una cuenta de empresa con un contrato de encargado del tratamiento.

Cuándo usar cada opción

  • Solo reglas: si lo único que debe desaparecer son DNI, IBAN, correos y teléfonos (por ejemplo, extractos o listados). Rápidas y sin fallos con DNI, IBAN y correos; con los teléfonos hay que probar todos los formatos que usan tus clientes. Dejan todos los nombres.
  • Reglas + GLiNER: la mejor opción medida para textos libres de clientes (correos, tickets, mensajes). Es la que recomendamos probar primero.
  • OpenAI Privacy Filter: buena con números de cuenta y teléfonos, floja con nombres en español, sobre todo en minúsculas. Cuatro veces más lento que GLiNER en este equipo.
  • Presidio: útil como marco para montar un sistema propio, pero no como solución lista para español. Si se usa, hay que ajustar los teléfonos y añadir un detector de direcciones.
  • Cualquiera de ellos: pruébalo con 50 documentos tuyos antes de fiarte. Cambia mucho según cómo escriban tus clientes.

Limitaciones

  • Documentos sintéticos. Están hechos con plantillas, así que son más regulares que los reales: sin faltas de ortografía, sin datos partidos en dos líneas, sin tablas ni PDF escaneados. En documentos reales, todas las cifras de fuga deberían ser peores.
  • Seis tipos de dato. No se midieron fechas de nacimiento, matrículas, números de la Seguridad Social, datos de salud ni datos que identifican por contexto («la dueña de la panadería de la plaza»). Ninguno de estos detectores resuelve ese último caso.
  • Configuraciones sencillas. GLiNER se usó con umbral 0,5 y etiquetas en inglés; otras etiquetas (por ejemplo, «número de cuenta bancaria» en vez de «IBAN») podrían cambiar mucho su resultado con los IBAN. OpenAI Privacy Filter se decodificó token a token, como en el ejemplo de su ficha, sin el decodificador Viterbi de su paquete oficial. Presidio se probó con el modelo grande de spaCy, que avisa de que se entrenó con una versión anterior.
  • Criterio estricto de fuga: basta una letra o cifra del dato sin tapar. Con un criterio más laxo, Presidio saldría mejor en direcciones.
  • Un solo portátil Apple Silicon, con otras apps abiertas y conectado a la corriente. Los tiempos sirven como orden de magnitud. Todo el cómputo cupo en menos de 30 minutos.
  • No es asesoramiento legal. Tapar datos es una medida de minimización; no sustituye la base jurídica ni el contrato con el proveedor de IA.

Cómo repetirlo

Código, generador de documentos con semilla fija, revisiones de los modelos y resultados de cada dato (sin el texto): yeswelab-laboratorio/anonimizar-datos-personales-chatgpt-rgpd en GitHub. Se ejecuta sin cuentas ni claves; descarga de Hugging Face los tres modelos la primera vez. Para probarlo con tus documentos, cambia corpus.py por tus textos etiquetados.

Relacionado

¿Quieres usar IA con documentos de tus clientes y no sabes cuántos datos se te escaparían? Encárganos el experimento con 50 de tus documentos y te decimos qué detector funciona con ellos y qué riesgo queda.

#Presidio 2.2.366#spaCy es_core_news_lg#GLiNER multi PII v1#OpenAI Privacy Filter#transformers 5.22.2#PyTorch 2.15.0