توکنسازی (Tokenization)
توکنسازی: تقسیم متن به کلمات و جملات، چالشهای فارسی (نیمفاصله، علائم) و پیادهسازی با split و regex
توکنسازی چیست؟
توکنسازی (Tokenization) اولین گام پردازش هر متن: تقسیم متن به واحدهای معنایی به نام توکن — معمولاً کلمات، اما گاهی جملات، زیرکلمات یا حتی کاراکترها.
همه تحلیلهای بعدی (شمارش، بردار، مدل) روی توکنها انجام میشود؛ پس کیفیت توکنسازی حیاتی است!
انواع توکنسازی
- کلمهای (Word): رایجترین — تقسیم بر اساس فاصله و علائم
- جملهای (Sentence): برای خلاصهسازی و ترجمه
- زیرکلمهای (Subword): «نامعتبر» ← «نام» + «عتبر» — روش مدلهای مدرن مثل BERT و GPT!
- کاراکتری: برای تشخیص غلط املایی و زبانهای پیچیده
چرا split ساده کافی نیست؟
"قیمت: ۲۵۰,۰۰۰ تومان!" .split()
← ["قیمت:", "۲۵۰,۰۰۰", "تومان!"]
مشکلات: علائم چسبیده به کلمه، اعداد با جداکننده، نیمفاصله، مخففها («د.»)، ایمیل و URL. توکنساز خوب باید اینها را هوشمندانه جدا کند.
چالشهای خاص فارسی
- نیمفاصله (ZWNJ): «میروم» یک کلمه است یا «می» + «روم»؟ نیمفاصله () چسبیده اما جداکننده معنایی است!
- علائم چسبیده: «کتابها» یا «کتابها»؟
- اعداد فارسی/عربی/انگلیسی: ۱۲۳ و 123 و ١٢٣
- حروف عربی مشابه: «ي» عربی ≠ «ی» فارسی!
توکنسازی جملات
جدا کردن جملات هم ساده نیست: نقطه پایان جمله است اما در «۳.۵» یا «د.» و «ایرانسل.» نه! توکنسازهای حرفهای این موارد را با قواعد و مدلهای آماری تشخیص میدهند.
توکنسازی زیرکلمهای — روش مدرن
مدلهای امروز (GPT، BERT) از روشهایی مثل BPE (Byte Pair Encoding) استفاده میکنند: کلمات پرتکرار کامل و کلمات نادر به قطعات معنادار شکسته میشوند:
"نامعتبر" ← ["نام", "عتبر"]
"unhappiness" ← ["un", "happiness"]
مزیت: واژگان محدود (مثلاً ۳۰ هزار توکن) اما پوشش همه کلمات، حتی ندیدهها!
جمعبندی
- توکنسازی = تقسیم متن به واحدهای معنایی؛ پایه همه پردازشها
- split ساده کافی نیست: علائم، اعداد، نیمفاصله چالشاند
- فارسی چالشهای خاص خودش را دارد (نیمفاصله، ي/ی)
- مدلهای مدرن از توکن زیرکلمهای (BPE) استفاده میکنند
این مبحث بخشی از دوره آموزش کامل پردازش زبان طبیعی (NLP) است.