فاز 5 · درس 21

استنتاج زبان طبیعی (NLI) و استلزام متنی در پایتون

نوع
مفهومی
زمان
حدود 60 دقیقه
زبان‌ها
Python
پیش‌نیاز
فاز 5 · درس 05 (تحلیل احساسات)، فاز 5 · درس 13 (پاسخ‌گویی به سؤالات)
دو پلاک مقایسه‌ای متنی متصل به یک ترازو با سه خروجی نشان‌دهنده‌ی درستی، تناقض و بی‌طرفی
فهرست مطالب
  1. صورت مسئله
  2. مفاهیم پایه
  3. پیاده‌سازی
  4. مرحله‌ی 1: اجرای یک مدل NLI از پیش‌آموزش‌دیده
  5. مرحله‌ی 2: دسته‌بندی صفر-داده
  6. مرحله‌ی 3: ارزیابی وفاداری به متن (Faithfulness) در RAG
  7. مرحله‌ی 4: پیاده‌سازی مفهومی یک کلاسیفایر NLI دستی
  8. چالش‌ها و خطاهای رایج
  9. کاربرد در دنیای واقعی
  10. تحویل پروژه
  11. تمرین‌ها
  12. اصطلاحات کلیدی
  13. منابع بیشتر

در سیستم‌های مبتنی بر مدل‌های زبانی بزرگ، پاسخ دادن صرف به پرسش‌ها کافی نیست؛ چالش اصلی، تشخیص توهم (Hallucination) و اطمینان از وفاداری پاسخ نسبت به اسناد بازیابی‌شده است. استنتاج زبان طبیعی (Natural Language Inference یا NLI) همان زیرساخت کم‌هزینه‌ای است که به شما امکان می‌دهد بدون نیاز به فراخوانی‌های سنگین و پرهزینه‌ی LLM، درستی ادعاهای تولیدشده را در برابر متون مرجع اعتبارسنجی کنید.

علاوه بر پایش کیفیت در RAG، تسک NLI پایه‌ی اصلی دسته‌بندی صفر-داده (Zero-shot classification) است؛ یعنی می‌توانید بدون داشتن داده‌های برچسب‌خورده برای آموزش، اسناد مختلف را بر اساس فرضیه‌های متنی دسته‌بندی کنید. با این تکنیک، فرآیندهایی که نیازمند آموزش مدل‌های جداگانه بودند، با یک مدل ترنسفورمر آماده و چند خط کد استاندارد حل می‌شوند.

برای توسعه‌دهندگان در ایران، دانلود مدل‌ها از Hugging Face و نصب کتابخانه‌ها از PyPI گاهی با کندی یا اختلال مواجه می‌شود که می‌توان این موضوع را با استفاده از میرورهای داخلی پایدارتر کرد. همچنین مدل‌های سبک‌تر معرفی‌شده در این درس روی CPU یا سیستم‌های شخصی به‌خوبی اجرا می‌شوند و برای اجرای آن‌ها به منابع پردازشی ابری خارجی وابسته نخواهید بود.

«t مستلزم h است» یعنی انسانی که t را می‌خواند، نتیجه می‌گیرد h درست است. استنتاج زبان طبیعی (Natural Language Inference یا NLI) وظیفه‌ی پیش‌بینی یکی از سه حالتِ استلزام، تناقض یا بی‌طرف است. در ظاهر کسل‌کننده، اما در پروداکشن نقشی کلیدی و زیربنایی دارد.

صورت مسئله

یک سیستم خلاصه‌ساز ساخته‌اید و خلاصه‌ای تولید کرده است. از کجا مطمئن می‌شوید که این خلاصه حاوی توهم (hallucination) نیست؟

یک چت‌بات ساخته‌اید و پاسخ «بله» داده است. از کجا می‌دانید این پاسخ متکی بر متنِ بازیابی‌شده است؟

باید 10,000 مقاله‌ی خبری را بر اساس موضوع دسته‌بندی کنید، اما هیچ برچسبی برای آموزش ندارید. آیا می‌توانید از یک مدلِ موجود دوباره استفاده کنید؟

پاسخ هر سه مسئله به NLI برمی‌گردد. NLI این سؤال را مطرح می‌کند: با فرض یک مقدمه t و یک فرضیه h، آیا h از t استنتاج می‌شود (مستلزم آن است)، ناقض آن است، یا نسبت به آن بی‌طرف (نامرتبط) است؟

  • بررسی توهم: t = سند مبدأ، h = ادعای مطرح‌شده در خلاصه. عدم استلزام = توهم.
  • پاسخ‌گویی مستند (Grounded QA): t = بخش بازیابی‌شده، h = پاسخ تولیدشده. عدم استلزام = پاسخ ساختگی.
  • دسته‌بندی صفر-داده (Zero-shot classification): t = سند، h = برچسب تبدیل‌شده به متن («این متن درباره‌ی ورزش است»). استلزام = برچسب پیش‌بینی‌شده.

