پیشبینی تکهی بعد: تمام کار مدل
جواب کوتاه
مدل زبانی بزرگ فقط یه کار میکنه: به متنی که تا اینجا اومده نگاه میکنه و برای هر تکهی ممکن، یه احتمال میده که بعدی اون باشه. سادهترین راه ساختن همچین مدلی شمردنه: توی یه عالمه متن بشمری بعد از هر کلمه، چی چند بار اومده. هر چی به متن بیشتری قبلش نگاه کنی، حدس بهتر میشه؛ ولی جملههای بلند تقریبا هیچوقت دو بار تکرار نمیشن، پس شمردن کم میاره. برای همین مدلهای امروزی به جای شمردن، یه شبکهی عصبی دارن که شباهتها رو یاد گرفته. و چون ترجمه، جواب سوال، خلاصه و حتی حساب رو میشه به شکل «این متن رو ادامه بده» نوشت، همهی این تواناییها از همین یه کار درمیاد.
یه کار
یه چتبات ترجمه میکنه، حساب میکنه، خلاصه مینویسه. به نظر سه تا مهارت جداست. ولی برای خود مدل، هر سه دقیقا یه کارن:
به هر کدوم نگاه کنید: یه متن هست که آخرش یه جای خالی داره. «سیب به انگلیسی:» و بعدش جای خالی. «۲۳ به اضافهی ۱۹ مساوی» و بعدش جای خالی. یه متن بلند و «خلاصهش:» و بعدش جای خالی. مدل فقط یه سوال جواب میده: تکهی بعدی این متن چیه؟
توی درس مدل زبانی بزرگ چیست دیدیم که جوابها تکه به تکه ساخته میشن. این درس همون یه قدم رو از نزدیک نگاه میکنه: احتمال تکهی بعد دقیقا یعنی چی، از کجا میاد، و چرا همین یه کار اینقدر قدرتمنده.
احتمال یعنی چی
مدل نمیگه «کلمهی بعد چایه». میگه «با این احتمال چای، با این احتمال نون، با این احتمال قهوه…». یعنی برای هر تکهای که بلده، یه عدد:
اینها رو مثل شانس بخونید. ۵۰ درصد یعنی از هر دو بار، تقریبا یه بار. جمع همهی این عددها همیشه صد درصده، چون بالاخره یکیشون باید بیاد. این همون احتمالیه که توی مسیر یادگیری ماشین دیدیم.
یه مدل واقعی معمولا دهها یا صدها هزار تکه بلده، پس برای هر قدم همینقدر عدد میده. بیشترشون خیلی کوچیکن؛ چند تاش بزرگ. بعد برنامه از بین اینها یکی رو انتخاب میکنه. اینکه چطور انتخاب کنه، درسهای ایستگاه «ساختن متن» مفصل میگن؛ فعلا مهم اینه که خروجی مدل یه جواب نیست، یه توزیع احتمال هست.
یه مدل کوچیک با شمردن
اون عددهای بالا از کجا اومدن؟ از همین دوازده جمله. بیاید خودمون یه مدل زبانی بسازیم:
- من چای میخورم
- من چای میخورم
- من قهوه میخورم
- من نون میخرم
- من مدرسه میرم
- تو چای میخوری
- مادرم چای میخوره
- مادرم نون میخره
- من چای دوست دارم
- تو قهوه دوست داری
- من نون میخورم
- من چای میخرم
سادهترین مدل زبانی اینجوری کار میکنه: میشمره بعد از هر کلمه، چی چند بار اومده. توی این دوازده جمله، «من» هشت بار اومده که بعدش یه کلمه هست. چهار بارش بعدش «چای» اومده، دو بار «نون»، یه بار «قهوه» و یه بار «مدرسه». پس احتمال «چای» بعد از «من» میشه چهار از هشت، یعنی ۵۰ درصد. همون میلههای بالا.
همین. این یه مدل زبانی واقعیه؛ قدیمیترین و سادهترین نوعش. مدلهای زبانی اول، قبل از شبکههای عصبی، همینجوری ساخته میشدن: با شمردن دنبالهی کلمهها، روی متنهای خیلی بزرگتر. حتی سال ۱۹۵۱ یه دانشمند با آزمایش حدس حرف بعد، سنجیده بود زبان چقدر قابل پیشبینیه.
یه کلمه یا دو کلمه
حالا فرض کنید مدل ما تا اینجا ساخته «من چای». کلمهی بعد چیه؟ بستگی داره به چند تا کلمهی قبل نگاه کنیم:
اگه فقط به یه کلمهی قبل، یعنی «چای»، نگاه کنیم، توی دوازده جمله شش بار بعد از «چای» یه چیزی اومده: دو بار «میخورم» و یه بار هر کدوم از «میخوری»، «میخوره»، «دوست» و «میخرم». یعنی مدل ممکنه «میخوری» رو انتخاب کنه و بسازه «من چای میخوری»؛ جملهای که غلطه. مدل یادش رفته اول جمله «من» بود.
اگه به دو کلمهی قبل، «من چای»، نگاه کنیم، فقط چهار بار پیدا میشه: دو بار «میخورم»، یه بار «دوست» و یه بار «میخرم». «میخوری» دیگه اصلا نیست. جمله درست درمیاد.
این مهمترین درس این فصله: هر چی مدل به متن بیشتری قبلش نگاه کنه، حدسش بهتره. «من» اول جمله روی آخر جمله اثر داره؛ گاهی یه کلمه روی چند جمله بعد. برای همین مدلهای امروزی به کل متن قبل نگاه میکنن، نه دو سه کلمه؛ گاهی چند صفحه.
چرا شمردن کافی نیست
پس چرا همین شمردن رو با ده کلمهی قبل انجام ندیم؟ چون یه مشکل بزرگ پیش میاد:
هر چی تعداد کلمههای قبل رو بیشتر کنیم، کمتر پیش میاد اون دنبالهی دقیق قبلا دیده شده باشه. توی دوازده جملهی ما، «خواهرم چای» اصلا نیست؛ پس مدل شمارشی هیچ عددی براش نداره و نمیدونه چی بگه. توی متنهای واقعی هم همینه: یه جملهی دهکلمهای که شما همین الان نوشتید، به احتمال زیاد قبلا با همین کلمهها، به همین ترتیب، هیچجا نوشته نشده.
آدمها این مشکل رو ندارن. شما هیچوقت «خواهرم چای» رو ندیدید، ولی میدونید «خواهرم» شبیه «مادرم»ه، پس بعدش احتمالا «میخوره» میاد. این همون کاریه که یه شبکهی عصبی میکنه. به جای اینکه دنبالهی دقیق رو بشمره، هر تکه رو به یه بردار از عددها تبدیل میکنه که تکههای هممعنی، بردارهای نزدیک به هم دارن؛ همون امبدینگ. بعد از روی این شباهتها حدس میزنه، حتی برای متنی که هیچوقت ندیده.
پس فرق مدل زبانی بزرگ با مدل شمارشی ما، توی «کار» نیست؛ کار هر دو دادن احتمال تکهی بعده. فرقشون توی «راه» هست: یکی میشمره، یکی شباهتها رو یاد گرفته. و البته اندازه.
مشکل صفر
شمردن یه گیر بزرگ داره. توی متن ۱۲ جملهای درس، بعد از «من» هیچوقت «آب» نیومده. پس مدل شمارشی میگه احتمال «من آب» صفره؛ یعنی هیچوقت ممکن نیست. ولی میدونیم «من آب میخورم» یه جملهی کاملا عادیه.
ویکیپدیا به این میگه «مشکل فراوانی صفر» (Zero-Frequency Problem): هر ترکیبی که توی متن آموزش نبوده، احتمال صفر میگیره. راهحلش هموارسازی (Smoothing) هست، یعنی یه کم از احتمال چیزهای دیدهشده رو برداریم و به چیزهای ندیده بدیم. سادهترینش هموارسازی «یکی اضافه» (Add-One یا Laplace) هست: به شمارش هر کلمه یکی اضافه کن. توی مثال ما، پنج تا کلمه داریم، پس مخرج از ۸ میشه ۱۳، و «آب» بهجای صفر، یک از سیزده، حدود ۸٪، میگیره.
یه راه دیگه عقبنشینی (Back-off) هست: اگه «من چای» رو هیچوقت ندیدی، برو سراغ فقط «چای» و ببین بعدش چی میاد. ویکیپدیا چند روش دیگه هم میشمره که همه یه کار میکنن: جا برای ندیدهها باز کردن. کلمههایی که اصلا توی واژهنامه نیستن هم معمولا با یه نشونهی مخصوص، «ناشناخته»، جایگزین میشن.
احتمال یه جمله
با همین حدسها میشه احتمال یه جملهی کامل رو هم حساب کرد. کافیه احتمالهای قدمبهقدم رو در هم ضرب کنیم.
توی متن درس، بعد از «من»، «چای» نصف وقتها اومد، یعنی ۰٫۵. بعد از «چای»، «میخورم» دو بار از شش بار، یعنی حدود ۰٫۳۳. پس احتمال اینکه بعد از «من» دقیقا «چای میخورم» بیاد، میشه ۰٫۵ ضرب در ۰٫۳۳، یعنی حدود ۰٫۱۷. به این قاعده توی ریاضی قاعدهی زنجیرهای احتمال میگن. مدلهای بزرگ هم دقیقا همین کار رو میکنن، فقط هر حدسشون به کل متن قبل نگاه میکنه، نه فقط یه کلمه.
یه نکتهی ریز: ویکیپدیا میگه این مدلها برای اول و آخر جمله نشونهی مخصوص میذارن. نشونهی «پایان» مهمه، چون اگه نباشه، یه جملهی کوتاه و نصفه همیشه احتمال بیشتری از یه جملهی کامل و بلند میگیره؛ چون عددهای کمتری در هم ضرب شدن. همون تکهی «پایان» که توی درس قبل دیدیم، از همینجا میاد.
از امتیاز تا احتمال
شبکهی عصبی مستقیم درصد نمیده. آخرش برای هر تکه یه امتیاز خام میده؛ عددی که هر چی بزرگتر، اون تکه محتملتر. بعد این امتیازها درصد میشن:
کاری که امتیازها رو به احتمال تبدیل میکنه، همون سافتمکسه که توی مسیر یادگیری ماشین دیدیم. دو تا خاصیت داره که اینجا لازمن: همهی عددها رو مثبت میکنه و جمعشون رو صد درصد میکنه؛ و فاصلهها رو بزرگتر میکنه، طوری که یه امتیاز کمی بالاتر، احتمال خیلی بیشتری میگیره. توی مثال نمونهی بالا، امتیاز «تهران» فقط کمی از بقیه بیشتره، ولی احتمالش میشه حدود ۸۳ درصد.
موقع آموزش هم دقیقا همین احتمال سنجیده میشه: اگه کلمهی واقعی «تهران» بود و مدل بهش ۸۳ درصد داده بود، خطا کمه؛ اگه ۵ درصد داده بود، خطا زیاده. اسم این خطا کراسانتروپی هست، و کل پیشآموزش یعنی کم کردن همین یه عدد، روی میلیاردها تکه.
همهچیز ادامهست
حالا برگردیم سراغ اون سه کار اول درس. چرا یه مدل که فقط تکهی بعد رو حدس میزنه، ترجمه و حساب و خلاصه بلده؟
چون برای اینکه تکهی بعد رو خوب حدس بزنی، باید خیلی چیزها بدونی. اگه متن «پایتخت ایران» باشه، برای حدس خوب باید بدونی پایتخت ایران کجاست. اگه متن یه جملهی انگلیسی با «ترجمهش:» باشه، باید هر دو زبان رو بلد باشی. اگه متن «۲۳ به اضافهی ۱۹ مساوی» باشه، باید بتونی جمع بزنی. مدلی که میلیاردها بار مجبور شده این حدسها رو بهتر کنه، کمکم بخشی از اینها رو توی عددهاش جا داده.
پژوهشی که سال ۲۰۲۰ یکی از مدلهای مشهور رو معرفی کرد، دقیقا همین رو نشون داد: یه مدل که فقط برای حدس تکهی بعد آموزش دیده بود، ترجمه، جواب سوال، پر کردن جای خالی و حتی جمع چندرقمی رو انجام داد؛ فقط با اینکه کار رو با متن توضیح بدن و چند نمونه توی خود متن بذارن، بی هیچ آموزش دوبارهای. یعنی «دستور دادن» به مدل، در واقع نوشتن اول یه متنه که ادامهی محتملش، جوابیه که میخواید. ایستگاه پرامپت کامل دربارهی همینه.
و همینجاست که اشتباهها هم معنی پیدا میکنن. مدل دنبال «محتملترین ادامه» هست، نه «درستترین». بیشتر وقتها این دو تا یکیان؛ ولی وقتی مدل چیزی رو نمیدونه، ادامهی محتمل میتونه یه جملهی باورپذیر و غلط باشه.
بازیهای دیگه
حدس کلمهی بعد تنها بازیای نیست که میشه باهاش یه مدل زبانی رو آموزش داد. دو تا بازی دیگه هم خیلی مهمن.
توی بازی کلمهی وسط (Masked Language Modeling)، یه کلمه از وسط جمله پوشونده میشه و مدل باید با نگاه به هر دو طرف حدسش بزنه. این بازی برای فهمیدن متن خیلی خوبه، ولی برای نوشتن نه؛ چون موقع نوشتن، طرف بعدی هنوز وجود نداره. درس فقط رمزگذار این خانواده رو باز کرده. مدلهایی که چت میکنن همه با همون بازی کلمهی بعد آموزش دیدن.
بازی سوم تازهتره. یه پژوهش ۲۰۲۴ بهجای یه تکه، به مدل یاد داد چند تکهی بعدی رو با هم حدس بزنه. نتیجهش جالب بود: مدل ۱۳ میلیاردیش ۱۲٪ مسئلهی برنامهنویسی بیشتری از مدل معمولی هماندازه حل کرد، و مدلی که چهار تکه رو با هم حدس میزد، موقع جواب دادن تا سه برابر سریعتر بود. با این حال، بیشتر مدلهای امروز هنوز با همون حدس یه تکه کار میکنن.
از شمردن تا ترنسفورمر
این ایده سابقهی طولانیای داره.
سال ۱۹۵۱ یه دانشمند از آدمها خواست حرف بعدی متن انگلیسی رو حدس بزنن، تا بسنجه زبان چقدر قابل پیشبینیه. ویکیپدیا میگه دههی ۱۹۷۰ مدلهای شمارشی چندکلمهای برای تشخیص گفتار ساخته شدن؛ همونجا عددی هم ساختن که امروز هم برای سنجیدن مدلها به کار میره، به اسم سرگشتگی (Perplexity). سال ۲۰۰۳ اولین مدل با شبکهی عصبی اومد، ۲۰۱۰ شبکههای بازگشتی از مدلهای شمارشی جلو زدن، و ۲۰۱۷ ترنسفورمر اومد. بازی همون بازیه؛ فقط بازیکن عوض شده.
چند نکته
- خروجی مدل یه توزیعه، نه یه جواب. انتخاب از بین احتمالها کار برنامهی دور مدله.
- زمینهی بیشتر، حدس بهتر. برای همین هر چی توضیح بیشتری به چتبات بدید، جوابش نزدیکتره.
- شمردن برای جملهی ندیده کم میاره. شبکهی عصبی با شباهتها این رو حل میکنه.
- «محتمل» همیشه «درست» نیست. جوابهای مهم رو بسنجید.
- هر کاری رو میشه «ادامه بده» نوشت. اینکه چطور بنویسیدش، روی جواب اثر داره.
درس بعد فرق دو تا چیزی رو میگه که خیلیها یکی میدونن: مدل و چتبات.
جمعبندی. آنچه از این درس با خودتان میبرید.
- برای هر تکهی ممکن، یه احتمال.
- احتمال از شمردن یا از شبکهی عصبی میاد.
- متن بیشتر قبلش، حدس بهتر.
- جملهی ندیده رو شمردن جواب نمیده؛ شبکه میده.
- هر کاری رو میشه به شکل «ادامه بده» نوشت.
خودتون رو بسنجید
۱۵ پرسش، هر بار تازه از میان ۳۰ پرسش این درس. آخرش فقط کارنامه رو میبینید: چند تا درست، چند تا نادرست.