Guía de NER 2026: GLiNER, spaCy, Transformers y LLMs

Traducción automática Este artículo se tradujo automáticamente a partir de la versión original en inglés.

El reconocimiento de entidades con nombre (NER) abarca ahora encoders compactos, modelos de vocabulario abierto y extracción basada en LLMs. En la evaluación CrossNER citada, un modelo GLiNER de 300M de parámetros supera el F1 zero-shot publicado por UniNER-13B. Un bi-encoder más reciente registra hasta 130 veces más throughput que el gliner_small-v2.5 uni-encoder comparable con 1.024 tipos de entidad cuando las etiquetas se han precomputado. El artículo midió este resultado en una única H100, con batch size 1 y entradas de 64, 256 y 512 tokens. Estos resultados motivan nuevos experimentos, pero no establecen un ranking universal para producción.

El repositorio complementario ofrece ejemplos ejecutables de GLiNER, exportación a ONNX, etiquetas de entrenamiento generadas por LLM y extracción estructurada. En cargas dominadas por spans explícitos, los encoders compactos suelen ser la opción más rápida y económica. Los LLMs siguen siendo útiles para generar datos de entrenamiento y resolver casos que requieren inferencia o normalización.

Esta guía está dirigida a ingenieros que eligen y evalúan arquitecturas de NER para pipelines de RAG, agentes, documentos o privacidad. Al terminar tendrás un itinerario para seleccionar modelos, un plan de evaluación acotado y un diseño de tres niveles para combinar encoders con extracción mediante LLM.

Repositorio complementario: ner-field-guide, con demos ejecutables de GLiNER, exportación a ONNX, el pipeline de LLM-as-teacher y extracción estructurada con Instructor.

En resumen: Empieza con GLiNER cuando necesites extracción de spans con vocabulario abierto y despliegue en CPU. Usa un bi-encoder de GLiNER como primera comparación cuando un inventario amplio y reutilizable de tipos haga costosa la codificación conjunta repetida de etiquetas. Para tareas específicas de dominio, prueba el pipeline de LLM-as-teacher: genera etiquetas, revisa una muestra, haz fine-tuning de un encoder y evalúalo con un conjunto etiquetado por personas. Deriva las entidades implícitas, el mapeo ontológico y otros casos con mucho razonamiento a un LLM con una API de esquemas nativa, Instructor o un decoder local con constrained decoding. La arquitectura de tres niveles combina estas vías sin asumir una distribución fija del tráfico.

Para una comparación breve de modelos, consulta Mejores modelos de NER en 2026.

¿Qué es el reconocimiento de entidades con nombre?

El reconocimiento de entidades con nombre identifica spans en el texto y les asigna tipos como persona, organización, fecha, producto o etiquetas específicas del dominio. NER identifica la mención. Entity linking es el paso independiente que resuelve una mención y la vincula a un registro canónico o a un concepto ontológico.

Carga de trabajoPrimer modelo que probarEscalar cuando
Etiquetas estables y muchos datos de entrenamientospaCy o un encoder con fine-tuningEl conjunto de etiquetas cambia o el recall se estanca en tipos poco frecuentes.
Etiquetas cambiantes; inventario pequeño de tiposGLiNER cross-encoderEl inventario crece o las etiquetas se reutilizan en muchos documentos.
Inventario amplio y reutilizable de tiposGLiNER bi-encoderEl conjunto del dominio muestra una regresión de calidad o calibración.
Varias tareas de extracción en un pipeline de textoGLiNER2La calidad conjunta no alcanza el objetivo de cada tarea.
Hechos implícitos o razonamiento sobre esquemasExtracción estructurada con LLMLa latencia, el coste o las afirmaciones no respaldadas superan el presupuesto del producto.

Dónde utilizan NER los sistemas modernos

NER sigue identificando spans de texto y asignándoles etiquetas. Lo que ha cambiado es su posición dentro del sistema. Ahora proporciona filtros para RAG, argumentos estructurados para herramientas de agentes y campos para pipelines de procesamiento documental. Estos usos hacen que la latencia, el coste y la flexibilidad del esquema sean tan importantes como la precisión en los benchmarks.

RAG: mejor retrieval mediante extracción de entidades

La búsqueda por similitud tiene dificultades cuando una pregunta contiene entidades exactas. Ante «¿qué dijo Anthropic sobre la seguridad de los modelos en el cuarto trimestre de 2024?», el sistema debería extraer «Anthropic» y «Q4 2024» como filtros de metadatos, en lugar de depender únicamente de los embeddings.

Durante la indexación, extraes entidades de cada chunk y las almacenas como metadatos: {"organizations": ["Anthropic"], "dates": ["Q4 2024"], ...}. Esto permite filtrar por entidad antes de ejecutar la búsqueda vectorial. Knowledge graph RAG (GraphRAG, grafos de propiedades de LlamaIndex) va más allá: NER más extracción de relaciones construyen un grafo capaz de responder preguntas multi-hop que los embeddings planos no pueden resolver.

En tiempo de consulta, las entidades extraídas de la pregunta del usuario determinan el routing. Una pregunta que menciona el nombre de una empresa se dirige a un índice financiero; una que menciona nombres de fármacos, a una base de conocimiento clínica. GLiNER resulta útil cuando el esquema o los tipos de entidad cambian en tiempo de consulta. Los nombres desconocidos de empresas o fármacos, por sí solos, no requieren etiquetas de vocabulario abierto; un modelo de etiquetas cerradas también puede reconocer menciones nuevas de tipos conocidos.

Agentes AI: convertir texto en hechos estructurados

Los agentes reciben texto no estructurado, como páginas web, respuestas de API y mensajes de usuario. NER convierte ese texto en hechos estructurados sobre los que el agente puede razonar, almacenar información o llamar a herramientas.

Para el routing de herramientas, una petición como «programa una reunión con Sarah Chen de Accenture el jueves a las 14:00» requiere PERSON: Sarah Chen, ORGANIZATION: Accenture y DATETIME: Thursday 2pm antes de que el agente llame a la API del calendario. Un encoder local evita el round trip a la API y suele ser considerablemente más rápido, pero la latencia depende del modelo, el runtime, el hardware, el batch size y el número de etiquetas. Mide ambas vías con la carga de trabajo del calendario en lugar de asumir una diferencia fija en milisegundos.

NER también permite hacer tracking de entidades entre conversaciones. Los sistemas de memoria de los agentes deben saber que «Sarah» en el turno 3 y «Sra. Chen» en el turno 12 son la misma persona. NER identifica los spans; entity linking los resuelve al mismo ID.

En ambos casos, la restricción es la latencia. Si cada uno de diez pasos secuenciales hace una llamada de NER de 200 ms, esas llamadas añaden 2 segundos de retraso percibido. Una sola llamada añade 200 ms. Los modelos encoder suelen encajar mejor el procesamiento de entidades en los agent loops que la extracción basada en LLM.