یک تسک و سه کاربرد پروداکشنی. دقیقاً به همین دلیل است که زیر کاپوتِ تمام فریم‌ورک‌های ارزیابی RAG، یک مدل NLI کار می‌کند.

مفاهیم پایه

NLI: دسته‌بندی سه‌حالته، فرض‌پایه در برابر فرضیه

سه برچسب اصلی.

  • استلزام (Entailment). t → h. «گربه روی پادری است» مستلزم این است که «گربه‌ای وجود دارد».
  • تناقض (Contradiction). t → ¬h. «گربه روی پادری است» با «هیچ گربه‌ای وجود ندارد» متناقض است.
  • بی‌طرف (Neutral). هیچ نتیجه‌گیری خاصی در کار نیست. «گربه روی پادری است» نسبت به «گربه گرسنه است» بی‌طرف است.

این استلزام منطقیِ صلب نیست. NLI یعنی استنتاج در زبان طبیعی؛ یعنی آنچه یک خواننده‌ی معمولی برداشت می‌کند، نه منطق صوریِ خشک. در NLI، جمله‌ی «علی سگش را به پیاده‌روی برد» مستلزم این است که «علی سگ دارد»؛ در حالی که منطق مرتبه‌ی اول سخت‌گیرانه تنها در صورتی این گزاره را می‌پذیرد که مفهوم مالکیت را به‌شکل اصل موضوعه (axiom) تعریف کرده باشید.

مجموعه‌داده‌ها.

  • SNLI (سال 2015). شامل 570 هزار جفت برچسب‌گذاری‌شده توسط انسان، با کپشن تصاویر به عنوان مقدمه. دامنه‌ی کاربرد محدود.
  • MultiNLI (سال 2017). شامل 433 هزار جفت در 10 ژانر مختلف. دیتاست استاندارد برای آموزش در سال 2026.
  • ANLI (سال 2019). دیتای NLI رقابتی (Adversarial). نمونه‌هایی که انسان‌ها مشخصاً برای به اشتباه انداختن مدل‌های موجود طراحی کرده‌اند؛ کاری به‌مراتب دشوارتر.
  • DocNLI، ConTRoL (سال‌های 2020 تا 2021). مقدمه‌هایی به اندازه‌ی یک سند کامل برای سنجش استنتاج چندمرحله‌ای (multi-hop) و روابط دوربُرد.

معماری. یک انکودر ترنسفورمر (BERT، RoBERTa، DeBERTa) ورودی را به شکل [CLS] premise [SEP] hypothesis [SEP] می‌خواند. سپس بردار بازنمایی [CLS] به یک لایه‌ی سافت‌مکس 3-حالته داده می‌شود. مدل را روی MNLI آموزش دهید، روی بنچمارک‌های تفکیک‌شده ارزیابی کنید و در داده‌های هم‌توزیع با آموزش به دقتی بالای 90% برسید.

دسته‌بندی صفر-داده با کمک NLI. با داشتن یک سند و چند برچسب کاندید، هر برچسب را به یک فرضیه تبدیل کنید («این متن درباره‌ی ورزش است»). احتمال استلزام را برای تک‌تک آن‌ها حساب کرده و بیشترین مقدار را انتخاب کنید. این دقیقاً همان سازوکاری است که پایپ‌لاین zero-shot-classification در Hugging Face بر پایه‌ی آن کار می‌کند.

استنتاج زبان طبیعیهدایت زوج به یک برچسب
NATURAL LANGUAGE INFERENCENLI takes a premise t and a hypothesis h and routes the pair to exactly one of three labels: entailment, neutral, or contradiction. The same classifier powers hallucination checks, grounded-QA verification, and zero-shot labeling.t: گربه روی فرش استh: گربه‌ای وجود داردNLIاستلزامخنثیتناقض
مدل NLI یک فرض (t) و یک فرضیه (h) را دریافت کرده و زوج را دقیقاً به یکی از سه برچسب هدایت می‌کند: استلزام (entailment)، خنثی (neutral) یا تناقض (contradiction). همین طبقه‌بند مبنای بررسی توهم، راستی‌آزمایی پاسخ‌های مبتنی بر متن و برچسب‌گذاری صفر-شات است.

پیاده‌سازی

مرحله‌ی 1: اجرای یک مدل NLI از پیش‌آموزش‌دیده

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

برای NLI در محیط عملیاتی، مدل‌های facebook/bart-large-mnli و MoritzLaurer/DeBERTa-v3-large-mnli-fever-anli-ling-wanli گزینه‌های پیش‌فرض و متن‌باز هستند. DeBERTa-v3 در صدر لیدربوردها قرار دارد.

