NAVIDIX · ARTICLE
چرا هوش مصنوعی نمیتواند حرفهای یک کلمه را بشمارد
مدلی که میتواند دربارهٔ فیزیک کوانتوم بحث کند، از شمردن حرفهای کلمهٔ strawberry درمیماند. این یک باگ بامزه نیست — نشانهٔ چیزی است که اگر ندانی، مرتب سرت کلاه میرود.
یک آزمایش کوچک بکن. برو سراغ هر مدل زبانی که دم دستت است و بپرس:
در کلمهٔ strawberry چند تا حرف R هست؟
جواب درست سه است. احتمال خوبی هست که جواب اشتباهی بگیری — یا حداقل تا همین اواخر میگرفتی.
حالا از همان مدل بخواه یک تابع بازگشتی در پایتون بنویسد، یا تفاوت دو نظریهٔ فلسفی را توضیح بدهد. بینقص انجام میدهد.
این تناقض، بامزه به نظر میرسد و در اینترنت هم به همان شکل پخش شد — بهعنوان جوک. ولی پشتش یکی از مهمترین چیزهایی است که هر کسی که با این ابزارها کار میکند باید بداند.
مدل اصلاً حرف نمیبیند
اینجا هستهٔ ماجراست، و وقتی بفهمیاش دیگر هیچوقت از این خطاها تعجب نمیکنی.
قبل از اینکه مدل کاری با متن تو بکند، متن تکهتکه میشود. به این تکهها میگویند توکن. و توکنها حرف نیستند — قطعههایی از متناند که مدل یاد گرفته برای فهمیدن معنا مفیدند.
بعد هر توکن تبدیل به یک عدد میشود. و از آن لحظه به بعد، مدل فقط با عدد و ریاضیات کار میکند. متن دیگر وجود ندارد.
برای کلمهٔ strawberry، مدل ده حرف نمیبیند. چند قطعهٔ معنادار میبیند — چیزی شبیه st و raw و berry — که هرکدام با یک عدد جایگزین شدهاند.
حالا از او بپرس در این چیز چند تا R هست. او دارد به سه عدد نگاه میکند. راه سادهای وجود ندارد که از آن اعداد برگردد به تعداد تکرار یک حرف مشخص.
یک قیاس که کمک میکند
فرض کن کسی زبانی را فقط با کلمه یاد گرفته، نه با حروف. مثل کسی که چینی را با حفظکردن شکل کلی هزاران کاراکتر یاد گرفته باشد.
از او بپرس «کتاب» یعنی چه — بیدرنگ جواب میدهد.
از او بپرس در «کتاب» چند تا نقطه هست — باید بنشیند و از اول نگاه کند، و ممکن است اشتباه کند. نه به این دلیل که فارسی بلد نیست، به این دلیل که هیچوقت لازم نبوده کلمه را به اجزایش بشکند.
مدلهای زبانی دقیقاً همینطورند. معنا را در سطح قطعه یاد گرفتهاند، نه در سطح نویسه.
چرا این را درست نمیکنند؟
سؤال بدیهی این است که خب چرا توکنسازی را حرفبهحرف نمیکنند تا این مشکل حل شود.
جواب: چون معاملهای است که آگاهانه انجام شده.
روش رایج توکنسازی — چیزی به نام BPE یا کدگذاری جفتبایت — چند نویسه را در یک توکن جمع میکند. این کار متن را کوتاهتر میکند، یعنی مدل با همان توان محاسباتی میتواند متن خیلی بیشتری را ببیند و بفهمد.
اگر به حرف برگردی، طول ورودی چند برابر میشود. هزینهٔ آموزش و اجرا بالا میرود. و در ازای این هزینه چه به دست میآوری؟ توانایی شمردن حرف — کاری که کسی واقعاً برای انجامش سراغ مدل زبانی نمیآید.
پس این یک باگ نیست. یک انتخاب مهندسی است: کارایی در برابر جزئیات سطح نویسه. و برای ۹۹ درصد کاربردها، انتخاب درستی است.
کجاهای دیگر همین مشکل سراغت میآید
اینجا بخشی است که واقعاً به کارت میآید، چون این محدودیت فقط در آن سؤال بامزه ظاهر نمیشود.
شمارش هر چیزی. «دقیقاً پنج کلمه بنویس»، «یک عنوان زیر ۶۰ کاراکتر بده»، «سه پاراگراف بنویس نه چهار» — همهٔ اینها روی همان دیوار میخورند. مدل تخمین میزند، نمیشمارد.
بازی با حروف. جناس، آکروستیک، قافیههای دقیق، شعری که هر بیتش با حرف مشخصی شروع شود. گاهی درست درمیآید، ولی به شانس نزدیکتر است تا به توانایی.
زبانهای غیرلاتین، بدتر. فارسی و عربی در بیشتر توکنایزرها ناکارآمدتر شکسته میشوند — گاهی یک کلمهٔ ساده به چند توکن تقسیم میشود. این یعنی هم هزینهٔ بیشتر، هم دقت کمتر در هر کاری که به ساختار کلمه ربط دارد.
اعداد و محاسبات. عددهای بلند هم به توکنهای عجیب شکسته میشوند، و برای همین است که مدلها در حساب دقیق ضعیفاند مگر اینکه ابزار حساب داشته باشند.
پس چه کار کنیم
راهحلها سادهاند، به شرطی که بدانی مشکل از کجاست.
کار شمارشی را به مدل نده. اگر عنوان باید زیر ۶۰ کاراکتر باشد، از مدل چند گزینه بگیر و خودت بشمار. دو ثانیه وقت میبرد و صددرصد درست است.
اگر مجبوری، فاصله بینداز. نوشتن s t r a w b e r r y هر حرف را به توکن جدا تبدیل میکند و دقت بالا میرود. ترفند زشتی است ولی کار میکند.
بخواه ابزار استفاده کند. مدلهایی که میتوانند کد اجرا کنند، اگر بگویی «با کد بشمار» جواب دقیق میدهند — چون آنوقت شمارش را پایتون میکند نه مدل.
به «حدود» راضی باش. «یک پاراگراف کوتاه» دستور بهتری از «دقیقاً ۵۰ کلمه» است، چون با ذات ابزار میجنگد بهجای اینکه از آن استفاده کند.
نکتهٔ بزرگتر
این ماجرا یک درس کلیتر دارد که ارزشش از خودِ توکنسازی بیشتر است.
مدلهای زبانی در چیزهایی که به نظر سخت میآیند خوباند و در چیزهایی که به نظر ساده میآیند گاهی بد. این برعکس شهود ماست دربارهٔ ماشینها — ما عادت کردهایم ماشین در حساب و شمارش بینقص باشد و در معنا ضعیف.
هر بار که خروجی عجیبی میگیری، بهجای اینکه فکر کنی «مدل احمق است»، این سؤال را بپرس: این کار به چه چیزی نیاز دارد که مدل اصلاً نمیبیند؟
بیشتر وقتها جواب همانجاست.
جمعبندی
مدل حرفهای یک کلمه را نمیبیند؛ قطعههایی میبیند که به عدد تبدیل شدهاند. این یک نقص نیست، یک معاملهٔ آگاهانه است که کارایی را بر جزئیات سطح نویسه ترجیح داده.
فهمیدن این یک نکته، دهها خطای بهظاهر بیربط را قابلپیشبینی میکند — و پیشبینیپذیری، تفاوت بین کسی است که با ابزار بازی میکند و کسی که با آن کار میکند.
اگر میخواهی بدانی چه چیزی را باید به مدل بگویی و چه چیزی را نه، آناتومی یک پرامپت خوب دقیقاً همین است — با پرامپتساز تعاملی. و اگر تازه واردی، راهنمای صفرِ صفر بدون پیشنیاز نوشته شده. کتابخانهٔ ۲۰۰ پرامپت آماده هم برای وقتی است که میخواهی از نمونهٔ کارشده شروع کنی.
منابع
- «Why Do Large Language Models (LLMs) Struggle to Count Letters?»، arXiv:2412.18626 — arxiv.org
- «The Strawberry Problem: Emergence of Character-level Understanding in Tokenized Language Models»، arXiv:2505.14172 — arxiv.org
- «Counting Ability of Large Language Models and Impact of Tokenization»، arXiv:2410.19730 — arxiv.org
- «Why LLMs Can't Count the R's in 'Strawberry' & What It Teaches Us»، Arbisoft — arbisoft.com
- «Do Language Models Count Letter R's? The Hidden Cost of Tokenization» — jianliao.github.io
محمد نویدی — استودیو نویدیکس