قصه

هوش مصنوعی چطور کلمه‌ی بعدی رو حدس می‌زنه

چطور یه برنامه فقط با حدس زدن کلمه‌ی بعدی جمله‌هایی می‌سازه که آدم باورشون می‌کنه؟ قصه از بتی شانون شروع می‌شه که حرف‌های یه جمله رو یکی‌یکی حدس می‌زد، از وکیلی می‌گذره که شش پرونده‌ی ساختگی رو تحویل دادگاه داد و برمی‌گرده به بازی‌ای که از خود بتی قدیمی‌تره.

نقاشی: برج بابل، برج بزرگ و پیچ‌درپیچی از طاق‌ها، بالای یه شهر بندری.
پیتر بروگل بزرگ، برج بابل، ۱۵۶۳

اوایل دهه‌ی ۱۹۵۰، می‌شه حدود ۱۳۳۰ خورشیدی. کلود شانون که ریاضی‌دان آزمایشگاه‌های بل بود با همسرش بتی یه بازی ساده می‌کرد. یه داستان پلیسی از ریموند چندلر رو باز می‌کرد و یه جمله‌ش رو حرف به حرف جلو می‌برد. بتی خودش ریاضی خونده بود و یه مدت هم تو اون آزمایشگاه کار کرده بود. تو این بازی کار بتی این بود که حرف بعدی رو حدس بزنه. شانون زیر هر حرف علامت می‌زد که با حدس اول درست گفته یا نه و اگه اشتباه می‌گفت جواب رو بهش می‌گفت.

جمله این بود: «THE ROOM WAS NOT VERY LIGHT A SMALL OBLONG…» (اتاق خیلی روشن نبود، یه چراغ کوچیکِ دراز…). این قطعه ۱۲۹ حرف داشت. فکر می‌کنید بتی چند تاش رو با حدس اول درست گفت؟ ۸۹ تا، یعنی ۶۹ درصد. تقریباً از هر ده حرف هفت تا! آمار حرف‌های انگلیسی رو هیچ‌کس به بتی یاد نداده بود. زبان بلد بود، همین. این کافی بود که بیشتر جمله رو قبل از دیدنش بدونه.

یه دقیقه جای بتی بشینید و ببینید چند تا حرف رو با حدس اول درست می‌گید.

جای بتی بشینید

بتی ۶۹ درصد حرف‌ها رو با حدس اول درست گفت. شما چطور؟

حرف بعدی رو حدس بزنید: تایپش کنید یا رو دکمه‌های پایین بزنید. فاصله هم یه حرف حساب می‌شه.

منبع: شانون، «Prediction and Entropy of Printed English»، ۱۹۵۱. ردیف بتی از گزارش خود شانون از همین آزمایش اومده. اینجا برای هر حرف سه بار شانس دارید؛ بتی بعد از اولین اشتباه جواب رو می‌شنید، واسه همین فقط حدس اول مقایسه می‌شه.

این بازی رو شما هم بلدید. اگه بگم «دیر رسیدم چون ترافیک خیلی…» کلمه‌ی بعدی تقریباً خودش میاد تو ذهنتون. کیبورد گوشی‌تون هم بلده. اون سه تا کلمه که موقع تایپ بالاش پیشنهاد می‌ده از کجا میان؟ حدس‌های کیبوردن از کلمه‌ی بعدی. شانون ولی از این بازی ساده یه نتیجه‌ی جدی گرفت. زبان پر از تکراره و بخش بزرگی از هر جمله رو می‌شه قبل از شنیدنش پیش‌بینی کرد.

هفتاد سال گذشت. آخر نوامبر ۲۰۲۲ ChatGPT اومد بیرون و به برآورد بانک UBS تو دو ماه رسید به ۱۰۰ میلیون کاربر. هیچ اپلیکیشنی تا اون روز این‌قدر سریع بزرگ نشده بود. پشت این ماجرا چیه؟ همون بازی بتی. برنامه‌ای که یه کار بیشتر بلد نیست و اون حدس زدن کلمه‌ی بعدیه. انگار کیبورد گوشی‌تون خیلی خیلی بزرگ شده باشه.

چت‌بات Claude رو شرکت Anthropic ساخته و ظاهراً اسمش رو از کلود شانون گرفته. مردی که پشت میز با همسرش بازی حدس زدن می‌کرد حالا اسمش روی یکی از چت‌بات‌هاییه که امروز این بازی رو می‌کنن.