Inteligencia documental: de imágenes a datos estructurados

OCR convierte las imágenes en texto. NER convierte ese texto en campos estructurados.

Un pipeline estándar utiliza primero OCR, como Tesseract, Azure Document Intelligence o AWS Textract, para producir texto y bounding boxes. Después, NER extrae campos como invoice_number, vendor_name, line_items, total y due_date. La misma secuencia se aplica a contratos, historiales médicos y documentos regulatorios.

Los pipelines documentales modernos pueden combinar comprensión del layout, extracción de entidades y extracción de relaciones. OCR o un modelo documental con conocimiento del layout siguen proporcionando texto, orden de lectura, tablas y bounding boxes. GLiNER 2 puede combinar después la extracción de entidades, relaciones, clasificación y estructuras jerárquicas sobre ese texto en un único paso guiado por un esquema.

El coste determina la mayoría de estos pipelines. Calcula el precio con el volumen mensual real de documentos, incluidos los reintentos y la revisión. Un encoder compacto puede ejecutarse en CPU, mientras que un LLM basado en API añade coste de inferencia por documento y latencia. Una prueba práctica consiste en etiquetar con un LLM un conjunto representativo de facturas. Haz fine-tuning de GLiNER con los registros revisados y compara ambas vías en F1 por campo, latencia y coste total.

Detección de PII y guardrails para LLMs

Los principios de protección de datos y las obligaciones de seguridad del RGPD (artículos 5, 25 y 32), la Security Rule tecnológicamente neutral de HIPAA (guía de HHS) y la CCPA de California, modificada por la CPRA, imponen derechos y salvaguardas basadas en el riesgo diferentes. Las disposiciones citadas no prescriben NER ni una arquitectura concreta de escaneo antes del modelo. Esto no es asesoramiento jurídico; pide a un abogado que revise los requisitos aplicables a tus datos y jurisdicción. NER puede contribuir al inventario, la minimización o la desidentificación de datos, pero es solo un control cuyo recall debe validarse para los datos y la jurisdicción pertinentes.

NER aborda este problema directamente. Los modelos de desidentificación encuentran spans como PERSON, SSN, PHONE, EMAIL y ADDRESS, y los redactan o sustituyen por equivalentes sintéticos. Microsoft Presidio combina recognizers con operadores de anonimización, y sus ejemplos incluyen GLiNER como recognizer. GLiNER2-PII, con 0,3B de parámetros, es otra opción: su artículo cubre 42 tipos de PII con resolución a nivel de span de caracteres. Ninguno de los dos constituye evidencia de cumplimiento. Valida el recall por formato de datos, jurisdicción, idioma y clase de PII antes de utilizar cualquier detector como control.

En la comparación realizada por un proveedor de John Snow Labs sobre 48 documentos open source anotados por expertos y seis clases de PHI, su evaluación a nivel de token registró un 96 % de F1. Registró un 91 % para Azure, un 83 % para AWS y un 79 % para GPT-4o. El estudio mapeó las etiquetas de los proveedores a su esquema de referencia y excluyó las predicciones no asignables. Trátalo como una comparación limitada entre proveedores, no como evidencia de cumplimiento. Otro informe de despliegue describe que Providence procesa más de 100.000 notas clínicas al día.

Para los guardrails de LLM, NER funciona como una capa de pre-screening: analiza la entrada del usuario en busca de PII antes de enviarla a una API externa y después la bloquea o anonimiza. Puede ser más rápido o sencillo que pedir al LLM que se automodere. Trátalo como una hipótesis de despliegue: mide ambas vías con tu modelo, hardware, mezcla de entradas y objetivo de recall. Los falsos negativos siguen siendo posibles, así que añade otro control para la exposición de PII que tu sistema no pueda aceptar. GLiNER resulta especialmente útil porque las categorías de PII varían según la jurisdicción. Puedes añadir nuevos tipos de entidad, como «información genética», bajo una nueva regulación sin volver a entrenar.

GLiNER: matching entre spans y etiquetas para NER de vocabulario abierto

GLiNER (NAACL 2024, Zaratiana et al.) hizo que el NER basado en encoders fuera competitivo con los LLMs a una fracción del coste. En lugar de tratar NER como sequence labeling o generación de texto, GLiNER lo trata como un problema de matching. Asigna una puntuación a cada span de texto candidato —cada secuencia contigua de palabras, como «Bill Gates» o «Microsoft»— frente a cada etiqueta de tipo de entidad y conserva las parejas con puntuación alta.

El modelo recibe las etiquetas de tipo de entidad y el texto de entrada como una única secuencia: [ENT] person [ENT] organization [ENT] date [SEP] Bill Gates founded Microsoft.... Un transformer bidireccional (DeBERTa-v3) codifica todo conjuntamente.

A partir de la salida, el modelo construye dos conjuntos de representaciones. Uno representa los tipos de entidad a partir de las posiciones de token [ENT]. El otro representa los spans de texto combinando los vectores de los tokens inicial y final mediante una FFN pequeña. El producto escalar entre la representación de un span y la representación de un tipo de entidad proporciona una puntuación.

Aplica sigmoid y obtienes la probabilidad de que el span desde el token ii hasta el token jj pertenezca al tipo de entidad tt: ϕ(i,j,t)=σ(SijTqt)\phi(i, j, t) = \sigma(S_{ij}^T \cdot q_t). Aquí, SijS_{ij} es el vector del span producido por la FFN y qtq_t es el embedding del tipo de entidad procedente del token [ENT] correspondiente (Zaratiana et al., 2024, ecuaciones 1–2). Los spans están limitados a 12 tokens para mantener la velocidad.

Arquitectura de GLiNER: los tokens de tipos de entidad y los tokens de texto se codifican conjuntamente mediante DeBERTa; después, las representaciones de los spans se puntúan frente a los embeddings de tipos de entidad mediante un producto escalarArquitectura de GLiNER: los tokens de tipos de entidad y los tokens de texto se codifican conjuntamente mediante DeBERTa; después, las representaciones de los spans se puntúan frente a los embeddings de tipos de entidad mediante un producto escalar

GLiNER acepta descripciones de etiquetas en lenguaje natural en tiempo de inferencia sin necesidad de reentrenamiento, pero la calidad de extracción depende de la redacción de las etiquetas y de su adecuación al dominio. Se le pasan tipos de entidad como «persona», «reacción adversa a un medicamento» o «instrumento financiero», y el modelo puntúa los spans frente a ellos. Las configuraciones de 50M, 90M y 300M que aparecen a continuación son los modelos originales del artículo. La model card actual de v2.1 enumera en cambio checkpoints en inglés de 166M, 209M y 459M, además de un checkpoint multilingüe de 209M, todos bajo Apache 2.0. No compares la latencia o la memoria entre ambas generaciones como si los nombres de los parámetros fueran equivalentes (model card de GLiNER v2.1).

