چیت‌شیت

ارزیابی LLMها

Evaluating LLMs

تعیین وظایف، امتیازدهی، داوری با شیوه‌نامه‌ی نمره‌دهی، کالیبراسیون، رتبه‌بندی با فواصل اطمینان و آزمودن کانتکست طولانی.

  • ۱۲ بخش
  • ۱۳ درس مرتبط
  • کد و دستورها عیناً از دوره‌ی اصلی
فهرست مطالب
  1. اجراکننده‌ی ارزیابی سرتاسری
  2. امتیازدهی به یک وظیفه
  3. انتخاب و اجرای یک معیار
  4. API بستر آزمایشی
  5. قوانین پس‌پردازش
  6. فرمول‌های کلیدی
  7. حجم نمونه و اطمینان
  8. پیش‌فرض‌ها در کد
  9. عیب‌یابی
  10. کوتاه‌نوشت‌ها
  11. پرسش‌ها
  12. نکات

اجراکننده‌ی ارزیابی سرتاسری

معماری
renderمتنcode_execامتیازامتیازاطمینانگزارشtasks.jsonlvalidate_fileModelAdaptergenerate(prompt, task)post_processیک قانون به ازای هر وظیفهscoreهدایت با metric_nameCalibrationReportece, brierتجمع داده‌هاJSON + markdownEvalRunیکی به ازای هر مدل و وظیفهrun_candidatesubprocess، 3 ثانیه

امتیازدهی به یک وظیفه

گام‌به‌گام
  1. رندرنمونه‌های چندشات، سپس پرامپت، همراه با یک خط خالی میان آن‌ها.
  2. تطبیق‌دهندهتابع generate(prompt, task) متن و میزان اطمینان را بازمی‌گرداند. اجراکننده زمان آن را می‌سنجد.
  3. post_processتک‌قانون مربوط به وظیفه را اعمال می‌کند.
  4. هدایتتابع score برای معیارهای متنی، و run_candidate برای code_exec.
  5. EvalRunیک رکورد شامل امتیاز و نام معیار.
  6. بافر کالیبراسیونجفت (confidence, correct) را اضافه می‌کند.
  7. صحیحامتیاز 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٪
5019 امتیاز؛ قادر به تشخیص افت 5٪ نیست
10012 امتیاز؛ به سختی
2009 امتیاز؛ بله
5005 امتیاز؛ با اطمینان
10003 امتیاز؛ با دقت بالا

پیش‌فرض‌ها در کد

پیش‌فرض‌ها
تنظیمپیش‌فرضتوضیحات
DEFAULT_TIMEOUT_S3.0به ازای هر وظیفه؛ مقدار MAX_TIMEOUT_S برابر 30.0 است
OUTPUT_CAP_BYTES256 * 1024سپس خروجی برابر "output overflow" می‌شود
FEW_SHOT_MAX8نمونه‌های چندشات به ازای هر وظیفه
ECE `bins`10مقدار 15 عرف رایج مقایسه‌هاست
Bootstrap `b`500توابع کمکی سطح‌پایین از 1000 استفاده می‌کنند
alpha0.05فاصله‌ی صدکی 95٪
max_workers8استخر رشته‌ها (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 آزمایش کنید.
ترجمه‌ی فارسی چیت‌شیت Evaluating LLMs از دوره‌ی AI Engineering from Scratch، نوشته‌ی Rohit Ghumare، تحت مجوز MIT. کد و دستورها عیناً از متن اصلی‌اند. همه‌ی چیت‌شیت‌ها