مسئله اینجاست که بتی زبان بلد بود. برنامه‌ای که هیچ‌وقت اتاقی ندیده و چراغی روشن نکرده حدسش رو از کجا میاره؟ جوابش پنج قدمه. ریاضی هم لازم نیست. آروم اسکرول کنید.

  1. کامپیوتر فقط عدد می‌فهمه، پس اول هر کلمه عدد می‌شه: جای مشخصی تو فضایی خیالی، مثل آدرس خونه‌ای روی نقشه. کلمه‌هایی که تو جمله‌های شبیه به هم میان، همسایه می‌شن. «گربه» کنار «سگ» می‌شینه و «شاه» کنار «ملکه».
  2. نورون یه ماشین‌حساب کوچیکه. چتر ببرید یا نه؟ هواشناسی گفته بارون میاد: ۳ امتیاز. آسمون ابریه: ۱ امتیاز. آفتاب درومده: منفی ۲. به این امتیازها «وزن» می‌گن. نورون امتیاز نشونه‌هایی رو که درستن جمع می‌زنه و اگه حاصل از یه حدی، مثلاً ۲، بیشتر شد، می‌گه «ببر». یادگیری یعنی پیدا کردن همین امتیازها.
  3. هزاران نورون رو لایه‌لایه روی هم بچینید تا یه شبکه دربیاد. عددهای کلمه‌ها از سمت چپ وارد می‌شن و لایه به لایه جلو می‌رن: لایه‌های اول چیزهای ساده رو می‌بینن و لایه‌های بعدی، ترکیب‌های پیچیده‌تر رو.
  4. یادگیری برعکس حرکت می‌کنه. شبکه یه کلمه حدس می‌زنه و بعد جواب درست رو نشونش می‌دن. اگه اشتباه کرده باشه، خطا برمی‌گرده عقب و هر وزن یه ذره به سمت حدس بهتر می‌چرخه، مثل تیراندازی که بعد از هر تیر دستش رو یه کم جابه‌جا می‌کنه. این کار میلیاردها بار تکرار می‌شه.
  5. چیزی که آخر سر بیرون میاد یه فهرسته: برای هر کلمه‌ای که ممکنه بعدی باشه، یه شانس. مدل یکی رو برمی‌داره، می‌چسبونه ته متن و کل این کار رو برای کلمه‌ی بعدی از اول تکرار می‌کنه. هر جوابی که از ChatGPT می‌گیرید، کلمه به کلمه همین‌طوری ساخته شده!

حالا جای مدل بشینید. جمله با «گربه روی» شروع می‌شه و هر بار چند تا کلمه با درصد شانسشون جلوتونه. یکی رو انتخاب کنید یا بذارید مدل قرعه بکشه.

خودتون امتحان کنید

مدل هر بار فقط یه کلمه برمی‌داره؛ ستون بلندتر یعنی شانس بیشتر

گربه روی…

مدل برای جای خالی این چند تا کلمه رو پیشنهاد داده. روی یکی بزنید، یا بذارید مدل خودش قرعه بکشه.

← محتاطماجراجو →

اسلایدر رو جابه‌جا کنید و ستون‌ها رو نگاه کنید: دمای کم ستون اول رو بلندتر می‌کنه، دمای زیاد ستون‌ها رو به هم نزدیک می‌کنه.

عددها ساختگی‌ان، برای نشون دادن ایده. یه مدل واقعی هر بار برای ده‌ها هزار توکن شانس حساب می‌کنه، نه پنج تا.

اون اسلایدر دما رو دست‌کم نگیرید. مدل‌های واقعی هم این تنظیم رو دارن. انگلیسی بهش می‌گن temperature یعنی دما و یه جور پیچ ماجراجوییه که برنامه‌نویس‌ها خودشون می‌چرخوننش. دمای صفر یعنی مدل هر بار محتمل‌ترین کلمه رو برمی‌داره و هر بار همون جواب رو می‌ده. دمای بالاتر یعنی کلمه‌های کم‌احتمال‌تر هم شانس دارن. واسه همینه که اگه یه سوال رو دو بار از ChatGPT بپرسید معمولاً دو تا جواب متفاوت می‌گیرید. مدل هر بار قرعه می‌کشه. ولی دقیقاً چی رو قرعه می‌کشه؟ کلمه؟ نه، کلمه نیست.

کلمه یا تکه‌ی کلمه؟

چیزی که مدل‌ها واقعاً می‌خونن اسمش توکنه. توکن چیه؟ یه تکه از متن که گاهی یه کلمه‌ی کامله و گاهی نصف کلمه یا یه علامت. یه جور آجر لگو که جمله رو باهاش می‌سازن. OpenAI تو راهنماش می‌گه تو متن انگلیسی هر توکن معمولاً حدود چهار حرفه، یعنی هر صد توکن حدود ۷۵ کلمه.