Para una prueba zero-shot realmente estricta, reserva tanto los tipos objetivo como los ejemplos objetivo. Una descripción de tipo como «un efecto adverso confirmado médicamente causado por un tratamiento» proporciona al modelo más información que adverse event por sí solo. Esto no garantiza la transferencia, pero ZeroNER basado en descripciones superó a los baselines que solo utilizaban el nombre en sus benchmarks con tipos excluidos (Cocchieri et al., 2025).

Los datos de entrenamiento del modelo original procedían del dataset Pile-NER: 44.889 pasajes con 240.000 spans de entidad repartidos entre 13.000 tipos de entidad, todos etiquetados por ChatGPT. Entrenar GLiNER-L llevó unas 5 horas en una única A100 (Zaratiana et al., 2024).

Resultados de benchmarks

Resultados zero-shot de Zaratiana et al. (2024), tablas 1 y 2:

ModeloParámetrosF1 de CrossNERMedia (20 datasets)
GLiNER-L300M60,9 %47,8 %
GoLLIE7B58,0 %
UniNER-13B13B55,6 %
GLiNER-M90M55,4 %
UniNER-7B7B53,7 %45,7 %
GLiNER-S50M52,7 %
ChatGPT (GPT-3.5)47,5 %36,5 %

GLiNER-M, con 90M de parámetros, casi iguala a UniNER-13B en la tabla de CrossNER del artículo (55,4 % frente a 55,6 % de F1), utilizando aproximadamente 140 veces menos parámetros. GLiNER-S, con 50M, supera en 5 puntos de F1 el resultado publicado de ChatGPT (GPT-3.5). La variante multilingüe, entrenada únicamente con datos en inglés, supera esa misma baseline de ChatGPT en 8 de 10 idiomas no ingleses (Zaratiana et al., 2024). Estas comparaciones utilizan las versiones de modelos y el harness del artículo; no establecen un ranking frente a LLMs más recientes.

Las variantes de GLiNER cubren texto biomédico, detección de PII, noticias y soporte multilingüe.

De scripts/01_gliner_quickstart.py:

from gliner import GLiNER

model = GLiNER.from_pretrained("urchade/gliner_medium-v2.1")
text = "Bill Gates founded Microsoft on April 4, 1975."
labels = ["person", "organization", "date"]
entities = model.predict_entities(text, labels, threshold=0.5)

for entity in entities:
    print(f"  {entity['text']} => {entity['label']}")
# Bill Gates => person
# Microsoft => organization
# April 4, 1975 => date

Cómo se compara GLiNER con spaCy

spaCy es una de las bibliotecas de NLP más consolidadas en producción. También funciona con restricciones arquitectónicas distintas de las de GLiNER.

Los pipelines de spaCy (en_core_web_sm, en_core_web_trf) hacen NER de vocabulario cerrado: un conjunto fijo de tipos de entidad (PERSON, ORG, GPE, DATE, etc.) definido durante el entrenamiento. ¿Quieres un tipo de entidad nuevo? Recopila datos etiquetados y vuelve a entrenar. Fija la versión mantenida 3.8 del paquete de modelos en lugar de asumir que una línea principal aún no publicada es una mejora apta para producción. La model card de en_core_web_trf 3.8.0 registra un 90,19 de F1 de NER en OntoNotes 5.0, pero únicamente para sus 18 tipos predefinidos (model card de spaCy).

GLiNER hace NER de vocabulario abierto: cualquier etiqueta funciona en tiempo de inferencia, sin necesidad de reentrenar. Esto lo convierte en una opción mejor cuando los tipos de entidad no se conocen de antemano, cambian con frecuencia o son específicos del dominio («reacción adversa a un medicamento», «instrumento financiero», «indicador de amenaza»).

Mi recomendación: utiliza spaCy para tipos de entidad estándar cuyos pipelines preentrenados estén bien validados. Usa GLiNER cuando necesites tipos flexibles y zero-shot o cuando tu pipeline deba adaptarse sin reentrenamiento. Pueden compartir pipeline: spaCy se encarga de la tokenización y la segmentación de frases, y GLiNER de la extracción de entidades.

Baseline supervisado con Transformers

Para etiquetas estables con spans anotados representativos, empieza con un token classifier con fine-tuning, como RoBERTa o DeBERTa, que sirva de baseline supervisado. Intercambia flexibilidad de etiquetas por precisión específica de la tarea. Compáralo con spaCy y GLiNER en F1 de span exacto, recall por etiqueta, calibración, latencia y coste sobre el mismo conjunto del dominio.

UniNER y NuNER: ¿hasta dónde se puede reducir el tamaño?

UniNER (ICLR 2024, Zhou et al.) y NuNER (EMNLP 2024, Bogdanov et al.) destilan anotaciones de LLMs en modelos NER más pequeños, pero discrepan sobre cuánto se puede reducir su tamaño.

UniNER: la vía maximalista

UniNER hace fine-tuning de LLaMA-7B/13B con 45.889 pares de entrada-salida generados por ChatGPT. Para cada tipo de entidad, el modelo responde a «¿Qué describe [tipo] en el texto?» y genera listas JSON. Un truco clave de entrenamiento: el negative sampling basado en frecuencia eleva el F1 del 31,5 % al 53,4 % (Zhou et al., 2024).

UniNER-7B alcanza un 41,7 % de F1 zero-shot en 43 datasets, superando en 7 puntos el 34,9 % de ChatGPT. La variante de 13B llega al 43,4 %, solo 1,7 puntos más a cambio de casi duplicar el cómputo (Zhou et al., 2024).

El compromiso en producción: la configuración tipo UniNER con mayor puntuación del artículo consulta cada tipo de entidad secuencialmente. Su variante all-in-one utiliza una sola respuesta, pero obtuvo de media un 3,3 % menos. En FP16, un checkpoint de 7B necesita aproximadamente 14 GB solo para los pesos; una cuantización de menos bits puede reducir ese footprint. El modelo también tiene una licencia restrictiva CC BY-NC 4.0.

NuNER: la vía minimalista

NuNER parte de RoBERTa-base (125M de parámetros) y utiliza entrenamiento contrastivo con 4,38 millones de anotaciones de GPT-3.5 sobre 200.000 conceptos. Tras el entrenamiento, el concept encoder se descarta; el text encoder se integra en cualquier pipeline NER estándar como sustituto de RoBERTa (Bogdanov et al., 2024).

NuNER supera a RoBERTa sin adaptar entre 6 y 15 puntos de F1 en todos los tamaños few-shot. Con apenas una docena de ejemplos por tipo de entidad, NuNER iguala a UniNER-7B pese a ser 56 veces más pequeño (Bogdanov et al., 2024).

