Phase 05 - Lesson 21

Inferência de Linguagem Natural — Implicação Textual

"t implica h" significa que um humano lendo t concluiria que h é verdadeiro. NLI é a tarefa de prever implicação / contradição / neutralidade. Aparentemente entediante, mas estrutural em produção.

Tipo: Aprender Linguagens: Python Pré-requisitos: Fase 5 · 05 (Análise de Sentimento), Fase 5 · 13 (Resposta a Perguntas) Tempo: ~60 minutos

O Problema

Você construiu um sumarizador. Ele produziu um resumo. Como saber se o resumo não contém uma alucinação?

Você construiu um chatbot. Ele respondeu "sim." Como saber se a resposta é sustentada pelo trecho recuperado?

Você precisa classificar 10.000 artigos de notícias por tópico. Não tem rótulos de treinamento. Dá para reaproveitar um modelo?

Os três problemas se reduzem a Inferência de Linguagem Natural. NLI pergunta: dada uma premissa t e uma hipótese h, h é implicada por t, contradita, ou neutra (sem relação)?

  • Checagem de alucinação: t = documento fonte, h = afirmação do resumo. Não implicação = alucinação.
  • QA fundamentado: t = trecho recuperado, h = resposta gerada. Não implicação = fabricação.
  • Classificação zero-shot: t = documento, h = rótulo verbalizado ("Isto é sobre esportes"). Implicação = rótulo previsto.

Uma tarefa, três usos em produção. É por isso que todo framework de avaliação de RAG embarca um modelo de NLI por baixo dos panos.

O Conceito

NLI: classificação de três vias, premissa vs hipótese

Os três rótulos.

  • Implicação. th. "O gato está no tapete" implica "Existe um gato."
  • Contradição. t → ¬h. "O gato está no tapete" contradiz "Não existe gato."
  • Neutralidade. Nenhuma inferência em qualquer direção. "O gato está no tapete" é neutro em relação a "O gato está com fome."

Não é implicação lógica. NLI é inferência de linguagem natural — o que um leitor humano típico inferiria, não lógica estrita. "João passeou com o cachorro dele" implica "João tem um cachorro" em NLI, mas a lógica de primeira ordem estrita só admitiria isso se você axiomatizasse a posse.

Datasets.

  • SNLI (2015). 570 mil pares anotados por humanos, legendas de imagens como premissas. Domínio restrito.
  • MultiNLI (2017). 433 mil pares em 10 gêneros. O corpus de treinamento padrão em 2026.
  • ANLI (2019). NLI adversarial. Humanos escreveram exemplos projetados especificamente para quebrar modelos existentes. Mais difícil.
  • DocNLI, ConTRoL (2020–21). Premissas com extensão de documento. Testam inferência multi-hop e de longo alcance.

A arquitetura. Um encoder transformer (BERT, RoBERTa, DeBERTa) lê [CLS] premise [SEP] hypothesis [SEP]. A representação do [CLS] alimenta um softmax de 3 vias. Treine em MNLI, avalie em benchmarks reservados, obtenha 90%+ de acurácia em pares dentro da distribuição.

Zero-shot via NLI. Dado um documento e rótulos candidatos, transforme cada rótulo em uma hipótese ("Este texto é sobre esportes"). Calcule a probabilidade de implicação de cada um. Escolha o máximo. Esse é o mecanismo por trás do pipeline zero-shot-classification da Hugging Face.

Construa

Passo 1: rode um modelo de NLI pré-treinado

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 em produção, facebook/bart-large-mnli e microsoft/deberta-v3-large-mnli são os padrões abertos. O DeBERTa-v3 lidera os leaderboards.

Passo 2: classificação 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]}

O template é "This example is about {label}." por padrão. Personalize com hypothesis_template. Não requer dados de treinamento. Sem fine-tuning. Funciona direto da caixa.