چرا کلمه‌ی کامل نه؟ چون فهرست کلمه‌ها تمومی نداره. مثلاً هم «کتاب» داریم، هم «کتاب‌ها» و «کتاب‌هامون» و «کتابخونه». اسم آدم‌ها و غلط‌های تایپی هم هست. اگه مدل برای هر کدوم یه خونه‌ی جدا تو فرهنگ لغتش بخواد، فرهنگ لغتش هیچ‌وقت کامل نمی‌شه. از اون طرف اگه هر حرف رو جدا بخونه، هر جمله خیلی دراز می‌شه و کار هم کُند می‌شه. توکن راه وسطه. حالا کی تصمیم می‌گیره یه کلمه کجا بریده بشه؟

کلمه چطور خرد می‌شه؟

هیچ آدمی دونه‌دونه تصمیم نمی‌گیره. این کار رو یه روش شمردن می‌کنه به اسم Byte Pair Encoding که کوتاهش می‌شه BPE. بیشتر مدل‌های امروزی باهاش متن رو خرد می‌کنن ولی اولش اصلاً برای هوش مصنوعی ساخته نشد. سال ۱۹۹۴ فیلیپ گیج این روش رو ساخت که باهاش حجم فایل‌ها رو کم کنه. بیست و دو سال بعد یعنی سال ۲۰۱۶ چند پژوهشگر تو دانشگاه ادینبرو (Rico Sennrich و همکارهاش) ازش برای ترجمه‌ی ماشینی استفاده کردن و از اون به بعد تقریباً همه رفتن سراغش.

ایده‌اش این‌قدر ساده‌ست که می‌شه با مداد روی کاغذ امتحانش کرد. فرض کنید کل متنی که داریم این چهار کلمه‌ست: «کتاب» و «کتاب‌ها» و «کتابخونه» و «کتابدار».

قدم اول اینه که همه‌چیز رو حرف به حرف جدا کنید. «کتاب» می‌شه «ک · ت · ا · ب».

قدم دوم اینه که بشمارید کدوم دو تا تکه‌ی کنار هم از همه بیشتر تکرار شدن. اینجا «ک» و «ت» تو هر چهار کلمه کنار همن. («ت · ا» و «ا · ب» هم همین‌قدر تکرار شدن و تو تساوی یکی رو برمی‌داریم.) این دو تا رو بچسبونید به هم و «کت» رو یه تکه‌ی تازه حساب کنید و به فرهنگ لغت اضافه کنید.

قدم سوم تکرار این کاره. دور بعد «کت» و «ا» به هم می‌چسبن و می‌شن «کتا» و دور بعدش «کتا» و «ب» می‌شن «کتاب». حالا «کتاب» یه توکن کامله و «کتابخونه» می‌شه «کتاب · خ · و · ن · ه». اگه تو متن‌مون «خونه» هم زیاد اومده بود اونم کم‌کم یه تکه می‌شد و «کتابخونه» می‌شد دو تا توکن «کتاب · خونه».

حالا خودتون امتحان کنید. این بار متن‌مون پنج تا کلمه‌ست که هر کدوم چند بار تکرار شدن. هر بار که «بچسبون» رو بزنید پرتکرارترین جفت به هم می‌چسبه و یه ردیف تازه به فرهنگ لغت اضافه می‌شه تا وقتی که فرهنگ لغت پر بشه. به شمارنده‌ی «کل تکه‌ها» هم نگاه کنید. هر بار که دو تکه به هم می‌چسبن متن کوتاه‌تر می‌شه. گیج هم دنبال این بود که فایل کوچیک‌تر بشه.

خودتون خرد کنید

هر بار، دو تکه‌ای که بیشتر از همه کنار هم اومدن به هم می‌چسبن

  • کتاب ۵ بار
  • خونه ۴ بار
  • کتابخونه ۳ بار
  • کتابدار ۲ بار
  • صاحبخونه ۲ بار

قدم بعد: «ک» و «ت» جمعاً ۱۰ بار کنار هم اومدن، از همه بیشتر.

کل تکه‌ها تو این متن: ۹۰ (اولش ۹۰ تا بود)

فرهنگ لغت (۱۲ ردیف؛ جا برای ۶ ردیف تازه)

  1. ۱ ک
  2. ۲ ت
  3. ۳ ا
  4. ۴ ب
  5. ۵ خ
  6. ۶ و
  7. ۷ ن
  8. ۸ ه
  9. ۹ د
  10. ۱۰ ر
  11. ۱۱ ص
  12. ۱۲ ح