Ambos artículos respaldan la destilación de anotaciones de LLMs en modelos NER más pequeños. NuNER demuestra que un encoder de 125M de parámetros puede igualar el resultado publicado de UniNER-7B cuando hay datos de fine-tuning específicos de la tarea, con licencia MIT e inferencia adecuada para CPU.

GLiNER 2: un modelo, cuatro tareas

El ecosistema original de GLiNER separaba NER, extracción de relaciones, clasificación y extracción a nivel de documento en modelos distintos. El artículo de GLiNER2 de EMNLP 2025 unificó NER, clasificación y extracción jerárquica en un único modelo de 205M de parámetros; las releases actuales añadieron posteriormente la extracción de relaciones a la misma interfaz de esquema.

La arquitectura mantiene el diseño cross-encoder, pero amplía el contexto a 2.048 tokens (4 veces el original) y añade esquemas declarativos para definir tareas de extracción. El entrenamiento utiliza 135.698 documentos reales anotados con GPT-4o y 118.636 ejemplos sintéticos (Zaratiana et al., 2025).

En CrossNER zero-shot, GLiNER 2 obtiene un 0,590 de F1, cerca del 0,599 de GPT-4o en el benchmark del artículo de mediados de 2025. Para clasificación, alcanza una media de 0,72 en 7 benchmarks, frente a 0,69 de DeBERTa-v3-large. En CPU, el artículo registra una latencia de clasificación de 130–208 ms para los recuentos de etiquetas evaluados. La baseline de DeBERTa sube de 1.714 ms con 5 etiquetas a 16.897 ms con 50 (Zaratiana et al., 2025).

from gliner2 import GLiNER2
extractor = GLiNER2.from_pretrained("fastino/gliner2-base-v1")

# Multi-task composition in ONE forward pass
schema = (extractor.create_schema()
    .entities({"person": "Names of people", "company": "Organization names"})
    .classification("sentiment", ["positive", "negative", "neutral"])
    .relations(["works_for", "founded", "located_in"])
    .structure("product_info")
        .field("name", dtype="str")
        .field("price", dtype="str"))
text = "Acme launched a $19 widget in Berlin."
results = extractor.extract(text, schema)

Las releases actuales de GLiNER2 exponen reconocimiento de entidades, clasificación, extracción jerárquica y extracción de relaciones mediante un único esquema. El artículo de EMNLP evalúa NER y clasificación; no ofrece un benchmark de extracción jerárquica ni cubre la API de relaciones posterior. Considera la vía de cuatro tareas como una capacidad de despliegue que debe someterse a benchmark, no como evidencia de que un único modelo conserve la precisión de cuatro modelos especializados.

Novedades de 2026: elige la arquitectura que corresponda al cuello de botella

El ecosistema GLiNER cuenta ahora con arquitecturas diferenciadas. Son candidatas para una comparación de dominio, no para una única clasificación.

NecesidadCandidataQué verificar
Muchos tipos de entidad reutilizablesGLiNER bi-encoderF1 de span exacto y calibración tras cachear los embeddings de tipos.
Entidades y relaciones en un único pasoGLiNER-RelexF1 de spans y de relaciones sobre los mismos documentos.
Candidata local para PIIGLiNER2-PIIRecall por idioma, formato documental y tipo de PII.
Candidata multilingüe de vocabulario abiertoGLiNER-XCalidad por idioma; su model card enumera 23 idiomas.
Tipos generados o cambiantesGLiNER DecoderSi los tipos generados son estables y útiles downstream.

El artículo original de GLiNER, el artículo del bi-encoder y GLiNER-Relex utilizan sus propios modelos y harnesses. Las model cards de GLiNER-X y GLiNER Decoder describen checkpoints publicados, pero no constituyen un benchmark comparable revisado por pares. Mantén esta distinción en el registro de decisión de arquitectura.

Las licencias de los checkpoints forman parte de la elección del modelo

Verifica las condiciones exactas del código, los pesos y los datasets antes del despliegue. Las releases citadas actualmente no son intercambiables:

ReleaseLicencia publicadaConsecuencia práctica
GLiNER v2.1 y GLiNER biApache 2.0Condiciones permisivas en la model card; revisa aun así las dependencias y los datos.
GLiNER2 y GLiNER2-PIIApache 2.0Confirma el checkpoint seleccionado, no solo la biblioteca.
UniNER-7B-allCC BY-NC 4.0No lo utilices en una vía comercial sin obtener permiso por separado.
NuNERMITEl modelo y el dataset publicados indican condiciones MIT.

Las etiquetas de licencia no constituyen asesoramiento jurídico. Una revisión de producción debe incluir las condiciones del modelo base, los datos de entrenamiento y el proveedor.

El bi-encoder: escalar NER a millones de etiquetas

El GLiNER original codifica las etiquetas y el texto conjuntamente. La codificación conjunta se vuelve progresivamente más cara a medida que el texto de las etiquetas consume contexto y debe recodificarse con cada documento. El punto de cambio depende del checkpoint, las descripciones de las etiquetas y el hardware. Cuando el mismo inventario amplio de tipos se reutiliza en muchos documentos, toma el bi-encoder de GLiNER como comparación por defecto. Divide la codificación del texto y de las etiquetas en dos transformers independientes (Stepanov et al., 2026).

Cross-encoder frente a bi-encoder: el cross-encoder codifica conjuntamente etiquetas y texto, mientras que el bi-encoder utiliza encoders independientes con embeddings de etiquetas precomputadosCross-encoder frente a bi-encoder: el cross-encoder codifica conjuntamente etiquetas y texto, mientras que el bi-encoder utiliza encoders independientes con embeddings de etiquetas precomputados

El text encoder utiliza ModernBERT (familia Ettin), y el label encoder utiliza sentence transformers (BGE o MiniLM). Los spans y las etiquetas se puntúan mediante producto escalar. Esta separación significa que los embeddings de tipos de entidad pueden precomputarse una vez y cachearse. En inferencia solo hay que codificar el texto; el lado de las etiquetas se convierte en una lectura de caché.

Hay cuatro tamaños de modelo, todos evaluados en CrossNER (Stepanov et al., 2026, tabla 1):

ModeloParámetrosF1 de CrossNERThroughput (H100)Con etiquetas precomputadas
gliner-bi-edge-v2.060M54,0 %13,64 ej./s24,62 ej./s
gliner-bi-small-v2.0108M57,2 %7,99 ej./s15,22 ej./s
gliner-bi-base-v2.0194M60,3 %5,91 ej./s9,51 ej./s
gliner-bi-large-v2.0530M61,5 %2,68 ej./s3,60 ej./s

