자연어 추론(Natural Language Inference; NLI)과 텍스트 함의(Textual Entailment)

"t entails h"라는 표현은, 인간 독자가 t를 읽었을 때 h가 참이라고 결론짓는다는 의미입니다. 자연어 추론(NLI)은 함의(entailment), 모순(contradiction), 중립(neutral) 중 하나를 예측하는 과제(task)입니다. 표면적으로는 단순해 보이지만 실제 운영(production) 환경에서는 매우 중요한 역할을 담당합니다.

유형: Learn 언어: Python 선수 강의: Phase 5 · 05 (Sentiment Analysis), Phase 5 · 13 (Question Answering) 예상 시간: 약 60분

학습 목표

  • 자연어 추론(Natural Language Inference; NLI)의 전제(premise), 가설(hypothesis), 레이블(label) 구조를 설명할 수 있습니다.
  • 함의(entailment), 모순(contradiction), 중립(neutral) 레이블을 구분할 수 있습니다.
  • NLI가 충실성 검사(faithfulness check), 근거 기반 질의응답(grounded QA), 제로샷 분류(zero-shot classification)에 어떻게 쓰이는지 이해합니다.
  • 가설 단독 지름길(hypothesis-only shortcut), 어휘 겹침 휴리스틱(lexical overlap heuristic), 도메인 불일치(domain mismatch) 같은 함정(pitfall)을 식별할 수 있습니다.

문제

요약기(summarizer)를 만들었다고 가정해 봅시다. 모델이 요약을 생성했습니다. 그런데 이 요약이 환각(hallucination)을 담고 있지 않다는 것을 어떻게 확인할 수 있을까요?

챗봇(chatbot)을 만들었습니다. 챗봇이 "yes."라고 답했습니다. 이 답이 실제로 검색된 지문(retrieved passage)에 의해 뒷받침되는지는 어떻게 알 수 있을까요?

학습용 레이블이 전혀 없는 상태에서 뉴스 기사 10,000건을 주제(topic)별로 분류해야 합니다. 기존 모델을 그대로 재사용할 수 있을까요?

세 가지 문제는 모두 자연어 추론(Natural Language Inference; NLI)으로 환원됩니다. NLI는 전제(premise) t와 가설(hypothesis) h가 주어졌을 때, ht에 의해 함의되는지(entailed), 모순되는지(contradicted), 아니면 어느 쪽도 아닌 중립(neutral; unrelated)인지를 묻는 과제입니다.

  • 환각 검사(Hallucination check): t = 원문 문서(source document), h = 요약 주장(summary claim). 함의가 아니라면 환각입니다.
  • 근거 기반 질의응답(Grounded QA): t = 검색된 지문(retrieved passage), h = 생성된 답변(generated answer). 함의가 아니라면 날조(fabrication)입니다.
  • 제로샷 분류(Zero-shot classification): t = 문서(document), h = 레이블을 문장화한 가설("This is about sports"). 함의가 성립하는 레이블이 예측 레이블입니다.

하나의 과제가 세 가지 실무 용도로 쓰입니다. 거의 모든 RAG 평가 프레임워크(evaluation framework)가 내부적으로 NLI 모델을 탑재하는 이유가 바로 여기에 있습니다.

사전 테스트

2문제 · 이 강의를 시작하기 전에 얼마나 알고 있는지 확인해보세요

1.자연어 추론(Natural Language Inference; NLI)에서 세 가지 레이블 — 함의(entailment), 모순(contradiction), 중립(neutral) — 은 각각 무엇을 나타내나요?

2.레이블이 달린 학습 데이터 없이 NLI를 사용해 문서를 주제별로 분류하려면 어떻게 해야 하나요?

0/2 답변 완료

개념

