آموزشمدل‌های زبانی بزرگ (LLM)

درس ۲۷ از ۸۵، هوش مصنوعی، حدود ۱۲ دقیقه خواندن

نمونه‌برداری top-k و top-p

جواب کوتاه

top-k و top-p دو راه برای بریدن «دم» احتمال‌ها قبل از قرعه‌ان؛ یعنی هزاران تکه‌ی کم‌احتمال که هر کدوم شانس کوچیکی دارن ولی جمعشون زیاده. top-k فقط k تکه‌ی اول رو نگه می‌داره. top-p تکه‌ها رو از پراحتمال‌ترین جمع می‌کنه تا جمع احتمالشون به p برسه، مثلا ۹۰ درصد، و بقیه رو می‌بره. بعد احتمال‌های باقی‌مونده از نو طوری بزرگ می‌شن که جمعشون صد بشه. top-p بهتر با موقعیت کنار میاد: جایی که گزینه‌ی معقول زیاده، بیشتر نگه می‌داره؛ جایی که جواب روشنه، کمتر.

دم دراز

قرعه از همه‌ی احتمال‌ها یه مشکل داره: دم دراز. حالا ببینیم چطور می‌شه دم رو قبل از قرعه برید.

توی درس انتخاب محتمل‌ترین دیدیم قرعه از همه‌ی احتمال‌ها متن رو پرت می‌کنه. دلیلش اینجاست: یه مدل واقعی ده‌ها هزار تکه توی واژه‌نامه داره. چند تاش معقول‌ان و احتمالشون بالاست؛ به این‌ها می‌گیم «سر». بقیه، هزاران تکه‌ی بی‌ربط، هر کدوم یه شانس خیلی کوچیک دارن؛ به این‌ها می‌گیم «دم».

هر کدوم از تکه‌های دم تنهایی تقریبا بی‌خطره. ولی وقتی هزاران تا باشن، جمع شانسشون کم نیست، و هر چند قدم یه بار یکیشون برنده می‌شه. همون یه تکه‌ی پرت می‌تونه کل جمله رو از مسیرش خارج کنه. پس ایده ساده‌ست: قبل از قرعه، دم رو ببریم. سوال فقط اینه که از کجا.

top-k: چند تای اول

ساده‌ترین جواب: یه عدد ثابت انتخاب کن، مثلا ۳، و فقط همون سه تای اول رو نگه دار. به این می‌گن top-k، که k همون عدده.

با مدل کوچیک خودمون، بعد از «شروع» هفت تکه داریم. با k برابر ۳، فقط «صبح» و «عصر» و «چای» می‌مونن. ولی جمع احتمالشون حالا ۶۷ درصده، نه صد. پس احتمال‌ها از نو حساب می‌شن، به همون نسبت، تا جمعشون صد بشه: «صبح» می‌شه ۵۰ درصد و دو تای دیگه هر کدوم ۲۵. بعد قرعه فقط بین همین سه تا کشیده می‌شه.

top-p: تا یه درصد

راه دوم، به‌جای تعداد، یه درصد انتخاب می‌کنه. تکه‌ها رو از پراحتمال‌ترین شروع می‌کنیم و احتمالشون رو جمع می‌زنیم، تا جمع به یه عدد مثل ۹۰ درصد برسه. همون‌جا می‌بریم. به این می‌گن top-p، یا «نمونه‌برداری هسته‌ای».

دوباره بعد از «شروع»: «صبح» ۳۳، با «عصر» می‌شه ۵۰، با «چای» ۶۷، با «شب» ۷۵، با «هوا» ۸۳، و با «امروز» ۹۲ درصد. از ۹۰ گذشت، پس همین شش تا می‌مونن و فقط «قهوه» بیرون می‌ره. اگه p رو ۶۰ درصد می‌ذاشتیم، بعد از «چای» به ۶۷ می‌رسیدیم و فقط سه تا می‌موندن؛ دقیقا مثل top-k با ۳.

فرق اصلی اینجاست: توی top-k تعداد ثابته، توی top-p تعداد خودش بالا و پایین می‌ره. بستگی داره احتمال‌ها اون لحظه چه شکلی باشن.

چرا k ثابت جواب نمی‌ده

پژوهش ۲۰۱۹ که top-p رو معرفی کرد، دقیقا همین مشکل رو نشون داد. بیاید با دو تا مثال ساده ببینیم؛ عددها رو خودمون فرض کردیم:

ناهار: «امروز ناهار … خوردم». کلی جواب معقول هست و احتمال‌ها پخش‌ان؛ هیچ‌کدوم خیلی جلو نیست. top-k با ۳ فقط سه غذا رو نگه می‌داره و پیتزا و املت و سالاد رو، که کاملا معقول‌ان، می‌بره. نتیجه؟ جواب‌ها کلیشه‌ای. top-p با ۹۰ درصد، هفت غذا رو نگه می‌داره و «آسمون» رو می‌بره.

پایتخت: «پایتخت فرانسه …». اینجا جواب روشنه: «پاریس» ۹۱ درصد. top-k با ۵، چهار تا گزینه‌ی دیگه رو هم نگه می‌داره، از جمله «میز» که هیچ ربطی نداره، و حتی شانسش رو یه کم بیشتر هم می‌کنه. top-p با ۹۰ درصد، فقط «پاریس» رو نگه می‌داره، چون خودش تنهایی از ۹۰ رد شده.

