Phase 05 - Lesson 21

Inferencia de Lenguaje Natural — Implicación Textual

"t implica h" significa que un humano que lea t concluiría que h es verdadero. NLI es la tarea de predecir implicación / contradicción / neutralidad. Aburrida en la superficie, pero estructural en producción.

Tipo: Aprender Lenguajes: Python Prerrequisitos: Fase 5 · 05 (Análisis de Sentimiento), Fase 5 · 13 (Respuesta a Preguntas) Tiempo: ~60 minutos

El Problema

Construiste un sumarizador. Produjo un resumen. ¿Cómo sabes que el resumen no contiene una alucinación?

Construiste un chatbot. Respondió "sí." ¿Cómo sabes que la respuesta está respaldada por el pasaje recuperado?

Necesitas clasificar 10.000 artículos de noticias por tema. No tienes etiquetas de entrenamiento. ¿Puedes reutilizar un modelo?

Los tres problemas se reducen a Inferencia de Lenguaje Natural. NLI pregunta: dada una premisa t y una hipótesis h, ¿h es implicada por t, contradicha, o neutral (sin relación)?

  • Verificación de alucinación: t = documento fuente, h = afirmación del resumen. No implicación = alucinación.
  • QA fundamentado: t = pasaje recuperado, h = respuesta generada. No implicación = fabricación.
  • Clasificación zero-shot: t = documento, h = etiqueta verbalizada ("Esto trata sobre deportes"). Implicación = etiqueta predicha.

Una tarea, tres usos en producción. Por eso todo framework de evaluación de RAG incorpora un modelo de NLI por debajo.

El Concepto

NLI: clasificación de tres vías, premisa vs hipótesis

Las tres etiquetas.

  • Implicación. th. "El gato está en la alfombra" implica "Hay un gato."
  • Contradicción. t → ¬h. "El gato está en la alfombra" contradice "No hay gato."
  • Neutralidad. Ninguna inferencia en ninguna dirección. "El gato está en la alfombra" es neutral respecto a "El gato tiene hambre."

No es implicación lógica. NLI es inferencia de lenguaje natural — lo que un lector humano típico inferiría, no lógica estricta. "Juan paseó a su perro" implica "Juan tiene un perro" en NLI, pero la lógica de primer orden estricta solo lo admitiría si axiomatizaras la posesión.

Datasets.

  • SNLI (2015). 570 mil pares anotados por humanos, descripciones de imágenes como premisas. Dominio acotado.
  • MultiNLI (2017). 433 mil pares en 10 géneros. El corpus de entrenamiento estándar en 2026.
  • ANLI (2019). NLI adversarial. Humanos escribieron ejemplos diseñados específicamente para romper modelos existentes. Más difícil.
  • DocNLI, ConTRoL (2020–21). Premisas con extensión de documento. Prueban inferencia multi-hop y de largo alcance.

La arquitectura. Un encoder transformer (BERT, RoBERTa, DeBERTa) lee [CLS] premise [SEP] hypothesis [SEP]. La representación del [CLS] alimenta un softmax de 3 vías. Entrena en MNLI, evalúa en benchmarks reservados, obtén 90%+ de precisión en pares dentro de la distribución.

Zero-shot vía NLI. Dado un documento y etiquetas candidatas, convierte cada etiqueta en una hipótesis ("Este texto trata sobre deportes"). Calcula la probabilidad de implicación de cada una. Elige el máximo. Este es el mecanismo detrás del pipeline zero-shot-classification de Hugging Face.

Constrúyelo

Paso 1: ejecuta un modelo de NLI preentrenado

from transformers import pipeline

nli = pipeline("text-classification",
               model="facebook/bart-large-mnli",
               top_k=None)  # return all labels; replaces deprecated return_all_scores=True

premise = "The cat is sleeping on the couch."
hypothesis = "There is a cat in the room."

result = nli({"text": premise, "text_pair": hypothesis})[0]
print(result)
# [{'label': 'entailment', 'score': 0.97},
#  {'label': 'neutral', 'score': 0.02},
#  {'label': 'contradiction', 'score': 0.01}]

Para NLI en producción, facebook/bart-large-mnli y microsoft/deberta-v3-large-mnli son los predeterminados abiertos. DeBERTa-v3 encabeza los leaderboards.

Paso 2: clasificación zero-shot

zs = pipeline("zero-shot-classification", model="facebook/bart-large-mnli")

text = "The stock market rallied after the central bank cut interest rates."
labels = ["finance", "sports", "politics", "technology"]

result = zs(text, candidate_labels=labels)
print(result)
# {'labels': ['finance', 'politics', 'technology', 'sports'],
#  'scores': [0.92, 0.05, 0.02, 0.01]}

La plantilla es "This example is about {label}." por defecto. Personalízala con hypothesis_template. No requiere datos de entrenamiento. Sin fine-tuning. Funciona desde el primer momento.

Paso 3: verificación de fidelidad para RAG

def is_faithful(answer, context, threshold=0.5):
    result = nli({"text": context, "text_pair": answer})[0]
    entail = next(s for s in result if s["label"] == "entailment")
    return entail["score"] > threshold