Passo 3: checagem de fidelidade 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 é o cerne da fidelidade do RAGAS. Divida a resposta gerada em afirmações atômicas. Verifique cada afirmação contra o contexto recuperado. Reporte a fração que é implicada.

Passo 4: classificador de NLI feito à mão (conceitual)

Veja code/main.py para um brinquedo só com a stdlib: premissa e hipótese são comparadas via sobreposição lexical + detecção de negação. Não compete com modelos transformer — mas mostra o formato da tarefa: dois textos na entrada, rótulo de 3 vias na saída, perda = entropia cruzada sobre {entail, contradict, neutral}.

Armadilhas

  • Atalhos só pela hipótese. Modelos conseguem prever o rótulo apenas pela hipótese a ~60% no SNLI porque "not", "nobody", "never" se correlacionam com contradição. Baseline forte para detectar vazamento de rótulo.
  • Heurística de sobreposição lexical. A heurística de subsequência ("toda subsequência é implicada") passa no SNLI mas falha no HANS/ANLI. Use benchmarks adversariais.
  • Degradação com extensão de documento. Modelos de NLI de sentença única caem 20+ de F1 em premissas com extensão de documento. Use modelos treinados em DocNLI para contexto longo.
  • Sensibilidade ao template no zero-shot. "This example is about {label}" vs "{label}" vs "The topic is {label}" pode oscilar a acurácia em 10+ pontos. Ajuste o template.
  • Incompatibilidade de domínio. O MNLI treina em inglês geral. Texto jurídico, médico e científico precisam de modelos de NLI específicos de domínio (ex.: SciNLI, MedNLI).

Use

A stack de 2026:

Caso de uso Modelo
NLI de propósito geral microsoft/deberta-v3-large-mnli
Rápido / edge cross-encoder/nli-deberta-v3-base
Classificação zero-shot (leve) facebook/bart-large-mnli
NLI em nível de documento MoritzLaurer/DeBERTa-v3-large-mnli-fever-anli-ling-wanli
Multilíngue MoritzLaurer/multilingual-MiniLMv2-L6-mnli-xnli
Detecção de alucinação em RAG Camada de NLI dentro do RAGAS / DeepEval

O meta-padrão de 2026: NLI é a fita adesiva da compreensão de texto. Sempre que você precisar de "A sustenta B?" ou "A contradiz B?" — recorra a NLI antes de recorrer a outra chamada de LLM.

Entregue

Salve 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.

Exercícios

  1. Fácil. Rode facebook/bart-large-mnli em 20 triplas (premissa, hipótese, rótulo) feitas à mão cobrindo todas as três classes. Meça a acurácia. Adicione armadilhas adversariais de "heurística de subsequência" ("I did not eat the cake" vs "I ate the cake") e veja se ele quebra.
  2. Médio. Compare o template zero-shot "This text is about {label}" contra "The topic is {label}" e "{label}" em 100 manchetes do AG News. Reporte a oscilação de acurácia.
  3. Difícil. Construa um verificador de fidelidade para RAG: decomposição em afirmações atômicas + NLI por afirmação. Avalie em 50 respostas geradas por RAG com contexto ouro. Meça as taxas de falso positivo e falso negativo contra rótulos feitos à mão.

Termos-Chave

Termo O que as pessoas dizem O que realmente significa
NLI Inferência de Linguagem Natural Classificação de 3 vias da relação premissa-hipótese.
RTE Reconhecimento de Implicação Textual Nome mais antigo para NLI; mesma tarefa.
Implicação "t implica h" Um leitor típico concluiria que h é verdadeiro dado t.
Contradição "t descarta h" Um leitor típico concluiria que h é falso dado t.
Neutralidade "indefinido" Nenhuma inferência de t para h em qualquer direção.
Classificação zero-shot NLI como classificador Verbalize rótulos como hipóteses, escolha o máximo de implicação.
Fidelidade A resposta é sustentada? NLI sobre (contexto recuperado, resposta gerada).

Leitura Complementar

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