Con 1.024 tipos de entidad, el gliner-bi-edge-v2.0 bi-encoder con etiquetas precomputadas pierde solo un 5,2 % de throughput frente a una única etiqueta (19,3 → 18,3 ej./s). El gliner_small-v2.5 uni-encoder comparable pierde un 98,7 % (10,7 → 0,14 ej./s). En las pruebas del artículo, realizadas en una única H100, con batch size 1 y entradas de 64, 256 y 512 tokens, el bi-encoder con etiquetas precomputadas alcanza una ventaja de throughput de hasta 130× frente a gliner_small-v2.5. Con 100 tipos de entidad en una única H100, el bi-encoder procesa 1,96 millones de predicciones al día, frente a 368.000 del cross-encoder (Stepanov et al., 2026).

La precisión también se mantiene. Bi-encoder-large alcanza un 61,5 % de F1 en CrossNER, ligeramente por encima del 60,9 % del cross-encoder. Los autores recomiendan bi-base-v2.0 (194M) como punto óptimo: logra el 98 % de la precisión del modelo grande a 2,6 veces su velocidad (Stepanov et al., 2026).

from gliner import GLiNER

model = GLiNER.from_pretrained("knowledgator/gliner-bi-base-v2.0")

# Pre-compute embeddings for massive label sets — encode once, use forever
entity_types = ["person", "organization", "date"]  # Can be thousands or millions
entity_embeddings = model.encode_labels(entity_types, batch_size=8)

# Inference only encodes text — labels are a cached lookup
outputs = model.batch_predict_with_embeds(texts, entity_embeddings, entity_types)

Entre las aplicaciones se incluyen NER biomédico contra la ontología UMLS (más de 4 millones de conceptos), taxonomías empresariales que evolucionan sin reentrenar el modelo y entity linking mediante el framework complementario GLiNKER.

Los LLMs como teachers: un caso de estudio de $70 y un pipeline desplegable

El patrón de LLM-as-teacher separa la anotación cara de la inferencia más económica. Dos casos de estudio publicados muestran cómo distintos equipos lo han aplicado en condiciones diferentes.

Pipeline de LLM-as-teacher de CFM: un LLM etiqueta unos 900.000 titulares, personas revisan una parte en Argilla y se compara un encoder con fine-tuning usando precios por hora publicados, sin normalizar por throughputPipeline de LLM-as-teacher de CFM: un LLM etiqueta unos 900.000 titulares, personas revisan una parte en Argilla y se compara un encoder con fine-tuning usando precios por hora publicados, sin normalizar por throughput

El caso de estudio de CFM

En un caso de estudio de Hugging Face, Capital Fund Management extrajo nombres de empresas de aproximadamente 900.000 titulares de noticias financieras. GLiNER zero-shot obtuvo un 87,0 % de F1. El equipo utilizó Llama 3.1-70B para anotar el dataset en unas 8 horas por aproximadamente $70 y después revisó 2.714 muestras mediante Argilla durante otras 8 horas.

El fine-tuning de GLiNER con estos datos alcanzó un 93,4 % de F1 en el caso de estudio, frente al 92,7 % del teacher Llama-70B. Los autores registran $0,10 por hora en CPU para el modelo con fine-tuning y $8 por hora para el teacher (caso de estudio de CFM). Estas cifras describen una tarea concreta de noticias financieras y una configuración de infraestructura específica.

El estudio de Refuel AI

El informe técnico de Refuel AI evalúa el etiquetado con LLMs en 8 datasets de NLP, incluido CoNLL-2003. Registra un 88,4 % de acuerdo con la ground truth para GPT-4 (marzo de 2023) y un 86,2 % para los annotators humanos en su configuración, además de un etiquetado 20 veces más rápido y 7 veces más barato. Su ensemble deriva los ejemplos fáciles a modelos más baratos y los difíciles a GPT-4, superando el 95 % de acuerdo en los experimentos publicados (informe técnico de Refuel AI). Considera estos datos resultados comunicados por un proveedor bajo el protocolo de anotación de ese estudio.

Un pipeline de producción

Un flujo práctico de producción tiene seis pasos:

  1. Redacta las directrices de anotación en lenguaje natural
  2. Crea conjuntos de validación y test independientes etiquetados por personas, dimensionados a partir de la prevalencia de entidades, los requisitos de slices por etiqueta y el ancho deseado del intervalo de confianza. Un piloto de 50–200 documentos puede servir para calibrar las directrices, pero no es un tamaño de evaluación de producción predeterminado.
  3. Utiliza un LLM con un prompt versionado y un esquema de salida explícito para etiquetar datos de entrenamiento en masa; conserva la versión del modelo, el prompt y el texto de origen con cada etiqueta
  4. Revisa una muestra mediante Argilla o Label Studio
  5. Haz fine-tuning de un encoder compacto (GLiNER, SpanMarker, RoBERTa)
  6. Despliega solo si el encoder supera el quality gate y reduce el coste total medido. CFM registró un coste de infraestructura por hora entre 16 y 80 veces menor en su configuración; incluye en la comparación los costes de anotación, revisión, serving y reentrenamiento.

El LLM puede reducir el volumen de anotación manual, pero el equipo sigue siendo responsable del conjunto de validación, las directrices de anotación, la revisión dirigida y el análisis de errores.

Dónde falla GLiNER y dónde los LLMs siguen siendo útiles

El benchmark de Sease (octubre de 2025) comparó GLiNER con GPT-4.1-mini en 30 tareas de parsing de consultas. GPT-4.1-mini obtuvo un 100 % de respuestas completamente correctas. GLiNER obtuvo un 53 % (16 de 30). Sin embargo, GLiNER respondió en 0,08 segundos, frente a 1,21 segundos del LLM: 15 veces más rápido.

En este benchmark de 30 tareas, GLiNER falló siguiendo tres patrones recurrentes:

  1. Entidades implícitas: extraer «evento» de «Elton John actuó en Madison Square Garden»; el texto no contiene literalmente «evento», pero el LLM infiere «concierto»
  2. Sensibilidad a la redacción de las etiquetas: «2022» obtiene 0,388 frente a «date», pero 0,958 frente a «year»; pequeños cambios en las etiquetas provocan grandes variaciones en la puntuación
  3. Mapeo de valores: GLiNER devuelve el texto exacto de superficie («family houses») en lugar del valor canónico («Single family house»). Un LLM puede realizar esa normalización cuando el prompt y el esquema definen los valores objetivo.

Entidades anidadas y solapadas

GLiNER utiliza por defecto un decoding plano, que suprime los spans solapados. Su API también admite flat_ner=False, por lo que son posibles las predicciones anidadas, aunque la calidad depende del checkpoint, las etiquetas y los datos del dominio. Evalúa ambos modos de decoding en un conjunto de test a nivel de span con entidades anidadas antes de elegir un modelo especializado.

Utiliza GLiNER para la extracción de entidades explícitas y deriva a un LLM los casos que requieran inferencia, razonamiento o mapeo a ontologías predefinidas. El umbral de routing debe proceder de un conjunto etiquetado del dominio.

Evaluación de NER: métricas, problemas y conjuntos de test