کلمه‌ها و تعدادشون ساختگی‌ان. فرهنگ لغت اینجا فقط جا برای شش ردیف تازه داره؛ GPT-2 حدود ۵۰ هزار ردیف داشت. تو تساوی، اولین جفتی که پیدا بشه برنده می‌شه.

رو یه کوه متن واقعی این کار ده‌ها هزار بار تکرار می‌شه. نتیجه یه فرهنگ لغته که کلمه‌های پرتکرار توش یه تکه‌ان و کلمه‌های کمیاب از چند تکه ساخته می‌شن. مثلاً GPT-2 یه فرهنگ لغت ۵۰٬۲۵۷ توکنی داشت. یه جمله‌ی تازه که بنویسید، مدل قاعده‌های چسبوندن رو به همون ترتیب روی جمله‌تون اجرا می‌کنه و هر تکه‌ای که به دست میاد یه شماره‌ی ردیف تو اون فرهنگ لغت داره. چیزی که واقعاً وارد مدل می‌شه این شماره‌هاست. خرد کردن کلمه به این شماره‌ها ولی بی‌هزینه نیست.

چرا فارسی گرون‌تر درمیاد؟

این خرد کردن یه دردسر بامزه هم داره. چت‌بات‌ها مدت‌ها سر یه سوال ظاهراً بچگونه گیر می‌کردن: «تو کلمه‌ی strawberry چند تا r هست؟» و خیلی وقت‌ها جواب می‌دادن دو تا. چرا؟ چون مدل تکه‌ها رو می‌بینه، نه حرف‌ها رو. کلمه‌ای که شما حرف به حرف می‌بینید برای مدل دو سه تا تکه‌ست. مثل اینکه از کسی بپرسید تو یه عکس چند تا پیکسل قرمزه.

فارسی اینجا بدشانسه. فرهنگ لغت توکن‌ها رو بیشتر با متن‌های انگلیسی ساختن و جفت‌های چسبیده‌ی انگلیسی خیلی بیشتر از فارسی توش هست. واسه همین یه جمله‌ی فارسی معمولاً به توکن‌های بیشتری خرد می‌شه تا ترجمه‌ی انگلیسیش.

سال ۲۰۲۳ چند پژوهشگر (Aleksandar Petrov و همکارهاش) این رو اندازه گرفتن. ۲٬۰۰۰ جمله از ویکی‌پدیا برداشتن که هر کدوم به حدود ۲۰۰ زبان ترجمه شده بود. بعد همه رو دادن به توکن‌سازها، یعنی برنامه‌هایی که متن رو تکه‌تکه می‌کنن. حدس بزنید فارسی چند برابر انگلیسی توکن لازم داشت. توکن‌سازی که ChatGPT و GPT-4 اون موقع ازش استفاده می‌کردن برای فارسی حدود ۳٫۳ برابر انگلیسی توکن لازم داشت. برای زبان «شان» که یکی از زبان‌های میانماره ۱۵ برابر. این پژوهش تکه‌ها رو می‌شمره. اینکه مدل هر زبان رو چقدر خوب می‌فهمه، دیگه چیزی نمی‌گه. با این حال تعداد تکه‌ها هم کم چیزی نیست، چون شرکت‌های هوش مصنوعی پول رو بر اساس توکن می‌گیرن. یعنی حرف زدن با هوش مصنوعی به فارسی معمولاً هم کندتره و هم گرون‌تر!

یه جواب بلند یعنی صدها حدس پشت سر هم که هر کدوم ورودی حدس بعدیه. صدها شماره‌ی ردیف. از شماره‌ی ردیف هیچی درباره‌ی معنی درنمیاد. از اینکه «گربه» ردیف چندمه نمی‌شه فهمید که به «سگ» شبیهه. معنی از کجا میاد؟

عددهایی که کسی ننوشته

مدل برای هر شماره‌ی ردیف فهرست بلندی از عددها نگه می‌داره. اینا همون عددهایی‌ان که تو اسلاید اول جای کلمه رو تو فضای خیالی نشون می‌دادن. انگلیسی بهش می‌گن embedding و ما شاید بگیم نشونی کلمه. یه نقشه رو تصور کنید. جای هر شهر رو می‌شه با دو تا عدد گفت که طول و عرض جغرافیاییه. عددهای تهران و کرج به هم نزدیکن و عددهای تهران و توکیو از هم دور. embedding با کلمه‌ها این کار رو می‌کنه. منتها به جای دو تا عدد برای هر کلمه صدها یا هزاران عدد داره.

