تا حالا اسم زبانهای بهمچسبیده یا agglutinative languages به گوشت خورده؟ مثلاً ترکی یا فنلاندی رو میگم؛ زبانهایی که توشون یک کلمه ممکنه کلی جزء کوچیک (یا به اصطلاح مورفیم) رو در دل خودش جا بده. حالا چرا دارم اینو میگم؟ چون وقتی بخوای برای این زبونها مدل پردازش زبان طبیعی (یا همون NLP) بسازی، یکی از اولین و مهمترین سؤالها اینه: آقا یا خانم! چطوری باید این کلمهها رو “تکهتکه” کنیم یا همون tokenize کنیم؟
یه مقاله جدید روی arXiv اومده که دقیقاً اومده این سؤال رو برای دو تا از این زبونها یعنی ترکی و فنلاندی بررسی کنه. خلاصه داستان اینه: اگه دیتای خیلی زیادی نداری (که معمولاً نداریم!)، کدوم روش توکنایزینگ بهتر جواب میده؟
حالا چیا رو مقایسه کرده بودن؟ چهار مدل معمول و معروف:
- Word-level Tokenization: همون حالت ساده که هر کلمه، یک توکن حساب میشه.
- Character-level Tokenization: این یعنی هر حرف رو جدا جدا میگیریم. (مثلاً اگه بخوایم اسم “گلریز” رو کاراکتری تکه کنیم، میشه: گ، ل، ر، ی، ز)
- n-gram Tokenization: یعنی دنبالههای چندتایی از حروف رو به عنوان توکن حساب میکنیم. n-gram خودش هم یه روش آماریه برای تکه کردن متن به تکههای کوتاهتر.
- Byte Pair Encoding (BPE): یه روش هوشمندانهتر که میاد تکههایی که بیشتر تکرار شدن رو ترکیب میکنه و به عنوان یه توکن در نظر میگیره. خلاصه، یه جور روش زیرکانه برای تکهتکه کردن متن!
برای این تست، فقط به اندازه ۱۰هزار مقاله از ویکیپدیا داشتیم. یعنی میخواستن دقیقاً شرایطی رو شبیهسازی کنن که داده بسیار کمه و منابع محدود هست. بعد هم اومدن مدلاشونو آموزش دادن و نتیجه رو با استفاده از یه تسک به اسم Named Entity Recognition یا NER (که کارش شناسایی اسم آدمها، مکانها و… تو جملههاست) سنجیدن.
حالا نتیجه چه شد؟ شاید فکر کنی روشهای فانتزی مثل BPE که همه ازش تعریف میکنن باید خیلی بهتر عمل کنه، مخصوصاً برای همین زبانهای بهمچسبیده. ولی… تقریباً خلافشه! تو همه تستها، حتی با وجود قابلیتهای عجیبوغریب روشهای زیرکانه، همون روش ساده word-level یعنی کلمهای، همیشه بالاترین کیفیت رو برای embeddingها (به فارسی: بردارهای عددی که معنی کلمهها رو منتقل میکنن) داد! یعنی با اینکه فکر میکردن تکهتکه کردن زیرکلمهای میتونه به دلایل مورفولوژیکی (قواعد ساخت کلمه) بهتر باشه، ولی در عمل وقتی داده کم باشه، بهتره همون کلمه رو به عنوان یک واحد جدا حساب کنیم.
خلاصه قصه برای کسایی که میخوان برای زبانهای کم داده و بهمچسبیده مثل ترکی و فنلاندی تو NLP مدل بسازن اینه: دنبال روشهای عجیب و سنگین نرید، همون توکنایز ساده و کلمهای نتیجه بهتری میده! پس دفعه بعد اگه با یه زبان عجیب طرف بودین و منابع محدودی داشتین، یادتون باشه که ارزش سادگی رو دست کم نگیرید.
این یافتهها کلی تأثیر عملی دارن، مثلاً واسه وقتی میخوای کش بیرون بری پایپلاین NLP واسه یه زبان نادر بسازی یا سیستم هوشمندی راه بندازی که منابعش محدوده؛ چون میفهمی بعضی وقتا راه سادهتر همون راه درستتره!
منبع: +