Un modelo puede obtener un 95 % de F1 en un conjunto de test seleccionado y aun así fallar con la mezcla de documentos que recibe tras el despliegue. Construye el conjunto de evaluación a partir de la distribución de producción y conserva slices para los formatos y tipos de entidad poco frecuentes que el F1 agregado puede ocultar.

Métricas principales

  • F1 a nivel de entidad: La métrica estándar. Una predicción solo es correcta si tanto los límites del span como el tipo coinciden exactamente con la ground truth. Es lo que publican la mayoría de los artículos.
  • F1 a nivel de token: Puntúa cada token de forma independiente. Infla los resultados porque acertar la mayor parte de una entidad larga proporciona crédito parcial. Prefiere el F1 a nivel de entidad.
  • Precisión frente a recall: Los costes suelen ser asimétricos. En desidentificación, el recall es más importante: no detectar un nombre es peor que redactar de más. En extracción para bases de datos, la precisión es más importante: las entradas falsas corrompen el análisis posterior.

Problemas habituales de evaluación

  1. Inflación por coincidencias parciales: se extrae «Bill» cuando la etiqueta gold es «Bill Gates»; algunos scripts lo cuentan como coincidencia parcial. Utiliza coincidencia exacta de spans salvo que tengas un motivo para no hacerlo.
  2. Confusión de tipos: identificar correctamente «Microsoft» como span, pero etiquetarlo como PERSON en lugar de ORG, debería puntuar cero. Comprueba que tu código de evaluación gestione este caso.
  3. Fuga del conjunto de test: si las entidades del test se solapan con las del entrenamiento, las puntuaciones se inflan. Existen benchmarks zero-shot (CrossNER, Few-NERD) para evaluar la generalización.
  4. Prompts de etiquetas no controlados: un nombre de tipo corto y una descripción de tipo probada son entradas distintas. Versiona las descripciones de etiquetas, los umbrales, las revisiones de checkpoints y el modo de decoding junto con la puntuación.
  5. Afirmaciones zero-shot en un solo idioma: no deduzcas la calidad multilingüe a partir del inglés. OpenNER abarca 36 corpus y 52 idiomas, y sus baselines no encontraron un único modelo mejor en todos los idiomas (Palen-Michel et al., 2025). En los experimentos de FiNERweb, cambiar del inglés a etiquetas en el idioma objetivo modificó el F1 entre 0,02 y 0,09 según la configuración (Golde et al., 2026). Prueba ambos idiomas de etiquetas cuando el producto utilice terminología local.
  6. Una sola ejecución como veredicto: informa de la variación entre random seeds cuando proceda, de los sweeps de umbral y de muestras de producción repetidas. Un número pequeño de ejemplos por slice hace inestable el ranking de modelos.

Construcción de un conjunto de test de dominio

Para la evaluación en producción, recomiendo:

  1. Muestrear datos de producción, no ejemplos seleccionados. Incluye los documentos problemáticos que el modelo verá realmente.
  2. Dimensionar el conjunto de test según la estimación que necesites. Elige el número a partir de la prevalencia de entidades, el tamaño de los slices por etiqueta y el ancho deseado del intervalo de confianza. Publica intervalos de confianza bootstrap o analíticos.
  3. Utilizar al menos dos annotators en un subconjunto de calibración. Adjudica los desacuerdos e informa de una medida de acuerdo sensible a spans. El acuerdo permite diagnosticar la ambigüedad y la calidad de las directrices; no constituye un techo de rendimiento del modelo.
  4. Estratificar por dificultad: casos fáciles (texto limpio, tipos estándar) y difíciles (entidades ambiguas, jerga, texto ruidoso).
  5. Conservar slices de privacidad y fairness. Para PII, informa del recall por tipo de PII, idioma, región, formato documental y slices demográficos o relacionados con el origen de los nombres que sean pertinentes. Limita el acceso de los evaluadores al texto sensible en bruto, establece límites de retención y revisa los falsos negativos.

El NER continuo necesita un conjunto de regresión inmutable

Las taxonomías de producción cambian. Añade tipos nuevos sin modificar silenciosamente el significado de los antiguos. Mantén un conjunto de regresión versionado e inmutable para los tipos existentes, un conjunto de test separado para el tipo nuevo y un changelog de los cambios en las directrices de anotación. Publica por separado las puntuaciones de tipos antiguos y nuevos antes de sustituir un checkpoint. Es la forma más sencilla de detectar forgetting y drift de la taxonomía.

NER en producción en cuatro sectores

Estos son ejemplos seleccionados de sectores con cifras concretas bajo las condiciones publicadas. Las fuentes combinan comparaciones comunicadas por proveedores, casos de estudio comunicados por empresas o proyectos y artículos revisados por pares o preprints. Considéralos ejemplos prácticos, no un ranking de madurez.

Sanidad

John Snow Labs ofrece modelos de entidades clínicas mapeados a ICD-10, SNOMED CT, LOINC y RxNorm. En su comparación comunicada por el proveedor sobre 48 documentos y seis clases, su evaluación a nivel de token registró un 96 % de F1, frente al 91 % de Azure, el 83 % de AWS y el 79 % de GPT-4o. La comparación remapeó las etiquetas y excluyó las predicciones no asignables. Otro caso de estudio comunicado por el proveedor describe que Providence St. Joseph Health procesa entre 100.000 y 500.000 notas clínicas al día.

En su revisión de 2025 comunicada por el proyecto, el proyecto open source OpenMed registra más de 380 modelos de NER biomédico, 29,7 millones de descargas de Hugging Face y resultados líderes en 10 de 12 benchmarks biomédicos públicos.

NER financiero

El principal caso de uso es la extracción de documentos presentados ante la SEC. Finance NLP, de John Snow Labs, extrae más de 11 tipos de entidad de documentos 10-K/10-Q (direcciones, tickers, ejercicios fiscales y bolsas de valores). Variantes del FinBERT-MRC revisado por pares alcanzan entre 0,87 y 0,93 de F1 en tareas de entidades financieras. Las partes difíciles son los documentos largos y las entidades anidadas en instrumentos financieros complejos.

Comercio electrónico

Artículos revisados por pares informan de que el sistema EAMT de Walmart (KDD 2023) se entrena con 965 millones de consultas, unas 60 etiquetas de entidad, y produjo un incremento del 0,51 % en GMV en pruebas A/B. El framework TripleLearn de Home Depot (AAAI 2021) elevó el F1 de NER de 69,5 a 93,3 mediante entrenamiento iterativo.

Ciberseguridad

El sistema iACE, revisado por pares (CCS 2016), procesó 71.000 artículos de 45 blogs de seguridad y extrajo 900.000 elementos OpenIOC con una precisión del 95 % y una cobertura superior al 90 %. Un informe de proyecto sobre sistemas modernos como CyNER describe la combinación de DeBERTa (F1 >91 %) con heurísticas de IOC basadas en expresiones regulares. El preprint CyberNER presenta un dataset unificado de 2025 que armoniza cuatro datasets en 21 tipos de entidad alineados con STIX 2.1, con RoBERTa alcanzando un F1 de 0,736.