ولی این عددها رو هیچ‌کس دستی نمی‌نویسه. اول تصادفی‌ان و موقع آموزش آروم‌آروم سر جاشون می‌شینن تا جایی که فاصله تو این نقشه تقریباً می‌شه فاصله‌ی معنی.

سال ۲۰۱۳ توماس میکولوف و دو تا از همکارهاش تو بخش پژوهش Microsoft یه چیز عجیب‌تر هم پیدا کردن. جهت‌ها هم معنی دارن. اگه از عددهای «شاه» عددهای «مرد» رو کم کنید و عددهای «زن» رو اضافه کنید به کجا می‌رسید؟ یه لحظه خودتون حدس بزنید. نقطه‌ای که بهش می‌رسید از همه‌ی کلمه‌ها به «ملکه» نزدیک‌تره. مثل اینکه رو نقشه بگید «از شاه راه بیفت و همون مسیری رو برو که از مرد به زن می‌رسه». کسی به مدل نگفته بود شاه بودن و زن یا مرد بودن دو چیز جدان. خودش از لابه‌لای متن‌ها بیرون کشیده بود. این عددها ولی هنوز ورودی مدلن. دانش خود مدل یه جای دیگه‌ست.

حساب با کلمه‌ها

همون قدمی که از «مرد» به «زن» می‌رسه، اگه از «شاه» شروع کنیم، کنار «ملکه» فرود میاد

گربهسگپاریسپسردخترمردزنشاهملکهشاه − مرد + زن

درست کنار «ملکه» فرود میاد: شاه منهای مرد به‌علاوه‌ی زن، تقریباً می‌شه ملکه.

نمودار شماتیکه: جای کلمه‌ها رو با دست چیدیم که ایده دیده بشه. embeddingهای واقعی برای هر کلمه صدها عدد دارن، نه دو تا. حاصل این حساب هم نزدیک «ملکه» درمیاد، نه دقیقاً روش. یافته‌ی میکولوف و همکارهاش، ۲۰۱۳.

دانش مدل کجاست؟

تو وزن‌ها، یعنی اون امتیازهایی که تو مثال چتر دیدید. وقتی می‌گن یه مدل «بزرگه» منظورشون تعداد وزن‌هاشه. GPT-3 که سال ۲۰۲۰ منتشر شد ۱۷۵ میلیارد وزن داشت. برای درک بزرگی این عدد فرض کنید هر ثانیه یکی از این وزن‌ها رو بنویسید و هیچ‌وقت هم نخوابید. نوشتن همه‌شون حدود ۵٬۵۰۰ سال طول می‌کشه. دستور زبان و اسم پایتخت‌ها و هرچی که به نظر میاد مدل بلده همه‌ش تو این عددها نشسته. مدل موقع جواب دادن نمی‌ره تو اینترنت دنبال چیزی، مگه اینکه جداگونه بهش ابزار جستجو داده باشن.

این همه وزن از خوندن چقدر متن تنظیم شده؟ GPT-3 تو آموزش حدود ۳۰۰ میلیارد توکن دید که هم صفحه‌های وب بود، هم کتاب و ویکی‌پدیا. گفتیم هر صد توکن حدود ۷۵ کلمه‌ست. این می‌شه حدود ۲۲۵ میلیارد کلمه. یه کتاب ۳۰۰ صفحه‌ای معمولی حدود صد هزار کلمه‌ست. این حجم می‌شه بیش از دو میلیون کتاب. اگه هفته‌ای یه کتاب بخونید، خوندن این حجم بیش از ۴۰ هزار سال طول می‌کشه!

حالا سوال بعدی اینه که این همه عدد چطوری درست تنظیم می‌شن؟ هیچ آدمی نمی‌تونه ۱۷۵ میلیارد پیچ رو دستی بچرخونه.

خطایی که برمی‌گرده عقب

پس کی می‌چرخونه‌شون؟ خود خطا. انگلیسی بهش می‌گن backpropagation و فارسیش شده «پس‌انتشار». خطا از ته شبکه راه می‌افته و لایه به لایه برمی‌گرده عقب، درست مثل اسلاید چهارم.

سال ۱۹۸۶ دیوید روملهارت، جفری هینتون و رونالد ویلیامز تو یه مقاله‌ی کوتاه تو Nature نشون دادن که با این روش می‌شه شبکه‌های چندلایه رو آموزش داد. ایده‌اش اینه که بعد از هر حدس غلط برای تک‌تک وزن‌ها حساب کنید کدوم طرف بچرخه تا خطا کمتر بشه.

