متن، تکهتکه
مدتها یکی از معروفترین راهها برای به اشتباه انداختنِ یک مدلِ هوش مصنوعی این پرسش بود: «در کلمهی انگلیسیِ strawberry (توتفرنگی) چند حرف r هست؟» مدلهایی که مقاله مینوشتند و اشکالِ کد را برطرف میکردند، اغلب جواب میدادند «دو». (درستش سه است.) مدلهای تازهتر معمولاً درست جواب میدهند، ولی آن اشتباهِ قدیمی چیز مهمی را دربارهی شیوهی خواندنِ همهی مدلها نشان میدهد.
لیلا عجیب است. شمردنِ حرفها سادهترین کارِ دنیاست. یک بچه هم میتواند.
امید بچه میتواند، چون حرفها را میبیند. اگر نمیدیدی چه؟ اگر هر کلمه از پیش به چند تکه بریده شده بود و تو فقط تکهها را میدیدی؟
لیلا آنوقت باید یادم میماند هر تکه چطور نوشته میشود. مثلاً بدانم در «berry» چند r هست، بیآنکه نگاهش کنم.
امید وضعِ مدل همین است. مدل هیچوقت s-t-r-a-w-b-e-r-r-y را نمیبیند. سه تکه میبیند: st و raw و berry. و هر تکه برایش فقط یک عدد است.
لیلا آخر چرا باید کسی متن را اینطور تکه کند؟ چرا خودِ حرفها را به آن نمیدهند؟
امید به همین جملهای که الان میخوانی فکر کن. تقریباً چند حرف دارد؟
لیلا شصت؟ هفتاد؟
امید مدل متن را تکه به تکه پردازش میکند و هر تکهای که میخواند یا مینویسد یک گامِ کار برایش خرج دارد. با حرفها، میشود هفتاد گام برای یک جمله. برای هر جمله، برای یک کتابِ کامل. خیلی کند و خیلی گران.
لیلا پس کلمههای کامل. هر کلمه یک گام.
امید چند کلمه وجود دارد؟ فقط در انگلیسی، با اسمها، غلطهای تایپی و کلمههای تازه؟ بهاضافهی همهی زبانهای دیگر، و کد؟
لیلا میلیونها. و همیشه کلمهی تازهای پیدا میشود که آن را ندارد.
امید پس راهحل چیزی میانِ این دوتاست: تکههایی بزرگتر از حرف و کوچکتر از کلمههای کمیاب. هر کلمهی رایج یک تکه است. کلمههای کمیاب از چند تکهی رایج ساخته میشوند. و هیچ متنی ناممکن نیست، چون در بدترین حالت میشود کلمه را با تکههای خیلی کوچک هجی کرد.
توکن و توکنساز
به این تکهها توکن (token) میگویند. پیش از آنکه مدل چیزی بخواند، برنامهای به اسمِ توکنساز (tokenizer) متن را به توکنها میبُرد و هر توکن را به یک عدد تبدیل میکند. (به توکنساز «توکنایزر» هم میگویند.) مدل عددها را میخواند و عدد پس میدهد، و توکنساز آنها را دوباره به متن تبدیل میکند.
توکنساز فهرستی ثابت از همهی تکههایی که میشناسد دارد که به آن واژگان (vocabulary) میگویند. واژگانِ یک توکنسازِ امروزی حدود ۱۰۰ تا ۲۰۰ هزار تکه دارد. این تکهها را با نگاه کردن به حجمِ عظیمی متن انتخاب کردهاند: تکههایی که بیشتر از همه تکرار میشوند نگه داشته شدهاند. چند نتیجه دارد:
- کلمههای رایج یک توکناند. در جملهی بالا «سلام»، «امروز» و «حال» هر کدام یک توکناند.
- فاصله معمولاً به اولِ کلمهی بعدی میچسبد. توکنِ « امروز» با فاصلهی پیش از خودش است، نه «امروز» و یک فاصلهی جدا.
- کلمههای کمیابتر و بلند بریده میشوند. «چطور» دو تکه شده است، و با همین توکنساز، «گربه» سه تکه میشود: «گ»، «رب» و «ه». در انگلیسی هم
unbelievablyبهunوbelوievablyبریده میشود. - عددها تکهتکه میشوند.
1234567به123و456و7بریده میشود. این یکی از دلیلهایی بود که مدلها قبلاً در حسابِ عددهای بلند اشتباههای ساده میکردند.
هر شرکت توکنسازِ خودش را میسازد، پس تکهها از یک مدل تا مدلِ دیگر کمی فرق میکنند. نمونههای این درس از یک توکنسازِ عمومی و پرکاربرد است.
یک توکن چقدر است؟
برای متنِ انگلیسیِ معمولی یک قاعدهی سرانگشتی به کار میآید: هر توکن حدود چهار حرف است، یا حدود سهچهارمِ یک کلمه. پس ۱٬۰۰۰ توکن تقریباً ۷۵۰ کلمه است، حدود یک صفحه و نیم از یک کتاب.
زبانهای دیگر اغلب توکنِ بیشتری لازم دارند. واژگانِ توکنساز بیشتر از متنهایی ساخته شده که با آنها آموزش دیده، و بخشِ بزرگی از آنها انگلیسی است. پس کلمههای انگلیسی بیشتر یک تکهی کاملاند. وقتی یک بندِ کوتاه را یک بار به انگلیسی و یک بار به فارسی نوشتند، یک توکنسازِ پرکاربرد برای انگلیسی ۴۰ توکن لازم داشت و برای فارسی ۶۲ توکن. یک توکنسازِ قدیمیتر، با واژگانی نصفِ آن، برای همان متنِ فارسی ۱۲۷ توکن لازم داشت.
لیلا پس اگر به فارسی کار کنم، مدل برای همان پیام باید توکنهای بیشتری بخواند.
امید بله. و در درسهای بعد میبینی چرا این مهم است: همه چیز با توکن اندازه گرفته میشود.
چرا توکن برای عاملها مهم است
توکن واحدِ همه چیز در بقیهی این دوره است:
- سرعت: مدل پاسخش را هر بار یک توکن مینویسد، پس پاسخِ طولانی وقتِ بیشتری میگیرد.
- محدودیت: مدل در یک لحظه فقط تعدادِ مشخصی توکن را میتواند ببیند.
- قیمت: شرکتهای هوش مصنوعی برای هر توکن پول میگیرند، هم برای آنچه وارد میشود و هم برای آنچه بیرون میآید.
یک عامل زیاد میخواند: فایلها، صفحههای وب، نتیجهی دستورها. همهی اینها توکن میشوند. وقتی به جای «پیام» با «توکن» حساب کنید، بیشترِ کارهای عاملها، و بیشترِ چیزهایی که خراب میشوند، معنا پیدا میکنند.
امتحان کنید
در وب «tokenizer» را جستوجو کنید و یکی از شمارندههای رایگانِ توکن را باز کنید (چند شرکتِ هوش مصنوعی چنین ابزاری دارند). یک جملهی فارسی، همان جمله به انگلیسی، یک کلمهی بلند و کمیاب، و عددی مثل 1234567 را در آن بچسبانید. ببینید تکهها کجا بریده میشوند و تعدادِ توکنها را با هم مقایسه کنید.
درست به کار بردن
- کارهای دقیق در سطحِ حرف را به مدل نسپارید: شمردنِ حرفها، وارونه نوشتنِ یک کلمه، محدودیتِ دقیقِ تعدادِ حرف. مدل حرفها را نمیبیند. اگر مهم است، از آن بخواهید یک برنامهی کوچک بنویسد و اجرا کند (یک عامل میتواند)، یا خودتان بررسی کنید.
- با توکن تخمین بزنید. حدودِ ۷۵۰ کلمهی انگلیسی برای هر ۱٬۰۰۰ توکن آنقدر دقیق هست که بفهمید یک سند برای مدل کوچک است یا بسیار بزرگ.
- انتظار داشته باشید فارسی گرانتر باشد. همان گفتوگو به فارسی، عربی یا هندی میتواند یک و نیم برابرِ انگلیسی یا بیشتر توکن بگیرد و زودتر به محدودیتهای مدل برسد.
واژههای این درس
- توکن - تکهای از متن که مدل میخواند یا مینویسد: یک کلمهی رایج، بخشی از یک کلمه، یک نشانهی نگارشی یا تکهای از یک عدد
- توکنساز - برنامهای که متن را به توکنها میبُرد و آنها را به عدد تبدیل میکند، و برعکس؛ به آن توکنایزر هم میگویند
- واژگان - فهرستِ ثابتِ همهی توکنهایی که یک توکنساز میشناسد
ایدهی اصلی
مدل نه حرف میخواند و نه کلمه. توکن میخواند، تکههایی از متن از یک واژگانِ ثابت، و همه چیزِ یک عامل با آن اندازه گرفته میشود: اینکه چقدر سریع کار میکند، چقدر میتواند ببیند و چقدر هزینه دارد.