Optimización del despliegue: de Python a inferencia con menor latencia

El repositorio complementario muestra la exportación de GLiNER a ONNX y el empaquetado INT8. Registra los tamaños de los artefactos, pero no reproduce las cifras de latencia o F1 comunicadas por proyectos externos.

Serving nativo de GLiNER

Antes de cambiar a un runtime nuevo, prueba la vía de Ray Serve del proyecto. gliner[serve] proporciona dynamic batching, dimensionado de batch consciente de la memoria, escalado con varias réplicas y un cliente HTTP. Puede eliminar overhead de cola en un servicio multiusuario manteniendo el mismo código del modelo. Evalúa la latencia de cola, la latencia en caliente, el throughput y el F1 de span exacto con tu mezcla de peticiones antes de compararlo con ONNX o Rust.

Exportación a ONNX

GLiNER ofrece conversión nativa a ONNX y existen modelos preconvertidos en Hugging Face (onnx-community/gliner_small-v2.1). Mide la latencia frente al mismo checkpoint de PyTorch, con el mismo batch size, hardware y protocolo de warm-up.

De scripts/02_onnx_export.py:

# Export with quantization
# python convert_to_onnx.py --model_path model/ --save_path onnx/ --quantize True

# Load the exported ONNX model
from gliner import GLiNER
model = GLiNER.from_pretrained("path/to/model", load_onnx_model=True)

entities = model.predict_entities(text, labels, threshold=0.5)

Cuantización INT8

La cuantización dinámica puede reducir los requisitos de almacenamiento y memoria de un modelo ONNX. El efecto sobre la latencia y el F1 por etiqueta depende del checkpoint y de la CPU, por lo que el script de exportación constituye evidencia del empaquetado, no un benchmark de despliegue.

from onnxruntime.quantization import quantize_dynamic, QuantType

# Quantize weights dynamically, then evaluate the result
quantize_dynamic("gliner.onnx", "gliner_int8.onnx", weight_type=QuantType.QInt8)

gline-rs: reimplementación en Rust

gline-rs (Apache 2.0) elimina el runtime de Python de la ruta de inferencia. Su benchmark v0.9.0 en modo token, ejecutado en un Intel i9 con tres etiquetas, registra 6,67 seq/s frente a 1,61 de Python, y su resultado en una RTX 4080 es de 248,75 seq/s. Son condiciones propias del proyecto, no resultados reproducidos por el repositorio complementario. Admite modelos de span y token, GPU/NPU mediante ONNX Runtime y se distribuye como crate en crates.io.

use gliner::{GLiNER, TokenMode, Parameters, RuntimeParameters, TextInput};

let model = GLiNER::<TokenMode>::new(
    Parameters::default(), RuntimeParameters::default(),
    "tokenizer.json", "model.onnx")?;

let input = TextInput::from_str(
    &["My name is James Bond."], &["person", "vehicle"])?;
let output = model.inference(input)?;
// => "James Bond" : "person" (99.7%)

El paquete fast-gliner proporciona bindings de Python mediante PyO3.

Qué cubre la evidencia de optimización

VíaEvidencia disponibleMedir antes del despliegue
Exportación ONNXEl script complementario exporta un checkpoint de GLiNERLatencia en caliente, throughput y F1 de span exacto
Paquete INT8El script complementario crea un modelo cuantizado dinámicamenteTamaño del artefacto, latencia y recall por etiqueta
gline-rsBenchmark del proyecto con el hardware y la configuración documentadosModo del modelo, etiquetas, hardware y batch propios

Extracción estructurada: esquemas nativos, Instructor y decoders locales

Cuando necesitas más flexibilidad que la que ofrecen los modelos encoder —entidades implícitas, razonamiento o mapeo ontológico—, empieza por el mecanismo de esquemas nativo del proveedor. OpenAI admite formatos de respuesta json_schema estrictos; los structured outputs de Anthropic admiten salidas JSON y tool inputs estrictos; y la Gemini API admite un subconjunto de JSON Schema. Un modelo compartido de Pydantic o Zod puede describir el contrato, pero cada proveedor acepta un subconjunto de esquemas diferente y presenta comportamientos distintos ante rechazos y niveles de complejidad.

La conformidad con el esquema hace fiable el parsing. No demuestra que un span extraído exista en el texto fuente ni que un valor normalizado sea correcto. Valida los valores de los campos, conserva offsets o citas cuando sea posible y puntúa la precisión semántica con un conjunto etiquetado.

Instructor envuelve clientes de proveedores con validación de Pydantic y reintentos opcionales después de fallos de validación.

Adaptado del patrón de Instructor en scripts/05_structured_extraction.py:

import instructor
from pydantic import BaseModel
from typing import List, Literal
from openai import OpenAI

class Entity(BaseModel):
    name: str
    label: Literal["PERSON", "ORGANIZATION", "LOCATION"]

class ExtractEntities(BaseModel):
    entities: List[Entity]

client = instructor.from_openai(OpenAI())
result = client.chat.completions.create(
    model="gpt-5.4-mini", temperature=0.0,
    response_model=ExtractEntities,
    messages=[{"role": "user", "content": "BioNTech SE acquired InstaDeep in the U.K."}])
# entities=[Entity(name='BioNTech SE', label='ORGANIZATION'), ...]

Outlines, de dottxt, adopta un enfoque diferente: generación de tokens restringida mediante máquinas de estados finitos. El decoder enmascara los tokens que incumplirían la gramática objetivo en lugar de esperar a que falle la validación y reintentar. Una descripción general de AWS cita un 98 % de adherencia al esquema frente al 76 % de la validación posterior a la generación. También repite por separado la afirmación de .txt Engineering de que su enfoque de coalescence genera hasta 5 veces más rápido; la página no publica metodología suficiente para tratar ambas cifras como un único benchmark controlado.

import outlines
from transformers import AutoModelForCausalLM, AutoTokenizer

model_id = "microsoft/Phi-3-mini-4k-instruct"
model = outlines.from_transformers(
    AutoModelForCausalLM.from_pretrained(model_id),
    AutoTokenizer.from_pretrained(model_id),
)
result = model(
    "Extract entities from: BioNTech SE acquired InstaDeep in the U.K.",
    ExtractEntities,
)

LangExtract resulta útil cuando un campo generado debe estar fundamentado en la fuente: devuelve intervalos de caracteres y admite backends de LLM alojados o locales. Para extracción documental self-hosted, NuExtract convierte JSON Schemas en plantillas e incluye modelos documentales multimodales. Considera ambos sistemas de extracción estructurada, no sustitutos automáticos del NER de spans. Sus objetivos de campos, offsets, layout documental y latencia requieren pruebas propias.