یه دوش حموم رو تصور کنید که به جای دو تا شیر ۱۷۵ میلیارد تا شیر داره. هر بار که بازش می‌کنید می‌فهمید آب زیادی داغ بود یا زیادی سرد و همه‌ی شیرها رو یه ذره می‌چرخونید، هر کدوم رو به اندازه‌ی سهمی که تو خراب کردن دما داشته. پس‌انتشار روشیه که این سهم رو برای هر شیر حساب می‌کنه. آموزش یعنی تکرار این قدم روی یه کوه متن، میلیاردها بار.

هینتون سال ۲۰۲۴ همراه با جان هاپفیلد جایزه‌ی نوبل فیزیک رو گرفت. جایزه به خاطر یه کار دیگه‌اش بود. اینجاست که قصه‌ی پس‌انتشار می‌خوره به قصه‌ی شانون. اصل کار همون چیزیه که شانون سر بازی می‌کرد. بتی اشتباه می‌گفت و شانون جواب درست رو بهش می‌گفت. فرقش چیه؟ بتی از قبل زبان بلد بود. مدل همه‌چیز رو از این جواب‌های درست یاد می‌گیره. بتی ولی یه مهارت دیگه هم داشت که شبکه‌های اولیه نداشتن. می‌دونست به کدوم کلمه‌ها گوش بده.

کدوم کلمه‌ها مهم‌ترن؟

این جمله رو در نظر بگیرید: «کتابی که هفته‌ی پیش از کتابخونه‌ی محله گرفتم رو پس دادم، چون خیلی … بود.» برای حدس کلمه‌ی آخر، «کتاب» خیلی بیشتر از «محله» به کار میاد دیگه. بتی این رو بدون اینکه فکر کنه می‌دونست. منتها مدل‌های قدیمی‌تر جمله رو کلمه به کلمه می‌خوندن و تا به آخرش برسن اولش تو ذهنشون کم‌رنگ شده بود.

سال ۲۰۱۷ هشت پژوهشگر که بیشترشون تو Google کار می‌کردن یه مقاله نوشتن با اسم بامزه‌ی «Attention Is All You Need» یعنی «توجه تنها چیزیه که لازم دارید». ایده‌شون این بود که مدل برای هر کلمه به همه‌ی کلمه‌های قبلی یه‌جا نگاه کنه و خودش یاد بگیره به کدوم‌ها بیشتر «توجه» کنه. اسم این ساختار رو گذاشتن Transformer. حرف T تو اسم GPT هم از اینجا اومده. GPT یعنی Generative Pre-trained Transformer، یه Transformer که از قبل آموزش دیده و متن تولید می‌کنه. تقریباً همه‌ی چت‌بات‌های معروف امروز روی این ایده ساخته شدن.

اینم جمله‌ی بالا، این بار با خط‌هایی که نشون می‌دن هر کلمه به کجا توجه می‌کنه.

توجه، روی کاغذ

برای پر کردن جای خالی، «کتاب» خیلی بیشتر از «محله» به کار میاد

جای خالی بیشتر از همه به «کتابی» نگاه می‌کنه، بعد به «خیلی».

روی هر کلمه بزنید تا ببینید به کدوم کلمه‌های قبلی نگاه می‌کنه. هرچی خط کلفت‌تر، اون کلمه مهم‌تر.

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

اگه مدل این‌قدر خوب حدس می‌زنه، پس چرا گاهی با اعتمادبه‌نفس کامل چیزی می‌گه که اصلاً وجود نداره؟

شش پرونده‌ای که وجود نداشت

بهار ۲۰۲۳ یه وکیل نیویورکی به اسم استیون شوارتز (Steven Schwartz) برای پرونده‌ی موکلش علیه شرکت هواپیمایی Avianca از ChatGPT کمک گرفت. ChatGPT چند تا رأی قبلی دادگاه‌ها رو با شماره و حتی نقل‌قول بهش داد و وکیل همه رو گذاشت تو لایحه‌اش. مشکل کجا بود؟ شش تا از این پرونده‌ها اصلاً وجود نداشتن. قاضی آخرش شوارتز و همکارش (Peter LoDuca) و دفترشون رو روی هم ۵٬۰۰۰ دلار جریمه کرد.

اگه تا اینجا همراهمون بودید دلیلش رو خودتون می‌دونید. مدل نمی‌پرسه «این درسته؟». می‌پرسه «چه کلمه‌ای معمولاً اینجا میاد؟». یه رأی دادگاه معمولاً اسم دو طرف و یه شماره داره. مدل هم اینا رو می‌سازه چون شکلشون درسته. انگلیسی به این اشتباه‌ها می‌گن hallucination و ما می‌گیم «توهم». یه جورایی مثل حرف زدن تو خوابه. جمله‌ها روونن ولی به هیچ چیز واقعی بند نیستن. مدل به معنای واقعی کلمه دروغ هم نمی‌گه چون تو این بازی اصلاً راست و دروغ تعریف نشده. همون بازی بتی که از خود بتی هم قدیمی‌تره.

