چیتشیت
ارزیابی LLMها
Evaluating LLMs
تعیین وظایف، امتیازدهی، داوری با شیوهنامهی نمرهدهی، کالیبراسیون، رتبهبندی با فواصل اطمینان و آزمودن کانتکست طولانی.
فهرست مطالب
اجراکنندهی ارزیابی سرتاسری
معماریامتیازدهی به یک وظیفه
گامبهگام- رندرنمونههای چندشات، سپس پرامپت، همراه با یک خط خالی میان آنها.
- تطبیقدهندهتابع
generate(prompt, task)متن و میزان اطمینان را بازمیگرداند. اجراکننده زمان آن را میسنجد. - post_processتکقانون مربوط به وظیفه را اعمال میکند.
- هدایتتابع
scoreبرای معیارهای متنی، وrun_candidateبرایcode_exec. - EvalRunیک رکورد شامل امتیاز و نام معیار.
- بافر کالیبراسیونجفت (confidence, correct) را اضافه میکند.
- صحیحامتیاز 1 برای exact_match، accuracy و code_exec؛ حداقل 0.5 برای معیارهای نمرهگذاریشده.
انتخاب و اجرای یک معیار
کار و کد| وظیفه | کد |
|---|---|
| امتیازدهی به محاسبات | `"exact_match"` with `"strip_whitespace"` |
| امتیازدهی به چندگزینهای | `"exact_match"` with `"extract_letter"` |
| امتیازدهی به کد تولیدشده | `"code_exec"` with `"extract_code_block"` |
| امتیازدهی به خلاصهسازی | `"rouge_l"` or `"bleu_4"` |
| بازه روی نرخ قبولی | wilson_confidence_interval(successes, total, z=1.96) |
| رتبهبندی با بردهای دوبهدو | ELOTracker(k=32, initial_rating=1500) |
| قراردادن سوزن | build_haystack(filler_text, needle, depth_ratio, total_tokens) |
| اجرای بنچمارک عمومی | lm_eval --model hf --model_args pretrained=<model> --tasks mmlu |
API بستر آزمایشی
کدpython
tasks, errors = validate_file("tasks.jsonl") # در صورت وجود خطا اجرا نشود
s = score("f1", prediction, targets) # بهترین F1 روی تارگتها
s = score_code_exec(prediction, assertions) # قبولشده / کل، با محدودیت 3 ثانیه
p = pass_at_k(n=10, c=3, k=5) # برآوردگر نااریب
report = CalibrationReport.from_predictions(confidences, correct)
report.ece, report.brier, report.populated_bins # پیشفرض bins=10
ppl = perplexity(neg_log_probs, token_counts) # exp(total nll / tokens)
rows = aggregate(runs, b=500, alpha=0.05) # میانگین، فاصلهی اطمینان بوتاسترپ، نرخ برد
print(render_markdown(rows)) # جدول برای کامنت PR
قوانین پسپردازش
دستورها| دستور | عملکرد |
|---|---|
none | رشته را بدون تغییر بازمیگرداند |
strip_whitespace | فاصلههای خالی ابتدا و انتهای رشته را حذف میکند |
lower | حروف رشته را کوچک میکند |
extract_letter | اولین کاراکتر در [A-E]؛ برای MCQ |
extract_code_block | بدنهی اولین بلوک کد؛ برای کدها |
extract_first_line | اولین خط غیرخالی؛ برای دستههای خلاصهسازی |
فرمولهای کلیدی
مفهومها- پرپلکسیتی
- $\mathrm{PPL} = \exp\left(-\frac{1}{N} \sum_i \log P(\text{token}_i \mid \text{context})\right)$
- F1 در سطح توکن
- $\frac{2 P R}{P + R}$. P و R همپوشانی توکنها روی پیشبینی و هدف هستند.
- BLEU-4
- جریمهی کوتاهی طول ضربدر میانگین هندسی $p_1$ تا $p_4$.
- جریمهی کوتاهی طول
- 1 اگر $c \ge r$، در غیر این صورت $\exp(1 - r / c)$.
- ROUGE-L
- مقدار LCS روی طول مرجع و روی طول کاندیدا، سپس محاسبهی F1.
- pass@k
- برابر $1 - \binom{n - c}{k} / \binom{n}{k}$ برای $c$ قبولی از میان $n$ نمونه.
- ECE
- تفاضل اطمینان و دقت در هر بین، وزندهیشده با اندازهی بین، و سپس مجموع آنها.
- Brier
- $\mathrm{mean}((p_i - y_i)^2)$. پراکندگیهایی را که ECE نادیده میگیرد جریمه میکند.
حجم نمونه و اطمینان
دستورها| Test cases at 90% | عرض فاصلهی اطمینان 95٪ |
|---|---|
50 | 19 امتیاز؛ قادر به تشخیص افت 5٪ نیست |
100 | 12 امتیاز؛ به سختی |
200 | 9 امتیاز؛ بله |
500 | 5 امتیاز؛ با اطمینان |
1000 | 3 امتیاز؛ با دقت بالا |
پیشفرضها در کد
پیشفرضها| تنظیم | پیشفرض | توضیحات |
|---|---|---|
DEFAULT_TIMEOUT_S | 3.0 | به ازای هر وظیفه؛ مقدار MAX_TIMEOUT_S برابر 30.0 است |
OUTPUT_CAP_BYTES | 256 * 1024 | سپس خروجی برابر "output overflow" میشود |
FEW_SHOT_MAX | 8 | نمونههای چندشات به ازای هر وظیفه |
ECE `bins` | 10 | مقدار 15 عرف رایج مقایسههاست |
Bootstrap `b` | 500 | توابع کمکی سطحپایین از 1000 استفاده میکنند |
alpha | 0.05 | فاصلهی صدکی 95٪ |
max_workers | 8 | استخر رشتهها (Thread pool) در run_eval |
ELO `k` | 32 | ریتینگ اولیه 1500 |
عیبیابی
عیبیابیپرپلکسیتی کمتر از 1
- علت
- تطبیقدهنده log p بازمیگرداند، نه log p-
- راهحل
- قرینهسازی کنید؛ تابع آن را رد میکند
پرپلکسیتی بیش از حد خوب است
- علت
- پدینگ در مخرج کسر شمرده شده است
- راهحل
- فقط توکنهای غیر پدینگ را بشمارید
امتیازهای داور ثبت نمیشوند
- علت
- فرمت نامعتبر JSON مقدار NaN میدهد و میانگین آن را حذف میکند
- راهحل
- آن را به عنوان یک شکست صریح مدیریت و ثبت کنید
داور به مدل خود امتیاز بالایی میدهد
- علت
- خودارزیابی 10 تا 20٪ اریب مثبت ایجاد میکند
- راهحل
- داوری را با یک خانوادهی مدل دیگر انجام دهید
داور در مقایسهی دوبهدو همیشه اولین گزینه را برمیگزیند
- علت
- اریب موقعیت (Position bias)
- راهحل
- ترتیب را تصادفی کنید و هر دو حالت را بسنجید
میانگین 0.85 است ولی کاربران ناراضیاند
- علت
- میانگین خطاهای فاجعهبار 5٪ را پنهان میکند
- راهحل
- چندک (کوانتایل) پایینی را بررسی کنید
قبولی در NIAH، شکست در اسناد واقعی
- علت
- آزمون NIAH فقط بازیابی را میسنجد
- راهحل
- معیار RULER یا آزمون چندگامی اضافه کنید
یک وظیفه روی میانگین غلبه کرده است
- علت
- امتیاز در بازهی [0, 100]
- راهحل
- مقادیر را به صورت کسری در [0, 1] برگردانید
کوتاهنوشتها
اصطلاحها- EM
- تطابق دقیق. 1 یا 0 به ازای هر وظیفه پس از نرمالسازی.
- ECE
- خطای کالیبراسیون مورد انتظار. فاصلهی بین اطمینان و دقت.
- MMLU
- درک زبان چندوظیفهای حجیم. 15,908 سوال در 57 موضوع.
- HumanEval
- 164 مسئلهی تکمیل تابع در پایتون.
- SWE-bench
- 2,294 ایشوی گیتهاب از 12 ریپوی پایتون.
- NIAH
- سوزن در انبار کاه. کاشتن یک واقعیت میان عبارت پرکننده و بازخواست آن.
- MRCR
- رفع ابهام مرجع چندنوبته. 8، 24 یا 100 سوزن.
- RAGAS
- ارزیابی تولید مبتنی بر بازیابی. چهار معیار برای RAG.
پرسشها
پرسش و پاسخ- چند نمونهی آزمایشی لازم است؟
- حداقل 200 نمونه برای تصمیم استقرار؛ 500 یا بیشتر برای سیستمهای نزدیک به هم.
- چرا گزارش pass@1 هم لازم است؟
- معیار pass@k مدلی را که فقط یک بار در بیست تلاش درست پاسخ میدهد پنهان میکند.
- تفاوت چه زمانی واقعی است؟
- زمانی که بازهی بوتاسترپِ تفاضل زوجی، شامل صفر نباشد.
- چه زمانی میتوان به داور اعتماد کرد؟
- وقتی ضریب همبستگی اسپیرمن با برچسبهای انسانی 0.7 یا بیشتر باشد.
- طول واقعی کانتکست چقدر است؟
- طول موثر برای استدلال معمولاً 25 تا 50٪ پنجرهی اعلامشده است.
نکات
نکتهها- هر امتیاز شیوهنامهی نمرهدهی را به یک رفتار مشاهدهپذیر مقید کنید؛ واریانس داور 30 تا 40٪ کاهش مییابد.
- مدل داور و نسخهی آن را فریز کنید.
- فایلهای وظایف را با هش در تابلوی امتیازات پین کنید.
- تفاوتهای بازنگری را روی پیشبینیها ببینید، نه فقط امتیازها. از
--include-per-exampleاستفاده کنید. - نمونههای ارزیابی را از پرامپتها و دادههای آموزش جدا نگه دارید.
- عمق سوزن را در مقادیر 0، 0.25، 0.5، 0.75 و 1.0 آزمایش کنید.