NLI — one task, three production uses premise (t): "A cat is sleeping on the couch." hypothesis (h): "There is a cat in the room." transformer encoder [CLS] t [SEP] h [SEP] DeBERTa-v3 / RoBERTa / BART entailment 0.97 neutral 0.02 contradiction 0.01 same model, three plugs 1. zero-shot classification t = document h = "about {label}" pick max-entailment label no training data needed 2. faithfulness (RAG) t = retrieved context h = generated answer claim entailment → supported RAGAS faithfulness core 3. summarization fact-check t = source document h = summary sentence contradiction → hallucination neutral → unsupported claim

세 가지 레이블.

  • 함의(Entailment). th. "The cat is on the mat"은 "There is a cat."을 함의합니다.
  • 모순(Contradiction). t → ¬h. "The cat is on the mat"은 "There is no cat."과 모순됩니다.
  • 중립(Neutral). 어느 쪽으로도 추론(inference)이 성립하지 않습니다. "The cat is on the mat"은 "The cat is hungry."에 대해 중립입니다.

논리적 함의가 아닙니다. NLI는 자연어 추론입니다. 즉, 엄격한 논리(strict logic)가 아니라 일반적인 인간 독자가 추론할 만한 내용을 다룹니다. "John walked his dog"는 NLI에서는 "John has a dog"를 함의하는 것으로 간주되지만, 일계 논리(first-order logic)에서는 소유 관계를 별도의 공리(axiom)로 명시해야만 인정됩니다.

대표 데이터셋(datasets).

  • SNLI (2015). 사람이 직접 주석한 570k 쌍(pair)으로 구성되어 있으며, 이미지 캡션(image caption)을 전제로 사용합니다. 도메인이 좁습니다.
  • MultiNLI (2017). 10개 장르(genre)에 걸친 433k 쌍을 제공합니다. 2026년 기준 표준 학습 코퍼스(standard training corpus)입니다.
  • ANLI (2019). 적대적 NLI(Adversarial NLI). 사람들이 기존 모델을 일부러 무너뜨릴 수 있도록 예시를 작성한 데이터셋이며, 난도가 더 높습니다.
  • DocNLI, ConTRoL (2020-21). 문서 길이(document-length)의 전제를 다룹니다. 다단계 추론(multi-hop)과 긴 거리 추론(long-range inference)을 평가합니다.

구조(Architecture). 트랜스포머 인코더(transformer encoder; BERT, RoBERTa, DeBERTa)가 [CLS] premise [SEP] hypothesis [SEP] 형태의 입력을 읽습니다. [CLS] 토큰의 표현(representation)이 3-way 소프트맥스(softmax)로 들어갑니다. MNLI로 학습한 뒤 별도의 평가 벤치마크(benchmark)에서 측정하면 동일 분포(in-distribution) 쌍에서 90% 이상의 정확도(accuracy)를 얻을 수 있습니다.

NLI를 활용한 제로샷(zero-shot). 문서와 후보 레이블이 주어지면, 각 레이블을 가설("This text is about sports")로 변환합니다. 그런 다음 각 가설의 함의 확률(entailment probability)을 계산하고, 가장 높은 값을 갖는 레이블을 고릅니다. 이것이 바로 Hugging Face의 zero-shot-classification 파이프라인(pipeline)이 동작하는 원리입니다.

직접 만들기

Step 1: 사전 학습된 NLI 모델 실행하기

from transformers import pipeline

nli = pipeline("text-classification",
               model="facebook/bart-large-mnli",
               top_k=None)  # 모든 레이블을 반환합니다. 사용이 중단된 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}]

실무용 NLI 모델로는 facebook/bart-large-mnlimicrosoft/deberta-v3-large-mnli가 오픈 소스 기본값처럼 쓰입니다. 리더보드 상위권은 DeBERTa-v3가 차지하고 있습니다.

Step 2: 제로샷 분류(Zero-shot classification)

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]}

기본 템플릿은 "This example is about {label}."입니다. hypothesis_template 인자로 원하는 형태로 바꿀 수 있습니다. 별도의 학습 데이터(training data)가 필요 없고, 추가 미세 조정(fine-tuning)도 필요하지 않습니다. 바로 꺼내어 그대로 사용할 수 있습니다.

