Naive Bayes برای متن

الگوریتم Naive Bayes: قضیه بیز برای دسته‌بندی متن، فرض استقلال ویژگی‌ها و پیاده‌سازی تشخیص اسپم

چرا Naive Bayes در متن می‌درخشد؟

Naive Bayes ده‌ها سال قهرمان دسته‌بندی متن بوده (و هنوز baseline قوی است): سریع، کم‌داده و برای متن به‌طور غافلگیرانه‌ای خوب!

قضیه بیز

P(کلاس | متن) = P(متن | کلاس) × P(کلاس) / P(متن)

یعنی: «احتمال اینکه این متن اسپم باشد، با دیدن کلماتش چقدر است؟» — دقیقاً همان چیزی که دسته‌بند نیاز دارد!

فرض «ساده‌لوحانه» (Naive)

محاسبه P(متن | کلاس) سخت است (همه ترکیب کلمات!). فرض ساده‌کننده: کلمات از هم مستقل‌اند:

P("برنده شدید جایزه" | اسپم)
= P("برنده"|اسپم) × P("شدید"|اسپم) × P("جایزه"|اسپم)

این فرض «غلط» است (کلمات مرتبط‌اند!) اما در عمل عالی جواب می‌دهد — چون برای دسته‌بندی فقط نیاز به مقایسه نسبی است نه احتمال دقیق.

آموزش = شمارش!

  1. احتمال پیشین: P(اسپم) = تعداد اسپم‌ها / کل
  2. برای هر کلمه: P(کلمه | اسپم) = تکرار در اسپم‌ها / کل کلمات اسپم

همین! آموزش Naive Bayes فقط شمارش فراوانی است — فوق‌العاده سریع.

مشکل کلمه دیده‌نشده و Smoothing

اگر کلمه‌ای در اسپم‌ها هرگز نیامده، P = 0 و کل حاصل‌ضرب صفر می‌شود! راه‌حل: Laplace Smoothing:

P(کلمه|کلاس) = (تکرار + 1) / (کل + اندازه واژگان)

دو نسخه رایج

نسخهورودیکاربرد
Multinomialتعداد تکرارمتن بلند ✓
Bernoulliحضور/غیابمتن کوتاه

چرا در متن خوب جواب می‌دهد؟

نکته: فیلتر اسپم اولیه Gmail هم از Naive Bayes شروع کرد! ساده اما مؤثر — درسی برای همه پروژه‌ها: اول baseline ساده.

جمع‌بندی

این مبحث بخشی از دوره آموزش کامل پردازش زبان طبیعی (NLP) است.

ابزارهای مرتبط