چیتشیت
خلاصهسازی، QA، NLI و NLP چندزبانه
Summarization, QA, NLI and Multilingual NLP
خلاصهسازی، پاسخگویی، بررسی استلزام و انتقال بینزبانی. مدلها، معیارها، مقادیر پیشفرض و خطاها.
فهرست مطالب
QA مبتنی بر شواهد با گیت NLI
معماریوظایف در کد
کار و کد| وظیفه | کد |
|---|---|
| خلاصه استخراجی | textrank(text, top_k=3, damping=0.85, iterations=50, epsilon=1e-4) |
| خلاصه انتزاعی | pipeline("summarization", model="facebook/bart-large-cnn") |
| تولید خلاصه | summarizer(article, max_length=120, min_length=60, do_sample=False) |
| ROUGE با ریشهیابی صرفی | rouge_scorer.RougeScorer(["rouge1", "rouge2", "rougeL"], use_stemmer=True) |
| پاسخ به سوالات استخراجی | pipeline("question-answering", model="deepset/roberta-base-squad2") |
| مجاز بودن پاسخ خالی | pass `handle_impossible_answer=True` to the pipeline call |
| معیارهای SQuAD | `exact_match(pred, gold)` and `token_f1(pred, gold)` |
| برچسبهای موضوعی صفر-نمونه | zs(text, candidate_labels=labels) |
نرمالسازی SQuAD
کدpython
def normalize(text):
text = text.lower()
text = re.sub(r"\b(a|an|the)\b", " ", text) # حذف حروف تعریف
text = re.sub(r"[^\w\s]", " ", text) # حذف علائم نگارشی
return " ".join(text.split())
exact_match("June 29th, 2007", "June 29, 2007") # 0.0
token_f1("June 29th, 2007", "June 29, 2007") # 0.67
token_f1("29 June 2007", "June 29, 2007") # 1.00، ولی EM برابر 0 است
refusal_from_score(top_retrieval_score, threshold=0.3) # True یعنی رد پاسخ
TextRank، گامبهگام
گامبهگام- تقسیم
sentence_splitبعد از.،!یا?برش میزند. جملات کم: بازگرداندن همه. - گراف
similarityهمان همپوشانی کلمات تقسیم بر لگاریتم مجموع طول هر دو است. - تکرارهر امتیاز برابر
1 - dampingبهعلاوهی امتیازهای همسایه با ضریب میرایی است. - توقفتغییر کمتر از
epsilon، یا اتمام دورهایiterations. - خروجیتعداد
top_kجمله برتر، به همان ترتیب سند.
معیارها
مفهومها- ROUGE-1 و ROUGE-2
- همپوشانی تکگرام و دوگرام با مرجع.
- ROUGE-L
- طولانیترین زیردنبالهی مشترک. 40 خوب است. 50 فوقالعاده است.
- EM
- تطابق دقیق پس از نرمالسازی؛ در غیر این صورت امتیاز 0 است.
- F1 در سطح توکن
- $F_1 = \frac{2PR}{P + R}$ روی همپوشانی توکنها؛ امتیاز نسبی میدهد.
- BERTScore
- شباهت امبدینگ زمینهای. کنار ROUGE گزارش شود.
- G-Eval
- داوری با LLM همراه با زنجیره تفکر. در ~80% موارد با انسان همنظر است.
- F1 در سطح موجودیت
- موجودیتهایی که صرفاً در خلاصه آمدهاند مشکوک هستند.
- RAGAS
- وفاداری، ارتباط پاسخ، دقت زمینه، بازخوانی زمینه.
پرسشها
پرسش و پاسخ- استخراجی یا انتزاعی؟
- استخراجی برای متنهای خبری، پزشکی، حقوقی و مالی. انتزاعی نیازمند بررسی صحت فکتها است.
- دستهبندی صفر-نمونه چطور کار میکند؟
- هر برچسب تبدیل به یک فرضیه میشود. برچسب با بالاترین استلزام را انتخاب کنید.
- کدام زبان مبدأ برای انتقال؟
- اول خویشاوند نزدیک پرمنبع را امتحان کنید؛ مثلاً هندی برای زبانهای هندوآریایی.
- چرا دقت به تفکیک زبان؟
- میانگین کل، دم بلند زبانهای ضعیف را پنهان میکند.
- آیا RAGAS به پاسخهای مرجع نیاز دارد؟
- خیر. چهار بعد را بدون مراجع امتیازدهی میکند.
نکات کاربردی
نکتهها- در ROUGE همیشه از ریشهیابی صرفی استفاده کنید؛ وگرنه «running» و «run» تطابق نمییابند.
- معیارهای ROUGE-L، BERTScore و G-Eval را گزارش کنید. روی 50 تا 100 خلاصهی برچسبخورده انسانی کالیبره کنید.
- به مدل دستور دهید فقط از زمینه استفاده کند و در صورت لزوم بگوید «نمیدانم».
- همیشه فیلد
scoreپایپلاین QA را بررسی کنید. - پیش از راهاندازی دستهبندی صفر-نمونه در محیط عملیاتی، آزمون بررسی سلامت با 100 نمونه برچسبدار اجرا کنید.
- برای ورودیهای بزرگتر از پنجرهی بافتار، بهجای کوتاهسازی از map-reduce تکهتکه استفاده کنید.
NLI و وفاداری
کدpython
nli = pipeline("text-classification",
model="facebook/bart-large-mnli",
top_k=None) # بازگرداندن هر سه برچسب
result = nli({"text": premise, "text_pair": hypothesis})[0]
zs = pipeline("zero-shot-classification", model="facebook/bart-large-mnli")
result = zs(text, candidate_labels=labels) # برچسبها مرتب بر اساس امتیاز
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 # زمینه از ادعا پشتیبانی میکند
عیبیابی
عیبیابیخلاصه میگوید «جان براون»
- علت
- جابهجایی موجودیت در خروجی انتزاعی
- راهحل
- علامتگذاری موجودیتهایی که در منبع نیستند
«25,000» میشود «25 میلیون»
- علت
- دریفت اعداد
- راهحل
- استفاده از روش استخراجی یا گیت سنجش صحت فکتها
بازگرداندن اسپن برای پرسش بدون پاسخ
- علت
- نادیدهگرفتن امتیاز Null بهطور پیشفرض
- راهحل
- تنظیم
handle_impossible_answer=True
خواننده ضعیف عمل میکند
- علت
- بازیاب پاساژ را پیدا نکرده است
- راهحل
- اندازهگیری بازخوانی بازیابی در
kمورد برتر
~60% امتیاز فقط از روی فرضیه
- علت
- کلماتی مثل «not» و «never» برچسب را لو میدهند
- راهحل
- خط مبنا فقط با فرضیه، ANLI
افت 20+ نمرهای F1 روی مقدمههای طولانی
- علت
- مدل NLI در سطح جمله
- راهحل
- استفاده از مدلی که روی DocNLI آموزش دیده
نوسان 10+ نمرهای در صفر-نمونه
- علت
- حساسیت به پرامپت الگو
- راهحل
- تنظیم دقیق
hypothesis_template
نادرستی جزئی در خروجی زبان هندی
- علت
- 3 تا 5 برابر توکن به ازای هر کلمه
- راهحل
- بررسی نرخ باروری،
byte_fallback=True
پیشفرضها و ارقام
پیشفرضها| تنظیم | پیشفرض | توضیح |
|---|---|---|
TextRank `damping` | 0.85 | پیشفرض PageRank |
TextRank `iterations` | 50 | توقف زودهنگام در صورت کمتر شدن از epsilon برابر 1e-4 |
BART `max_length` | 120 | با min_length=60 |
Refusal `threshold` | 0.3 | امتیاز بازیابی برتر پایینتر از آن باشد: رد پاسخ |
`is_faithful` threshold | 0.5 | امتیاز استلزام باید بالاتر از آن باشد |
Few-shot examples | 100-500 | زبان مقصد؛ 95-98% زبان انگلیسی |
learning_rate | 2e-5 | نرخهای بالاتر باعث بههمریختگی همترازی میشوند |
num_train_epochs | 5 | ایمن برای 100 تا 500 نمونه |
اختصارات
اصطلاحها- ROUGE
- ارزیابی خلاصهسازی مبتنی بر بازخوانی. همپوشانی N-gram و LCS.
- SQuAD
- دیتاست پاسخ به سوالات استنفورد. معیارهای EM و F1.
- NLI
- استنتاج زبان طبیعی؛ استلزام، تناقض یا خنثی.
- RTE
- تشخیص استلزام متنی؛ نام قدیمیتر NLI.
- MultiNLI
- تعداد 433k جفتمتن در 10 ژانر مختلف. پیکره متنی استاندارد آموزش NLI.
- ANLI
- انالآی چالشبرانگیز؛ جفتهایی که انسانها برای شکستدادن مدلها نوشتهاند.
- XLM-R
- مدل RoBERTa صدزبانه آموزشدیده روی CommonCrawl. نسخه Base با 270M و Large با 550M.
- NLLB
- پروژهی متوقف نشدن هیچ زبانی؛ 200 زبان شامل 55 زبان کممنبع.
انتخاب مدل
دستورها| دستور | کاربرد |
|---|---|
facebook/bart-large-cnn | خلاصه خبری 3 تا 5 جملهای، انگلیسی |
google/pegasus-pubmed | خلاصهسازی مقالات علمی |
philschmid/bart-large-cnn-samsum | خلاصهسازی گفتگوها |
deepset/roberta-base-squad2 | بخش پاسخ از یک پاساژ مشخص |
facebook/bart-large-mnli | دستهبندی صفر-نمونه سبکوزن |
cross-encoder/nli-deberta-v3-base | NLI سریع برای دستگاههای لبه (Edge) |
joeddav/xlm-roberta-large-xnli | دستهبندی صفر-نمونه در زبانهای متعدد |
facebook/nllb-200-distilled-600M | ترجمه، 200 زبان |