یادگیری آخر هفته

درس ۲

تکه‌هایی به اسم توکن

مدل «برفش» را سه تکه نوشت؛ همین تکه‌ها فارسی را برای مدل‌ها گران‌تر از انگلیسی می‌کنند.

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

مدل متن را تکه‌تکه می‌خواند و می‌نویسد

به این تکه‌ها توکن (token) می‌گویند. متن پیش از رسیدن به مدل، به توکن‌ها شکسته می‌شود. این شکستن کار برنامه‌ی جداگانه‌ای است که اینجا به آن توکن‌ساز (tokenizer) می‌گوییم؛ در نوشته‌های دیگر اسم «توکنایزر» را هم می‌بینید.

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

طول متن، سرعت و قیمت به تعداد توکن‌ها بستگی دارد

تعداد توکن‌ها سه چیز را تعیین می‌کند. مدل هر بار فقط تعداد محدودی توکن را می‌بیند که به آن پنجره‌ی زمینه (context window) می‌گویند؛ متن پرتوکن‌تر زودتر آن را پر می‌کند. مدل در هر قدم یک توکن می‌نویسد، پس جواب پرتوکن‌تر دیرتر تمام می‌شود. سرویس‌هایی هم که استفاده از مدل را می‌فروشند قیمت را بر حسب توکن حساب می‌کنند.

همان جمله به فارسی توکن‌های بیشتری می‌خواهد

سال ۲۰۲۳ چند پژوهشگر دانشگاه آکسفورد توکن‌های حدود دو هزار جمله‌ی انگلیسی و ترجمه‌ی فارسی همان جمله‌ها را با توکن‌ساز آن روزهای چت‌جی‌پی‌تی شمردند. متن فارسی در مجموع ۳٫۲۸ برابر انگلیسی توکن شد. این شمارش را خودم تکرار کردم و عدد تا آخرین توکن همان درآمد.

توکن‌ساز جدیدتری که مدل‌های بعدی چت‌جی‌پی‌تی (مثل gpt-4o و gpt-5) به کار می‌برند، برای همان جمله‌ها در مجموع حدود ۱٫۵ برابر انگلیسی توکن می‌سازد. فاصله هنوز هست، ولی خیلی کمتر شده.

یکی از همین جمله‌ها از یک راهنمای سفر آمده است: «فارسی دستور زبانی نسبتاً آسان و عمدتاً منظم دارد.» اصل انگلیسی‌اش (Persian has a relatively easy and mostly regular grammar) با هر دو توکن‌ساز ۱۱ توکن است. نسخه‌ی فارسی با توکن‌ساز قدیمی ۳۸ توکن شد و بعضی تکه‌هایش حتی یک حرف کامل نبودند: «ز» در «زبانی» دو نیم شد. توکن‌ساز جدید همین جمله را ۱۶ تکه می‌کند:

«فار» «سی» «دستور» «ز» «بانی» «نسبت» «اً» «آسان» «و» «عمد» «ت» «اً» «من» «ظم» «دارد» و نقطه‌ی آخر.

تکه‌ها را خودتان ببینید

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

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

متن

توکن‌ساز

در کل دو هزار جمله

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

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

تکه‌تکه شدن فارسی به فهرست توکن‌ساز برمی‌گردد

خیلی‌ها فکر می‌کنند فارسی برای هوش مصنوعی زبان سختی است و تکه‌های زیاد هم از همین سختی می‌آید. ولی جمله‌ی راهنمای سفر بی‌آنکه یک حرفش عوض شود، از ۳۸ تکه به ۱۶ تکه رسید. فقط توکن‌ساز عوض شده بود: فهرست جدید حدود دو برابر بزرگ‌تر است و تکه‌های فارسی بلندتری دارد. تعداد تکه‌ها نشانه‌ی سختی زبان نیست.

ده دقیقه با قلم و کاغذ

یک جمله‌ی کوتاه فارسی و ترجمه‌ی انگلیسی‌اش را روی کاغذ بنویسید. بعد خودتان را جای توکن‌ساز بگذارید: کلمه‌های رایج را یک تکه نگه دارید و کلمه‌های کم‌کاربرد را به تکه‌هایی بشکنید که زیاد دیده‌اید، مثل «می» یا «ها». تکه‌های هر جمله را بشمارید، تعداد فارسی را بر تعداد انگلیسی تقسیم کنید و عددتان را کنار ۳٫۲۸ و ۱٫۵ بگذارید.

اگر کنجکاوید چرا «ز» دو نیم شد، دلیلش این است که توکن‌ساز با بایت (byte) کار می‌کند. در یوتی‌اف ۸ (UTF-8)، رایج‌ترین روش ذخیره‌ی متن، هر حرف انگلیسی یک بایت است و هر حرف فارسی دو بایت؛ یک تکه می‌تواند فقط یکی از این دو بایت باشد. جمله‌ی فارسی راهنمای سفر از اصلش کوتاه‌تر است، ولی ۸۹ بایت دارد و انگلیسی ۵۷ بایت.

واژه‌نامه‌ی این درس

«یادگیری آخر هفته» خواهر فارسی خبرنامه‌ی انگلیسی‌ام Weekend Learning است که درباره‌ی ارزیابی مدل‌هاست و در هفته‌هایی می‌آید که این یکی نمی‌آید.

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

این درس را اجرا کنید و با خود ببرید

دفترچه‌ی ژوپیتر (Jupyter notebook) این درس جز خود پایتون (Python) به چیز دیگری نیاز ندارد و بدون اینترنت اجرا می‌شود: بایت‌ها و حرف‌های هر دو جمله را می‌شمارد و تکه‌های هر توکن‌ساز را از داده‌های درس نشان می‌دهد. فایل دفترچه را دانلود کنید یا آن را در گیت‌هاب ببینید.

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

درس‌های تازه هر دو هفته یک بار، جمعه‌ها، در خبرنامه‌ی یادگیری آخر هفته در لینکدین می‌آیند.