سرگشتگی (perplexity) و آنتروپی
آنتروپی، آنتروپی متقاطع، سرگشتگی — اسمهایی که در هر گزارش مدل میبینید و کمتر کسی توضیحشان میدهد. این درس با یک مربع ساده شروع میکند و به جایی میرسد که بتوانید با همین عددها بفهمید یک متن در دادهٔ آموزشی مدل بوده یا نه.
مدلهای پایه از دل مدلهای زبانی بیرون آمدهاند و هنوز بیشترشان یک مدل زبانی در مرکز دارند. عملکرد همین بخش با عملکرد مدل در کارهای واقعی همبستگی خوبی دارد. پس فهمیدن سنجههای مدل زبانی، حتی اگر هرگز مدلی آموزش ندهید، به انتخاب مدل کمک میکند.
این سنجهها از ۱۹۵۱ و مقالهٔ مشهور کلود شانون تقریباً عوض نشدهاند. چهار نام دارند — آنتروپی متقاطع، سرگشتگی (PPL)، بیت به ازای نویسه (BPC) و بیت به ازای بایت (BPB) — ولی هر چهار یک چیز را به چهار زبان میگویند: اگر یکی را بدانید، بقیه را میشود حساب کرد.
آنتروپی: هر توکن چقدر خبر دارد؟
آنتروپی میگوید هر توکن یک زبان بهطور میانگین چقدر اطلاعات دارد — و در نتیجه برای نمایشش چند بیت لازم است. یک مثال: میخواهید زبانی بسازید که جایی را در یک مربع توصیف کند.
در زبان الف فقط دو توکن هست: «بالا» یا «پایین». یک بیت برای نمایششان کافی است؛ آنتروپی ۱ است. در زبان ب چهار توکن هست و هر کدام جای دقیقتری میگوید، ولی دو بیت لازم دارد؛ آنتروپی ۲ است. شهود سادهاش: آنتروپی میسنجد پیشبینی بعدی چقدر سخت است. پیشبینی بین دو گزینه آسانتر از چهار گزینه است. و اگر بتوانید دقیقاً پیشبینی کنید من چه میگویم، حرفم برایتان هیچ خبر تازهای ندارد.
آنتروپی متقاطع: مدل چقدر از واقعیت دور است؟
هدف آموزش یک مدل زبانی این است که توزیع دادهٔ آموزشی را یاد بگیرد؛ یعنی بتواند پیشبینی کند در این داده چه چیزی بعد میآید. آنتروپی متقاطع مدل روی یک داده میسنجد پیشبینی آن داده برای این مدل چقدر سخت است. دو چیز در آن اثر دارند:
- خود داده چقدر قابلپیشبینی است — یعنی آنتروپی داده.
- توزیعی که مدل یاد گرفته چقدر با توزیع واقعی داده فاصله دارد — که با «واگرایی KL» سنجیده میشود.
بیت به ازای نویسه و بیت به ازای بایت
اگر آنتروپی متقاطع مدلی ۶ بیت باشد، یعنی برای نمایش هر توکن ۶ بیت لازم دارد. ولی مدلها توکنایزرهای متفاوتی دارند — یکی کلمه را توکن میداند و دیگری نویسه را — پس «بیت به ازای توکن» بین دو مدل قابلمقایسه نیست. راه حل، تقسیم بر واحدی مشترک است:
| سنجه | یعنی چه | مثال |
|---|---|---|
| BPC | بیت لازم برای هر نویسه | ۶ بیت برای هر توکن و میانگین ۲ نویسه در توکن ← BPC = ۳ |
| BPB | بیت لازم برای هر بایت دادهٔ اصلی | BPC = ۳ و هر نویسه ۷ بیت (⅞ بایت) ← BPB ≈ ۳٫۴۳ |
چرا BPB استانداردتر است؟ چون «نویسه» در رمزگذاریهای مختلف اندازهٔ متفاوتی دارد: در ASCII هر نویسه ۷ بیت است، ولی در UTF-8 بین ۸ تا ۳۲ بیت — و همانطور که در پروژهٔ فصل ۲ دیدید، هر حرف فارسی ۱۶ بیت (دو بایت). بایت برای همه یکی است.
سرگشتگی (perplexity)
سرگشتگی همان آنتروپی متقاطع است، در شکل «تعداد گزینه»: ۲ به توان آنتروپی متقاطع. اگر آنتروپی متقاطع میسنجد پیشبینی توکن بعدی چقدر سخت است، سرگشتگی میسنجد مدل در هر گام بین چند گزینه مردد است.
مدلی که زبان ب مربع را کامل یاد گرفته، آنتروپی متقاطعش ۲ بیت است؛ سرگشتگیاش ۲² = ۴ — یعنی برای هر جا بین ۴ گزینه انتخاب میکند. (کتابخانههایی مثل PyTorch بهجای بیت با «نَت» — لگاریتم طبیعی — کار میکنند و سرگشتگی را e به توان آنتروپی حساب میکنند. بهخاطر همین سردرگمی واحدها، خیلیها ترجیح میدهند سرگشتگی را گزارش کنند.)
سرگشتگی را چطور تفسیر کنیم
عدد «خوب» سرگشتگی به خود داده و نحوهٔ محاسبه بستگی دارد. سه قاعدهٔ کلی:
| قاعده | چرا | مثال |
|---|---|---|
| دادهٔ ساختاریافتهتر ← سرگشتگی کمتر | قابلپیشبینیتر است | کد HTML: بعد از <head> تقریباً مطمئنید </head> میآید |
| واژگان بزرگتر ← سرگشتگی بیشتر | گزینههای بیشتر برای انتخاب | سرگشتگی روی کتاب کودک کمتر از «جنگ و صلح»؛ سرگشتگی نویسهای کمتر از کلمهای |
| زمینهٔ بلندتر ← سرگشتگی کمتر | اطلاعات بیشتر برای پیشبینی | شانون با ۱۰ توکن قبلی؛ امروز ۵۰۰ تا ۱۰٬۰۰۰ توکن |
دیدن سرگشتگی ۳ یا حتی کمتر عجیب نیست. سرگشتگی ۳ یعنی — اگر همهٔ گزینهها هماحتمال بودند — مدل یک از سه شانس درست گفتن توکن بعدی را دارد. با واژگانی دهها یا صدها هزارتایی، این عدد شگفتانگیز است.
سرگشتگی نشانهٔ خوبی از توانایی مدل هم هست: مدلی که در پیشبینی توکن بعدی بد است، در کارهای واقعی هم احتمالاً بد است. گزارش GPT-2 این را روشن نشان میدهد:
| اندازهٔ GPT-2 | سرگشتگی روی LAMBADA |
|---|---|
| ۱۱۷ میلیون پارامتر | ۳۵٫۱۳ |
| ۳۴۵ میلیون | ۱۵٫۶۰ |
| ۷۶۲ میلیون | ۱۰٫۸۷ |
| ۱٫۵ میلیارد | ۸٫۶۳ |
سه کاربرد عملی سرگشتگی
- تشخیص نشت داده
سرگشتگی یک مدل روی متنی که در آموزش دیده و حفظ کرده، پایینترین است. اگر سرگشتگی مدل روی پرسشهای یک بنچمارک عجیب پایین است، احتمالاً آن بنچمارک در دادهٔ آموزشیاش بوده — و نمرهاش قابلاعتماد نیست.
- حذف تکراری از داده
دادهٔ تازه را فقط وقتی به مجموعهٔ آموزشی اضافه کنید که سرگشتگیاش بالا باشد — یعنی چیز تازهای برای مدل دارد.
- تشخیص متن غیرعادی
سرگشتگی برای متن غیرقابلپیشبینی بالاترین است: ایدههای عجیب («سگم در وقت آزادش فیزیک کوانتوم درس میدهد») یا متن بیمعنی («خانه گربه برو چشم»). پس میشود با آن متنهای ناهنجار — هرزنامه، متن خرابشده — را پیدا کرد.
سرگشتگی یک متن را چطور حساب کنیم
برای یک دنبالهٔ n توکنی، مدل به هر توکن — با دیدن توکنهای قبلی — یک احتمال میدهد. سرگشتگی، میانگین هندسیِ معکوس این احتمالها است. در عمل: میانگین لگاریتم احتمالها را بگیرید، منفی کنید، و به توان برسانید. در پروژهٔ همین فصل، همین را برای مدل زبانی کوچک ذهنیار مینویسید.
import math
def perplexity(token_probs: list[float]) -> float:
"""سرگشتگی = e به توان منفیِ میانگین لگاریتم احتمال توکنها."""
avg_log = sum(math.log(p) for p in token_probs) / len(token_probs)
return math.exp(-avg_log)
# مدلی که به هر توکن احتمال ۰٫۵ میدهد: بین ۲ گزینه مردد است
print(perplexity([0.5, 0.5, 0.5])) # 2.0
# مدلی که به هر توکن احتمال ۰٫۲۵ میدهد: بین ۴ گزینه
print(perplexity([0.25, 0.25])) # 4.0خودآزمایی
سرگشتگی یک مدل روی یک متن ۴ است. شهودیترین برداشت کدام است؟
سرگشتگی یک مدل روی پرسشهای یک بنچمارک عمومی بهطرز عجیبی پایین است. محتملترین توضیح چیست؟
چرا مقایسهٔ «بیت به ازای توکن» بین دو مدل مختلف گمراهکننده است، و BPB این را چطور حل میکند؟
سرگشتگی یک مدل بعد از RLHF بالا رفته. آیا یعنی مدل بدتر شده؟
مرور فلشکارتهای این درس
۷ کارت · ۰ مروروارد شوید تا پیشرفتتان ذخیره شود و از همینجا ادامه دهید.