بازی‌ای قدیمی‌تر از کامپیوتر

۲۳ ژانویه‌ی ۱۹۱۳ بود. آندری مارکوف که ریاضی‌دان روس بود تو آکادمی علوم سن‌پترزبورگ نتیجه‌ی شمارشی رو گزارش کرد که با کاغذ و مداد کرده بود. ۲۰ هزار حرف اولِ «یوگنی اونگین» پوشکین رو برداشته بود. فاصله‌ها و علامت‌ها رو حذف کرده بود و نشسته بود به شمردن. ۸٬۶۳۸ تاش مصوت بود که می‌شه ۴۳ درصد. بعد جفت‌های پشت سر هم رو شمرد و دید اینکه حرف بعدی مصوت باشه یا نه، به حرف قبلی ربط داره.

شمارش مارکوف، ۱۹۱۳

بعد از مصوت، کم پیش میاد حرف بعدی هم مصوت باشه؛ بعد از صامت، بیشتر وقت‌ها مصوته

نمایش

شانس اینکه حرف بعدی مصوت باشه

بعد از مصوت ۱۳٪بعد از صامت ۶۶٪ همه‌ی حرف‌ها: ۴۳٪

تو متن پوشکین، بعد از یه مصوت فقط حدود ۱۳ درصد وقت‌ها باز هم مصوت میاد، ولی بعد از یه صامت حدود ۶۶ درصد. مصوت‌ها و صامت‌ها دوست دارن نوبتی بیان.

عددهای مارکوف
حرف‌ها۲۰٬۰۰۰
مصوت‌ها۸٬۶۳۸
صامت‌ها۱۱٬۳۶۲
جفت‌های مصوت و مصوت۱٬۱۰۴
جفت‌های صامت و صامت۳٬۸۲۷
جفت‌های یه مصوت و یه صامت۱۵٬۰۶۹
جفت‌های مصوت و مصوت، اگه حرف‌ها مستقل بودن۳٬۷۳۱
منبع: شمارش‌های مارکوف به نقل از برایان هیز، «First Links in the Markov Chain»، American Scientist، ۲۰۱۳. دو تا درصد بالا رو ما از همین شمارش‌ها حساب کردیم (۱۱۰۴ از ۸۶۳۸ و حدود ۷۵۳۴ از ۱۱۳۶۲) و گرد کردیم؛ ممکنه به خاطر اول و آخر متن، یه جفت کم یا زیاد بشه.

مارکوف به یه حرف قبل بیشتر نگاه نمی‌کرد. بتی به کل جمله نگاه می‌کرد و به هرچی تو عمرش خونده بود. تو این صد و چند سال بازی فقط بزرگ‌تر شده. اول حدس حرف بعدی بود از روی حرف قبلی. حالا حدس کلمه‌ی بعدیه از روی ده‌ها هزار توکن که گاهی یه کتاب کامله. هر بار که ChatGPT جمله‌ای می‌نویسه داره همون بازی بتی رو می‌کنه. منتها این بار کسی سر میز نیست که بعد از حدس غلط جواب درست رو بگه.

