N-gram
N-gram: دنبالههای n کلمهای برای حفظ ترتیب؛ کاربرد در دستهبندی، پیشبینی کلمه و تشخیص عبارات
N-gram چیست؟
N-gram دنبالهای از n کلمه متوالی است:
- Unigram (1): تککلمه — «گوشی»، «خوب»
- Bigram (2): جفت متوالی — «گوشی خوب»، «خوب است»
- Trigram (3): سهتایی — «گوشی خوب است»
جمله «قیمت گوشی مناسب است» bigramهایش: «قیمت گوشی»، «گوشی مناسب»، «مناسب است».
چرا N-gram؟ حل مشکل ترتیب!
BoW ترتیب را گم میکند: «غذا خوب نبود» و «غذا بد نبود» کلمات مشابهی دارند اما معنای متفاوت! با bigram:
- «خوب نبود» یک واحد معنایی منفی ✓
- «بد نبود» یک واحد معنایی مثبت (دوبرابر منفی = مثبت!) ✓
کاربردها
| کاربرد | توضیح |
|---|---|
| دستهبندی بهتر | BoW + bigram = ویژگیهای معناییتر |
| پیشبینی کلمه بعدی | «دستگاه را روشن ...» ← کن؟ کرد؟ (مبنای کیبورد موبایل!) |
| تشخیص عبارات ثابت | «به نظر میرسد»، «در حال حاضر» |
| تشخیص سرقت ادبی | تطابق دنبالههای طولانی |
| غلطیابی | ترکیبهای نادر احتمالاً غلطاند |
انتخاب n چقدر؟
- n بزرگ: معنای بیشتر اما داده کمتر (هر n-gram نادرتر) — پراکندگی داده
- n کوچک: داده کافی اما معنای کمتر
- در عمل: ۱ تا ۳ رایجاند؛ ۴+ فقط با داده عظیم
فرمول احتمال شرطی
N-gram پایه مدلهای زبانی آماری است:
P(کلمه بعدی | n-1 کلمه قبلی)
bigram: P(کرد | روشن) = تعداد "روشن کرد" / تعداد "روشن"
این ایده ساده، سالها قلب پیشبینی کلمه و ترجمه ماشینی بود — مبحث مدل زبانی!
نکته: در TfidfVectorizer پایتون، پارامتر ngram_range=(1,2) یعنی هم unigram هم bigram — معمولاً دقت دستهبندی را بهبود میدهد!
جمعبندی
- N-gram = دنباله n کلمه متوالی؛ حفظ حداقلی ترتیب
- Bigram عبارات معنایی را یکجا میبیند («خوب نبود»)
- پایه پیشبینی کلمه و مدلهای زبانی آماری
- n بین ۱ تا ۳؛ بزرگتر = داده پراکنده
این مبحث بخشی از دوره آموزش کامل پردازش زبان طبیعی (NLP) است.