مرحله‌ی 2: دسته‌بندی صفر-داده

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 سفارشی‌سازی کنید. بدون نیاز به داده‌ی آموزشی و بدون فاین‌تیونینگ؛ این رویکرد آماده‌ی استفاده است.

مرحله‌ی 3: ارزیابی وفاداری به متن (Faithfulness) در 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

این سازوکار هسته‌ی اصلی سنجه‌ی وفاداری در RAGAS است: پاسخ تولیدشده را به ادعاهای تفکیک‌ناپذیر (atomic) خرد کنید، هر ادعا را در برابر کانتکستِ بازیابی‌شده بسنجید و نسبت ادعاهایی را که رابطه‌ی استلزام دارند گزارش دهید.

مرحله‌ی 4: پیاده‌سازی مفهومی یک کلاسیفایر NLI دستی

برای دیدن یک نمونه‌ی ساده و آموزشی که فقط با کتابخانه‌ی استاندارد پایتون نوشته شده، به فایل code/main.py نگاهی بیندازید: مقدمه و فرضیه از طریق اشتراک واژگانی به همراه شناسایی کلمات نفی‌کننده با هم مقایسه می‌شوند. این پیاده‌سازی توان رقابت با مدل‌های ترنسفورمر را ندارد، اما شاکله‌ی اصلی مسئله را به‌خوبی نشان می‌دهد: ورود دو متن، خروج یک برچسب 3-حالته، و تابع زیان (loss) از نوع آنتروپی متقاطع روی مجموعه‌ی {entail, contradict, neutral}.

چالش‌ها و خطاهای رایج

  • میان‌برهای فرضیه‌محور (Hypothesis-only shortcuts). مدل‌ها گاهی تنها با دیدن فرضیه به دقت حدود 60% روی SNLI می‌رسند؛ زیرا کلماتی مانند «not»، «nobody» و «never» معمولاً با برچسب تناقض همبستگی دارند. تست مدل تنها با فرضیه، بیس‌لاین قدرتمندی برای شناسایی نشت برچسب (label leakage) است.
  • هیوریستیکِ اشتراک واژگانی. این فرض ساده‌لوحانه که «هر زیردنباله‌ای از جمله مستلزم خود جمله است» بنچمارک SNLI را پشت سر می‌گذارد، اما در HANS/ANLI کاملاً شکست می‌خورد. حتماً از بنچمارک‌های رقابتی استفاده کنید.
  • افت عملکرد در متون طولانی. مدل‌های NLI تک‌جمله‌ای هنگام مواجهه با مقدمه‌هایی در سطح یک سند کامل، بیش از 20 نمره‌ی F1 افت می‌کنند. برای کانتکست‌های طولانی، از مدل‌های آموزش‌دیده روی DocNLI استفاده کنید.
  • حساسیت به قالب در روش صفر-داده. تفاوت قالب‌ها (مانند "This example is about {label}" در برابر "{label}" یا "The topic is {label}") می‌تواند دقت را تا بیش از 10 درصد بالا یا پایین ببرد. حتماً قالب را به‌دقت تنظیم کنید.
  • ناهمخوانی دامنه (Domain mismatch). دیتاست MNLI روی انگلیسی عمومی آموزش دیده است. متون حقوقی، پزشکی و علمی به مدل‌های NLI تخصصی همان دامنه نیاز دارند (مانند SciNLI یا MedNLI).

کاربرد در دنیای واقعی

استک پیشنهادی در سال 2026:

کاربرد مدل
NLI همه‌منظوره MoritzLaurer/DeBERTa-v3-large-mnli-fever-anli-ling-wanli
مدل‌های سریع / لبه (Edge) cross-encoder/nli-deberta-v3-base
دسته‌بندی صفر-داده (سبک) facebook/bart-large-mnli
NLI در سطح سند MoritzLaurer/DeBERTa-v3-large-mnli-fever-anli-ling-wanli
چندزبانه MoritzLaurer/multilingual-MiniLMv2-L6-mnli-xnli
تشخیص توهم در RAG لایه‌ی NLI داخل RAGAS یا DeepEval

الگوی کلی در سال 2026: NLI چسب زخمِ همه‌کاره‌ی فهم متن است. هر زمان با این سؤال روبه‌رو شدید که «آیا متن الف مؤید متن ب است؟» یا «آیا متن الف متن ب را نقض می‌کند؟»، قبل از این‌که سراغ یک فراخوانی LLM دیگر بروید، به 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:

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.