La elección depende de dónde ejecutes los modelos. Los esquemas nativos son la vía con menor fricción para un proveedor compatible. Instructor añade una capa de validación y reintentos basada en Pydantic y agnóstica respecto al proveedor. Outlines restringe la generación local conforme a un esquema. LangExtract prioriza el grounding en la fuente, mientras que NuExtract se centra en la extracción documental self-hosted. Todas las vías con LLM incluyen generación autoregresiva. Compara cada vía con un encoder utilizando el mismo batch size, hardware, esquema de entidades y rúbrica de precisión semántica.

La arquitectura de producción de tres niveles

Yo dirigiría el NER de producción según la forma de la tarea, no según el ranking de un único modelo.

Arquitectura NER de tres niveles que dirige los spans explícitos a encoders, la extracción multitarea o conjunta de relaciones a modelos GLiNER y los campos con mucho razonamiento a LLMs con esquemas restringidosArquitectura NER de tres niveles que dirige los spans explícitos a encoders, la extracción multitarea o conjunta de relaciones a modelos GLiNER y los campos con mucho razonamiento a LLMs con esquemas restringidos

Nivel 1: modelos encoder para spans explícitos. Utiliza un cross-encoder de GLiNER para un inventario pequeño de tipos. Cuando se reutiliza un inventario amplio, compara el bi-encoder con embeddings de tipos cacheados. Haz fine-tuning mediante el pipeline de LLM-as-teacher y después despliega con serving nativo, ONNX, INT8 o gline-rs solo cuando esa vía supere el benchmark del dominio.

Nivel 2: extracción multitarea o de relaciones. Cuando una petición necesita NER, clasificación y campos jerárquicos, prueba el modelo compartido de 205M de parámetros de GLiNER2. Cuando el requisito central sea extraer conjuntamente spans y relaciones, prueba GLiNER-Relex. El artículo de GLiNER2 registra una latencia de clasificación en CPU de 130–208 ms para los recuentos de etiquetas evaluados; esto no constituye evidencia para la API de relaciones posterior ni para otro despliegue.

Nivel 3: LLMs para extracción con mucho razonamiento. Dirige las entidades implícitas, la inferencia contextual y el mapeo ontológico a una API de esquemas nativa o a Instructor para APIs cloud, y a Outlines para salidas locales restringidas. Usa LangExtract cuando los intervalos en la fuente sean esenciales y NuExtract cuando la entrada sea el propio documento. Registra estos casos porque son candidatos para el siguiente conjunto de entrenamiento del Nivel 1.

El caso de estudio de CFM proporciona una referencia de coste para el Nivel 1: 93,4 % de F1 con un coste comunicado de $0,10 por hora en CPU, frente a 92,7 % de F1 y $8 por hora para su teacher Llama-70B. Recalcula la comparación con tu hardware, modelo teacher, conjunto de etiquetas y coste de revisión.

Compromisos y limitaciones

Para cada compromiso, las preguntas útiles son dónde aparece y si puedes medirlo antes del despliegue.

Los errores del LLM-as-teacher se propagan. Si el LLM se equivoca sistemáticamente en un tipo de entidad concreto —por ejemplo, confunde nombres de filiales con los de sus matrices—, el encoder con fine-tuning hereda ese sesgo. La solución es una revisión humana dirigida: concentra el esfuerzo en los tipos de entidad donde la confianza del LLM sea baja o inconsistente, no en un muestreo aleatorio.

Un esquema válido puede contener hechos falsos. El structured output nativo, Instructor y los decoders restringidos pueden hacer que una respuesta sea parseable. No pueden garantizar que todos los campos estén fundamentados, que los límites de un span sean correctos o que un valor normalizado corresponda al registro adecuado. Conserva evidencias de la fuente y valida la semántica por separado.

Las pérdidas por cuantización dependen del checkpoint y de los datos. El repositorio complementario crea un artefacto INT8 cuantizado dinámicamente, pero no mide su F1. La guía actual de GLiNER recomienda quantization-aware training cuando sea necesario preservar la precisión en INT8. Compara los checkpoints cuantizado y original en F1 de span exacto y recall por etiqueta antes del despliegue.

Cuándo la arquitectura de tres niveles es excesiva. Un único dominio con tipos de entidad estables y suficientes ejemplos etiquetados puede necesitar únicamente un pipeline de RoBERTa con fine-tuning o de spaCy. El patrón de tres niveles encaja con varios dominios, tipos de entidad en evolución o una mezcla medida de extracción explícita y extracción con mucho razonamiento. Un pipeline limitado de facturas que extraiga nombres y fechas puede quedarse en el Nivel 1.

La calidad del bi-encoder varía según el dataset. La codificación conjunta puede ayudar en algunos datasets, mientras que el bi-encoder gana en la comparación CrossNER del artículo y el uni-encoder queda ligeramente por delante en CoNLL-2003. Evalúa ambos con el conjunto del dominio; elige a partir de la calidad medida de span exacto, la calibración, el número de etiquetas y el throughput, en lugar de utilizar «alto riesgo» como regla para elegir una familia de modelos.

Las afirmaciones sobre PII y multilingüismo requieren slices. Una puntuación agregada alta puede ocultar una pérdida peligrosa de recall en una región, una forma de nombre, un layout documental o una clase de PII poco frecuente. Trata el modelo de privacidad como una defensa en profundidad, establece un proceso de respuesta a falsos negativos y vuelve a evaluarlo cuando cambien la taxonomía, la mezcla de idiomas o la fuente de datos.

Conclusiones clave

  1. Utiliza un encoder compacto para spans explícitos solo después de que supere un conjunto de test del dominio con soporte por tipo e intervalos de confianza.
  2. Usa GLiNER para vocabularios de etiquetas cambiantes. Compara primero su bi-encoder cuando se reutilice un inventario amplio de tipos; activa flat_ner=False solo después de medir la calidad de los spans anidados.
  3. Utiliza descripciones de tipos probadas para afirmaciones zero-shot estrictas y evalúa por separado la redacción de etiquetas en inglés y en el idioma local en productos multilingües.
  4. Mantén OCR, NER, extracción de relaciones y entity linking como etapas de evaluación distintas, aunque un mismo modelo exponga varias tareas.
  5. Trata al LLM teacher como un sistema que propone anotaciones. Las directrices humanas, la adjudicación, los conjuntos de regresión inmutables y un conjunto de test independiente siguen siendo necesarios.
  6. Utiliza esquemas nativos para proveedores de LLM compatibles, pero valida la corrección semántica y el grounding en la fuente por separado de la validez del JSON.
  7. Evalúa por separado y conjuntamente el serving nativo, ONNX, la cuantización y las vías en Rust. Nunca multipliques speedups no medidos.

Referencias

Artículos

Artículos industriales

Casos de estudio

Herramientas y frameworks