Step 3: RAG 충실성 검사(faithfulness check)

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

이것이 RAGAS 충실성 평가의 핵심 아이디어입니다. 생성된 답변을 원자 단위 주장(atomic claim)으로 나누고, 각 주장을 검색된 문맥(retrieved context)에 대해 검사합니다. 그리고 함의로 판정된 주장의 비율을 보고(report)합니다.

Step 4: 직접 만든 NLI 분류기 (개념용)

code/main.py에는 표준 라이브러리만 사용한 장난감(toy) 구현이 있습니다. 전제와 가설을 어휘 겹침(lexical overlap)과 부정 표현 감지(negation detection)로 비교합니다. 트랜스포머 모델과는 성능을 겨룰 수 없지만, 과제의 형태(shape)는 보여 줍니다. 두 텍스트를 입력으로 받고, 3-way 레이블을 출력하며, 손실 함수는 {entail, contradict, neutral} 위의 교차 엔트로피(cross-entropy)라는 점입니다.

함정(Pitfalls)

  • 가설 단독 지름길(Hypothesis-only shortcuts). 모델이 가설만 보고도 SNLI의 레이블을 약 60% 맞힐 수 있습니다. "not", "nobody", "never" 같은 단어가 모순(contradiction)과 강하게 상관되기 때문입니다. 레이블 누수(label leakage)를 감지하는 강력한 기준선(baseline) 역할을 합니다.
  • 어휘 겹침 휴리스틱(Lexical overlap heuristic). "모든 부분 수열(subsequence)은 함의된다"는 식의 휴리스틱은 SNLI에서는 통과하지만 HANS와 ANLI에서는 무너집니다. 따라서 적대적 벤치마크(adversarial benchmark)를 함께 활용해야 합니다.
  • 문서 길이에서의 성능 저하(Document-length degradation). 문장 단위 NLI 모델은 문서 길이의 전제에서 F1 점수가 20 이상 떨어집니다. 긴 문맥(long context)에는 DocNLI로 학습된 모델을 사용해야 합니다.
  • 제로샷 템플릿 민감도(Zero-shot template sensitivity). "This example is about {label}", "{label}", "The topic is {label}"은 정확도를 10점 이상 바꿔 놓을 수 있습니다. 템플릿은 반드시 조정(tuning)해야 합니다.
  • 도메인 불일치(Domain mismatch). MNLI는 일반 영어로 학습되어 있습니다. 법률, 의료, 과학 텍스트에는 도메인 특화 NLI 모델(예: SciNLI, MedNLI)이 필요합니다.

사용하기

2026년 기준 권장 스택은 다음과 같습니다.

활용 사례(Use case)모델(Model)
범용 NLImicrosoft/deberta-v3-large-mnli
경량/엣지 환경cross-encoder/nli-deberta-v3-base
제로샷 분류 (lightweight)facebook/bart-large-mnli
문서 수준(Document-level) NLIMoritzLaurer/DeBERTa-v3-large-mnli-fever-anli-ling-wanli
다국어(Multilingual)MoritzLaurer/multilingual-MiniLMv2-L6-mnli-xnli
RAG 환각 탐지RAGAS / DeepEval 내부 NLI 레이어

2026년 메타 패턴은 분명합니다. NLI는 텍스트 이해의 만능 접착 테이프(duct tape) 같은 존재입니다. "A가 B를 뒷받침하는가?", "A가 B와 모순되는가?"가 필요할 때마다 또 다른 LLM 호출(call)을 추가하기 전에 NLI를 먼저 꺼내 보는 것을 권장합니다.

산출물 만들기

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:

Guide the student in Korean.

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.