تمرین‌ها

  1. ساده. مدل facebook/bart-large-mnli را روی 20 سه‌تایی دست‌ساز (مقدمه، فرضیه، برچسب) از هر سه کلاس اجرا و دقت آن را اندازه‌گیری کنید. تله‌های رقابتی مبتنی بر «هیوریستیک زیردنباله» اضافه کنید (مانند «من کیک را نخوردم» در برابر «من کیک را خوردم») و ببینید آیا مدل فریب می‌خورد یا خیر.
  2. متوسط. سه قالبِ "This text is about {label}"، "The topic is {label}" و "{label}" را روی 100 تیتر خبری از AG News مقایسه کرده و دامنه‌ی تغییرات دقت را گزارش کنید.
  3. سخت. یک ابزار سنجش وفاداری پاسخ در RAG بسازید: خرد کردن پاسخ به ادعاهای اتمیک + بررسی NLI برای هر ادعا. سیستم را روی 50 پاسخ تولیدشده‌ی RAG همراه با کانتکست مرجع ارزیابی کنید و نرخ مثبت کاذب و منفی کاذب را در مقایسه با برچسب‌های دستی بسنجید.

اصطلاحات کلیدی

اصطلاح در گفت‌وگوها معنای دقیق فنی
NLI استنتاج زبان طبیعی دسته‌بندی سه‌حالته‌ی رابطه‌ی بین مقدمه و فرضیه.
RTE تشخیص استلزام متنی نام قدیمی‌تر NLI؛ دقیقاً همان وظیفه است.
Entailment «t یعنی h» خواننده‌ی معمولی با خواندن t نتیجه می‌گیرد که h درست است.
Contradiction «t نقض‌کننده‌ی h است» خواننده‌ی معمولی با خواندن t نتیجه می‌گیرد که h نادرست است.
Neutral «نامشخص» هیچ استنتاجی از t به h در هیچ جهتی ممکن نیست.
Zero-shot classification استفاده از NLI به عنوان کلاسیفایر تبدیل برچسب‌ها به فرضیه، و انتخاب بالاترین احتمال استلزام.
Faithfulness آیا پاسخ مستند است؟ اجرای NLI روی زوج (کانتکستِ بازیابی‌شده، پاسخ تولیدشده).

منابع بیشتر

خودآزمایی

به سؤال‌ها جواب بدهید تا ببینید چقدر از درس در ذهنتان مانده است.

  1. پیش از درسمدل NLI چه سه برچسبی را به یک زوج (فرض، فرضیه) اختصاص می‌دهد؟
  2. پیش از درسچگونه از NLI به‌عنوان طبقه‌بند متن صفر-شات استفاده می‌شود؟
  3. حین درسچرا NLI برای خروجی‌های RAG یک بررسی وفاداری به متن محسوب می‌شود؟
  4. حین درسخط‌پایه مبتنی بر «تنها فرضیه» (hypothesis-only) چه چیزی را آشکار می‌کند؟
  5. حین درسکدام خانواده از مدل‌های NLI در صدر لیدربوردهای 2026 به‌عنوان گزینه استاندارد قرار دارد؟
  6. پس از درسچرا دقت مدل‌های NLI سطح جمله در فرض‌های در حد طول سند کاهش می‌یابد؟
  7. پس از درسچرا ممکن است دقت صفر-شات بسته به قالب فرضیه بیش از 10 امتیاز تغییر کند؟
  8. پس از درسادعای مطمئن و منطقی درباره NLI برای تشخیص توهم چیست؟

سؤالات متداول

استنتاج زبان طبیعی (NLI) دقیقاً چه کاری انجام می‌دهد؟

مدل NLI رابطه‌ی میان دو جمله یعنی مقدمه (Premise) و فرضیه (Hypothesis) را بررسی می‌کند و مشخص می‌سازد که فرضیه مستلزم مقدمه است (Entailment)، آن را نقض می‌کند (Contradiction) یا وضعیتی خنثی و نامرتبط دارد (Neutral).

چگونه از NLI برای تشخیص توهم (Hallucination) در RAG استفاده می‌شود؟

پاسخ تولیدشده توسط سیستم به ادعاهای مستقل و خرد خرد می‌شود، سپس هر ادعا به عنوان فرضیه در برابر کانتکستِ بازیابی‌شده (به عنوان مقدمه) قرار می‌گیرد؛ اگر رابطه از نوع استلزام نباشد، آن ادعا یک توهم یا گزاره‌ی ساختگی در نظر گرفته می‌شود.

دسته‌بندی صفر-داده (Zero-shot) چگونه با NLI پیاده‌سازی می‌شود؟

متن ورودی نقش مقدمه را بازی می‌کند و هر برچسب دسته‌بندی در قالب یک جمله‌ی فرضیه (مثل «این متن درباره‌ی {برچسب} است») فرموله می‌شود؛ مدلی که بالاترین احتمال استلزام را بدهد، برچسب پیش‌بینی‌شده خواهد بود.

ما رو توی گوگل بیشتر ببین

با افزودن نکست ادمین به «منابع ترجیحی» گوگل، درس‌ها و مطالب ما را در بخش اخبار برتر جستجو بیشتر می‌بینید.