پس هیچ k ثابتی برای هر دو جا خوب نیست: k کوچیک، ناهار رو خراب می‌کنه؛ k بزرگ، پایتخت رو. top-p خودش با شکل احتمال‌ها جور می‌شه.

min-p: مرزی که با اولی جابه‌جا می‌شه

top-p هم بی‌گیر نیست. یه پژوهش ۲۰۲۴ یه راه سوم پیشنهاد داد.

پژوهش گفت top-p، مخصوصا وقتی دما بالاست، گاهی نمی‌تونه هم کیفیت رو نگه داره هم تنوع رو، و متن پرت یا تکراری می‌سازه. پیشنهادش min-p بود: مرز بریدن ثابت نیست، به احتمال اولین تکه بستگی داره. مثلا اگه min-p یک دهم باشه، هر تکه‌ای که احتمالش کمتر از یک دهم احتمال اولی باشه کنار می‌ره. توی مثال ساختگی، وقتی مدل مطمئنه و اولی ۸۰ درصده، مرز می‌شه ۸ درصد و چند تکه حذف می‌شن؛ وقتی مدل مردده و اولی ۳۰ درصده، مرز می‌شه ۳ درصد و همه می‌مونن.

اون پژوهش گفت این روش، روی چند خانواده و چند اندازه‌ی مدل، هم کیفیت و هم تنوع رو بهتر کرد، به‌خصوص با دمای بالا؛ و آدم‌هایی که متن‌ها رو داوری کردن، متن min-p رو ترجیح دادن. چند تا ابزار متن‌باز معروف هم این روش رو اضافه کردن.

توی مدل واقعی

همون پژوهش این روش‌ها رو روی یه مدل زبانی واقعی هم مقایسه کرد. یکی از سنجه‌هاش، مثل درس‌های قبل، درصد تکرار بود:

هر دو روش خیلی بهتر از «همیشه محتمل‌ترین» بودن، که ۷۳٫۶۶ درصد تکرار داشت. top-p با ۰٫۹۵ به متن آدم‌ها نزدیک‌تر بود: ۰٫۳۶ درصد، در برابر ۰٫۲۸ درصد متن آدم‌ها. یه سنجه‌ی دیگه‌شون هم این بود که متن ساخته‌شده چقدر برای خود مدل «غافلگیرکننده»‌ست؛ و اونجا هم top-p از همه به متن آدم‌ها نزدیک‌تر بود. یعنی نه زیادی قابل‌انتظار، نه زیادی پرت.

با دما و توی عمل

این روش‌ها با دما هم ترکیب می‌شن. دما شکل احتمال‌ها رو عوض می‌کنه، و top-k یا top-p دم رو می‌بره. توی همون پژوهش، یکی از حالت‌هایی که سنجیدن top-k با ۴۰ و دمای ۰٫۷ بود.

توی مستندات Claude هم هر دو هستن: top_k «برای حذف جواب‌های کم‌احتمال دم دراز»، و top_p همون نمونه‌برداری هسته‌ای؛ و برای هر دو نوشته «فقط برای کاربردهای پیشرفته». ولی مثل دما، این‌ها هم توی مدل‌های تازه‌تر Claude کنار گذاشته شدن: top_k دیگه قبول نمی‌شه، و top_p فقط اگه ۰٫۹۹ یا بیشتر باشه. پس اگه با یه مدل تازه کار می‌کنید، این تنظیم‌ها دست شما نیست، و بهترین ابزارتون همون نوشتن روشن درخواسته.

چند نکته

  • مشکل، دمه. هزاران تکه‌ی کم‌احتمال که جمعشون زیاده.
  • top-k تعداد ثابت نگه می‌داره. ساده، ولی همه‌جا خوب نیست.
  • top-p درصد ثابت نگه می‌داره. تعدادش خودش جور می‌شه.
  • بعد از بریدن، احتمال‌ها از نو. تا جمعشون صد بشه.
  • با دما ترکیب می‌شن. دما شکل رو عوض می‌کنه، این‌ها دم رو می‌برن.

درس بعد از انتخاب تکه می‌ره سراغ اینکه مدل یه‌جا چقدر متن می‌تونه ببینه: پنجره‌ی زمینه.

جمع‌بندی. آنچه از این درس با خودتان می‌برید.

  • دم: هزاران تکه‌ی کم‌احتمال.
  • top-k: فقط k تای اول.
  • top-p: تا جمعشون به p برسه.
  • بعد احتمال‌ها از نو، تا جمعشون صد.
  • top-p با شکل احتمال‌ها کنار میاد.

خودتون رو بسنجید

۱۵ پرسش، هر بار تازه از میان ۳۰ پرسش این درس. آخرش فقط کارنامه رو می‌بینید: چند تا درست، چند تا نادرست.

خودتون رو بسنجید

۱۵ پرسش

  • هر بار پرسش‌ها و ترتیب گزینه‌ها عوض می‌شه.
  • تا آخر نمی‌گیم کدوم جواب درست بوده؛ می‌تونید برگردید و جوابتون رو عوض کنید.
  • آخرش کارنامه می‌گیرید: چند تا درست، چند تا نادرست.
  • اگه وسطش بستید، دوباره که باز کنید از همون‌جا ادامه می‌دید.

فصل‌های این درس

درس بعد