منابع و یادداشت‌ها

  • بازی شانون و بتی، ۸۹ از ۱۲۹ حرف: C. E. Shannon, “Prediction and Entropy of Printed English”, Bell System Technical Journal 30 (1951), 50–64. متن مقاله. جمله از داستان «Pickup on Noon Street» ریموند چندلره؛ نقش بتی شانون: Jimmy Soni و Rob Goodman, A Mind at Play (2017). بازی حدس فقط از خط اول قطعه استفاده می‌کنه؛ ردیف بتی توش از ثبت خود شانون از همین خط اومده (همون «متن کوتاه‌شده»ی مقاله). بتی ۲۹ تا از ۴۲ حرفِ این خط رو (با فاصله‌ها) با حدس اول درست گفته بود.
  • ۱۰۰ میلیون کاربر در دو ماه: برآورد UBS بر پایه‌ی داده‌های Similarweb، به نقل از Reuters, “ChatGPT sets record for fastest-growing user base”, فوریه‌ی ۲۰۲۳.
  • اسم Claude: ظاهراً از کلود شانون گرفته شده؛ به نقل از Kevin Roose, “Inside the White-Hot Center of A.I. Doomerism”, The New York Times, ۱۱ ژوئیه‌ی ۲۰۲۳.
  • بازی کلمه‌ی بعدی: احتمال‌های بازی و اسلاید آخر ساختگی‌ان و از هیچ مدل واقعی گرفته نشدن.
  • هر توکن حدود چهار حرف انگلیسی: OpenAI Help Center, “What are tokens and how to count them?”.
  • BPE: P. Gage, “A New Algorithm for Data Compression”, C Users Journal 12(2), 1994؛ R. Sennrich, B. Haddow, A. Birch, “Neural Machine Translation of Rare Words with Subword Units”, ACL 2016. arXiv:1508.07909. مثال «کتاب» ساختگیه و برای نشون دادن روشه.
  • ۵۰٬۲۵۷ توکن GPT-2: A. Radford et al., “Language Models are Unsupervised Multitask Learners”, OpenAI, 2019.
  • توکن‌های بیشتر برای زبان‌های غیرانگلیسی، ۳٫۳ برابر برای فارسی: A. Petrov, E. La Malfa, P. Torr, A. Bibi, “Language Model Tokenizers Introduce Unfairness Between Languages”, NeurIPS 2023. arXiv:2305.15425. جمله‌ها از مجموعه‌ی FLORES-200 هستن. نسبت توکن‌ها به انگلیسی تو توکن‌ساز cl100k_base (همونی که ChatGPT و GPT-4 ازش استفاده می‌کردن) برای فارسی ۳٫۲۸ بود و برای زبان «شان» ۱۵.
  • شاه منهای مرد به‌علاوه‌ی زن: T. Mikolov, W. Yih, G. Zweig, “Linguistic Regularities in Continuous Space Word Representations”, NAACL 2013 (هر سه نفر تو Microsoft Research). نقشه‌ی کلمه‌ها تو نمودار شماتیکه و جاهاشون رو با دست چیدیم.
  • ۱۷۵ میلیارد وزن و ۳۰۰ میلیارد توکن GPT-3: T. Brown et al., “Language Models are Few-Shot Learners”, 2020. arXiv:2005.14165. محاسبه‌ی ۵٬۵۰۰ سال: ۱۷۵ میلیارد ثانیه تقسیم بر حدود ۳۱٫۵ میلیون ثانیه در سال. محاسبه‌ی کتاب‌ها: ۲۲۵ میلیارد کلمه تقسیم بر صد هزار کلمه در هر کتاب می‌شه ۲٫۲۵ میلیون کتاب و تقسیم بر ۵۲ کتاب در سال می‌شه حدود ۴۳ هزار سال.
  • پس‌انتشار، ۱۹۸۶: D. Rumelhart, G. Hinton, R. Williams, “Learning representations by back-propagating errors”, Nature 323 (1986), 533–536.
  • نوبل فیزیک ۲۰۲۴: NobelPrize.org، جان هاپفیلد و جفری هینتون، «برای کشف‌ها و اختراع‌های پایه‌ای که یادگیری ماشین با شبکه‌های عصبی مصنوعی رو ممکن کردن»؛ اطلاعیه‌ی جایزه برای هینتون روی ماشین بولتزمن (۱۹۸۵) تأکید می‌کنه، نه پس‌انتشار.
  • Transformer: A. Vaswani et al., “Attention Is All You Need”, NeurIPS 2017. arXiv:1706.03762. وزن‌های توجه تو نمودار ساختگی‌ان و فقط ایده رو نشون می‌دن.
  • پرونده‌ی Avianca: Mata v. Avianca, Inc., دادگاه فدرال ناحیه‌ی جنوبی نیویورک، حکم قاضی P. Kevin Castel، ۲۲ ژوئن ۲۰۲۳؛ وکیل‌ها Steven A. Schwartz و Peter LoDuca از دفتر Levidow, Levidow & Oberman بودن و جریمه‌ی ۵٬۰۰۰ دلاری رو با هم باید می‌دادن (FindLaw).
  • شمارش مارکوف، ۸٬۶۳۸ مصوت از ۲۰ هزار حرف: Brian Hayes, “First Links in the Markov Chain”, American Scientist (2013). لینک. شمارش جفت‌ها تو نمودار هم از همین مقاله‌ست: ۱٬۱۰۴ جفت مصوت و مصوت و ۳٬۸۲۷ جفت صامت و صامت، در برابر حدود ۳٬۷۳۱ جفت مصوت و مصوت که اگه حرف‌ها مستقل بودن انتظار می‌رفت. درصدهای ۱۳ و ۶۶ رو ما از همین شمارش‌ها حساب کردیم.