이 skill은 충실성 검사, 제로샷 분류, 문서 수준 추론 과제에 맞춰 모델, 템플릿, 임계값(threshold), 평가 설정을 함께 추천하도록 만든 것입니다. 100개 규모의 레이블링된 정상성 검사(sanity check) 없이 제로샷 분류를 배포(ship)하지 못하게 막고, 문장 단위 NLI 모델을 문서 길이의 전제에 적용하지 못하도록 거부하며, "NLI가 환각을 완전히 없애 준다"는 식의 주장을 발견하면 표시(flag)합니다. NLI는 환각을 줄여 줄 뿐, 완전히 제거하지는 못합니다.

연습문제

  1. 쉬움. 세 클래스를 모두 포함하는 직접 만든 (premise, hypothesis, label) 삼중쌍(triple) 20개에 대해 facebook/bart-large-mnli를 실행합니다. 정확도를 측정합니다. "I did not eat the cake" vs "I ate the cake" 같은 적대적 부분 수열 휴리스틱 함정을 추가하고, 모델이 깨지는지 확인합니다.
  2. 중간. AG News 헤드라인 100개에서 제로샷 템플릿 "This text is about {label}", "The topic is {label}", "{label}"을 비교합니다. 정확도가 얼마나 흔들리는지 보고합니다.
  3. 어려움. RAG 충실성 검사기를 직접 구현합니다. 원자 단위 주장 분해(atomic-claim decomposition)와 주장별 NLI 평가를 조합합니다. 골드(gold) 문맥이 함께 있는 RAG 생성 답변 50개에 적용하고, 사람이 매긴 레이블 대비 거짓 양성률(false-positive rate)과 거짓 음성률(false-negative rate)을 측정합니다.

핵심 용어

용어흔한 설명실제 의미
자연어 추론(Natural Language Inference; NLI)자연어 추론전제(premise)와 가설(hypothesis) 관계를 3-way 분류로 판정하는 과제입니다.
텍스트 함의 인식(Recognizing Textual Entailment; RTE)텍스트 함의 인식NLI의 옛 이름이며, 동일한 과제입니다.
함의(Entailment)"t implies h"일반 독자가 t가 주어졌을 때 h가 참이라고 결론짓는 관계입니다.
모순(Contradiction)"t rules out h"일반 독자가 t가 주어졌을 때 h가 거짓이라고 결론짓는 관계입니다.
중립(Neutral)"undecided"t에서 h로 어떤 추론도 성립하지 않는 관계입니다.
제로샷 분류(Zero-shot classification)NLI를 분류기로 사용레이블을 가설로 문장화한 뒤 가장 함의 확률이 높은 것을 고릅니다.
충실성(Faithfulness)답변이 뒷받침되는가?검색된 문맥(retrieved context)과 생성된 답변(generated answer) 사이에 NLI를 수행하는 평가입니다.

더 읽을거리

실습 코드

이 강의의 실습 코드 1개

main
Code

산출물

이 강의에서 생성된 프롬프트, 스킬, 코드 산출물 1개

nli-picker

Pick an NLI model, label template, and evaluation setup for a classification / faithfulness / zero-shot task.

Skill

확인 문제

3문제 · 모두 맞추면 완료 표시가 가능합니다

1.문장 수준 NLI 모델이 SNLI에서 92% 정확도를 달성하지만 문서 길이(document-length) 전제에서는 71%에 그칩니다. 가장 유력한 원인은 무엇인가요?

2.제로샷 분류기(zero-shot classifier)가 'This example is about {label}.' 템플릿을 사용합니다. '{label}'로만 바꾸면 정확도가 12포인트 떨어집니다. 템플릿이 왜 이렇게 중요한가요?

3.RAG 충실성 검사기(faithfulness checker)를 만들고 있습니다. 시스템이 생성된 답변을 원자 단위 주장(atomic claim)으로 분해하고 각 주장을 검색된 문맥(retrieved context)에 대해 NLI로 검사합니다. 한 주장의 높은 함의 점수(entailment score)는 무엇을 의미하나요?

0/3 답변 완료

추가 문제 풀기

AI가 강의 내용을 바탕으로 새로운 문제를 생성합니다