Naive Bayes برای متن
الگوریتم Naive Bayes: قضیه بیز برای دستهبندی متن، فرض استقلال ویژگیها و پیادهسازی تشخیص اسپم
چرا Naive Bayes در متن میدرخشد؟
Naive Bayes دهها سال قهرمان دستهبندی متن بوده (و هنوز baseline قوی است): سریع، کمداده و برای متن بهطور غافلگیرانهای خوب!
قضیه بیز
P(کلاس | متن) = P(متن | کلاس) × P(کلاس) / P(متن)
یعنی: «احتمال اینکه این متن اسپم باشد، با دیدن کلماتش چقدر است؟» — دقیقاً همان چیزی که دستهبند نیاز دارد!
فرض «سادهلوحانه» (Naive)
محاسبه P(متن | کلاس) سخت است (همه ترکیب کلمات!). فرض سادهکننده: کلمات از هم مستقلاند:
P("برنده شدید جایزه" | اسپم)
= P("برنده"|اسپم) × P("شدید"|اسپم) × P("جایزه"|اسپم)
این فرض «غلط» است (کلمات مرتبطاند!) اما در عمل عالی جواب میدهد — چون برای دستهبندی فقط نیاز به مقایسه نسبی است نه احتمال دقیق.
آموزش = شمارش!
- احتمال پیشین: P(اسپم) = تعداد اسپمها / کل
- برای هر کلمه: P(کلمه | اسپم) = تکرار در اسپمها / کل کلمات اسپم
همین! آموزش Naive Bayes فقط شمارش فراوانی است — فوقالعاده سریع.
مشکل کلمه دیدهنشده و Smoothing
اگر کلمهای در اسپمها هرگز نیامده، P = 0 و کل حاصلضرب صفر میشود! راهحل: Laplace Smoothing:
P(کلمه|کلاس) = (تکرار + 1) / (کل + اندازه واژگان)
دو نسخه رایج
| نسخه | ورودی | کاربرد |
|---|---|---|
| Multinomial | تعداد تکرار | متن بلند ✓ |
| Bernoulli | حضور/غیاب | متن کوتاه |
چرا در متن خوب جواب میدهد؟
- ویژگیهای متن (کلمات) واقعاً «تقریباً» مستقلاند
- داده کم هم کافی است (فقط شمارش!)
- سرعت: آموزش روی میلیونها ایمیل در ثانیهها
- تفسیرپذیر: میتوانی ببینی کدام کلمات «اسپمساز»اند!
جمعبندی
- بیز: P(کلاس|متن) از P(کلمه|کلاس)ها
- فرض استقلال «غلط اما مفید»
- آموزش = شمارش؛ فوق سریع و کمداده
- Smoothing برای کلمات دیدهنشده ضروری
این مبحث بخشی از دوره آموزش کامل پردازش زبان طبیعی (NLP) است.