Este es el núcleo de la fidelidad de RAGAS. Divide la respuesta generada en afirmaciones atómicas. Verifica cada afirmación contra el contexto recuperado. Reporta la fracción que implica.

Paso 4: clasificador de NLI hecho a mano (conceptual)

Ve code/main.py para un juguete solo con la stdlib: premisa e hipótesis se comparan vía solapamiento léxico + detección de negación. No compite con modelos transformer — pero muestra la forma de la tarea: dos textos de entrada, etiqueta de 3 vías de salida, pérdida = entropía cruzada sobre {entail, contradict, neutral}.

Trampas

  • Atajos solo por la hipótesis. Los modelos pueden predecir la etiqueta solo a partir de la hipótesis al ~60% en SNLI porque "not", "nobody", "never" se correlacionan con contradicción. Baseline fuerte para detectar fuga de etiqueta.
  • Heurística de solapamiento léxico. La heurística de subsecuencia ("toda subsecuencia es implicada") pasa SNLI pero falla en HANS/ANLI. Usa benchmarks adversariales.
  • Degradación con extensión de documento. Los modelos de NLI de oración única caen 20+ de F1 en premisas con extensión de documento. Usa modelos entrenados en DocNLI para contexto largo.
  • Sensibilidad a la plantilla en zero-shot. "This example is about {label}" vs "{label}" vs "The topic is {label}" puede oscilar la precisión en 10+ puntos. Ajusta la plantilla.
  • Desajuste de dominio. MNLI entrena en inglés general. El texto jurídico, médico y científico necesita modelos de NLI específicos de dominio (ej.: SciNLI, MedNLI).

Úsalo

El stack de 2026:

Caso de uso Modelo
NLI de propósito general microsoft/deberta-v3-large-mnli
Rápido / edge cross-encoder/nli-deberta-v3-base
Clasificación zero-shot (ligero) facebook/bart-large-mnli
NLI a nivel de documento MoritzLaurer/DeBERTa-v3-large-mnli-fever-anli-ling-wanli
Multilingüe MoritzLaurer/multilingual-MiniLMv2-L6-mnli-xnli
Detección de alucinación en RAG Capa de NLI dentro de RAGAS / DeepEval

El meta-patrón de 2026: NLI es la cinta adhesiva de la comprensión de texto. Cada vez que necesites "¿A respalda a B?" o "¿A contradice a B?" — recurre a NLI antes de recurrir a otra llamada de LLM.

Entrégalo

Guarda como outputs/skill-nli-picker.md:

---
name: nli-picker
description: Pick an NLI model, label template, and evaluation setup for a classification / faithfulness / zero-shot task.
version: 1.0.0
phase: 5
lesson: 21
tags: [nlp, nli, zero-shot]
---

Given a use case (faithfulness check, zero-shot classification, document-level inference), output:

1. Model. Named NLI checkpoint. Reason tied to domain, length, language.
2. Template (if zero-shot). Verbalization pattern. Example.
3. Threshold. Entailment cutoff for the decision rule. Reason based on calibration.
4. Evaluation. Accuracy on held-out labeled set, hypothesis-only baseline, adversarial subset.

Refuse to ship zero-shot classification without a 100-example labeled sanity check. Refuse to use a sentence-level NLI model on document-length premises. Flag any claim that NLI solves hallucination — it reduces it; it does not eliminate it.

Ejercicios

  1. Fácil. Ejecuta facebook/bart-large-mnli en 20 triplas (premisa, hipótesis, etiqueta) hechas a mano que cubran las tres clases. Mide la precisión. Agrega trampas adversariales de "heurística de subsecuencia" ("I did not eat the cake" vs "I ate the cake") y observa si se rompe.
  2. Medio. Compara la plantilla zero-shot "This text is about {label}" contra "The topic is {label}" y "{label}" en 100 titulares de AG News. Reporta la oscilación de precisión.
  3. Difícil. Construye un verificador de fidelidad para RAG: descomposición en afirmaciones atómicas + NLI por afirmación. Evalúa en 50 respuestas generadas por RAG con contexto oro. Mide las tasas de falso positivo y falso negativo contra etiquetas hechas a mano.

Términos Clave

Término Lo que dice la gente Lo que realmente significa
NLI Inferencia de Lenguaje Natural Clasificación de 3 vías de la relación premisa-hipótesis.
RTE Reconocimiento de Implicación Textual Nombre más antiguo para NLI; misma tarea.
Implicación "t implica h" Un lector típico concluiría que h es verdadero dado t.
Contradicción "t descarta h" Un lector típico concluiría que h es falso dado t.
Neutralidad "indefinido" Ninguna inferencia de t a h en ninguna dirección.
Clasificación zero-shot NLI como clasificador Verbaliza etiquetas como hipótesis, elige el máximo de implicación.
Fidelidad ¿La respuesta está respaldada? NLI sobre (contexto recuperado, respuesta generada).

Lecturas Adicionales

0 lifetime access. Curriculum based on AI Engineering from Scratch by Rohit Ghumare (MIT, used under attribution).