Наивный Байес: как работает спам-фильтр¶
Коротко
Спам-фильтр не понимает смысл письма — он считает, какие слова чаще встречаются в спаме, и складывает улики. Каждое слово работает как маленькая подсказка: «акция» или «выигрыш» тянут письмо в спам, «договор» или имя коллеги — в обычную почту. Метод называют наивным, потому что он делает удобное упрощение: считает слова независимыми друг от друга. Несмотря на эту наивность, подход надёжно работает и десятилетиями применяется в защите от спама — от Яндекс Почты и Mail.ru до фильтрации комментариев в соцсетях.
В прошлом уроке — правиле Байеса — мы научились обновлять уверенность по мере поступления улик. Теперь применим эту идею к понятной задаче: как программа решает, бросить письмо в папку «Спам» или показать вам.
Письмо как набор слов-улик¶
Представьте, что фильтр не читает письмо как человек. Он разбирает текст на отдельные слова и смотрит на них как на признаки — простые наблюдаемые свойства объекта, по которым можно делать выводы. Для письма признаки — это слова: «скидка», «срочно», «перейдите», «коллеги», «счёт».
Это похоже на работу следователя. Один отпечаток ничего не доказывает, но десяток мелких улик вместе складываются в уверенную картину. Так и здесь: одно слово «акция» ещё не приговор — рассылка от вашего банка тоже может его содержать. Но если в коротком письме сошлись «акция», «выигрыш», «бесплатно» и «успейте», улики накапливаются, и вывод становится почти однозначным.
Программа, которая по таким признакам относит объект к одной из категорий (здесь — «спам» или «не спам»), называется классификатором. Спам-фильтр — это классификатор с двумя ответами, и наивный байесовский — один из самых известных его видов.
Как фильтр оценивает шансы на спам¶
Логика опирается на правило Байеса, но объяснить её можно без формул. У фильтра есть два вопроса к каждому слову:
- Насколько часто это слово встречается в письмах, которые точно были спамом?
- Насколько часто оно встречается в нормальной переписке?
Если слово «выигрыш» в спаме попадается заметно чаще, чем в обычных письмах, оно становится уликой в пользу спама. Если слово «договор» гораздо чаще встречается в деловой почте, оно тянет в обратную сторону.
Дальше фильтр собирает улики со всех слов письма и взвешивает их вместе. Получаются как бы две чаши весов: «похоже на спам» и «похоже на обычное письмо». Куда перевесит — туда письмо и отправится.
Важно
Фильтр не ищет одно «запретное слово». Решает не отдельная улика, а их сумма. Поэтому спамеры не могут обмануть систему, просто убрав слово «бесплатно»: остаются десятки других признаков, и баланс всё равно складывается не в их пользу.
Почему метод «наивный»¶
Здесь и прячется главное упрощение. Честно учесть, как слова в письме связаны между собой, очень сложно: «банк» и «карта» рядом значат не то же самое, что по отдельности. Наивный байесовский классификатор от этой сложности отказывается и делает наивное предположение независимости — допущение, что каждое слово влияет на ответ само по себе, словно остальных слов в письме нет.
Строго говоря, это неправда: язык полон связей. Но именно это «наивное» допущение позволяет считать вклад каждого слова отдельно и просто складывать улики, а не разбирать все возможные сочетания. Математика становится лёгкой, а программа — быстрой.
Удивительно, но упрощение почти не вредит делу. Для сортировки «спам / не спам» точные связи между словами не так важны — хватает того, что подозрительные слова в среднем тянут в нужную сторону. Это частый сюжет в ИИ: грубое, но удобное предположение работает на практике лучше, чем кажется.
Откуда фильтр знает вероятности: обучение на примерах¶
Сам по себе фильтр ничего не знает о словах. Все вероятности он берёт из опыта — из размеченных писем, где человек или система уже проставили ярлык «спам» либо «не спам».
Механика простая:
- Берём большую коллекцию писем с известными ответами.
- Считаем, как часто каждое слово встречается в спаме и как часто — в обычной почте.
- Эти подсчёты и становятся «уликовой ценностью» каждого слова.
Когда приходит новое письмо, фильтр уже знает «репутацию» слов и быстро взвешивает их. По сути, это обучение на примерах: показали много образцов с ответами — система вывела закономерности. Та же идея лежит в основе машинного обучения с учителем, к которому мы перейдём в следующей главе.
Важная деталь: когда вы нажимаете «Это спам» или «Не спам» в Яндекс Почте или Mail.ru, вы доразмечаете данные. Фильтр пересчитывает репутацию слов и со временем подстраивается под вашу переписку.
Пример: не только почта
Тот же подход работает шире писем. Соцсети и маркетплейсы — VK, Wildberries, Ozon — отсеивают нежелательные комментарии и накрученные отзывы похожей логикой: разбирают текст на слова-признаки и оценивают, насколько он напоминает уже известный спам. Поэтому шаблонные рекламные комментарии часто исчезают ещё до того, как их кто-то увидит.
Простой, но рабочий¶
У наивного Байеса нет глубокого «понимания» текста — и всё же он десятилетиями держится в строю. Причин несколько:
- Скорость. Фильтр взвешивает письмо за доли секунды, что важно при миллионах писем в день.
- Скромные требования. Метод обходится без мощных серверов и гигантских моделей.
- Прозрачность. Видно, какие слова повлияли на решение, — такой фильтр легко проверить и поправить.
- Достаточная точность. Для задачи «спам / не спам» сумма простых улик даёт уверенный ответ.
Это хорошая иллюстрация принципа из урока про неопределённость и шансы: не обязательно быть уверенным в каждой улике, чтобы уверенно решить целиком. Множество слабых подсказок, сложенных вместе, дают надёжный вывод.
Упражнение: взвесьте письмо вручную
Допустим, по опыту фильтра слова делятся так:
- Тянут в спам: «выигрыш», «бесплатно», «успейте», «приз».
- Тянут в обычную почту: «договор», «отчёт», «коллеги», «встреча».
Пришло короткое письмо: «Поздравляем! Ваш приз ждёт вас — успейте получить бесплатно».
Решите, спам это или нет, и объясните логику.
Разбор. Выпишем слова-улики: «приз», «успейте», «бесплатно» — все три из спам-списка. Слов из делового списка нет вообще. Складываем чаши весов: на стороне «спам» — три заметные улики, на стороне «обычное письмо» — ноль. Баланс резко смещён, поэтому фильтр уверенно пометит письмо как спам.
Обратите внимание на «наивность»: мы оценили каждое слово по отдельности и просто сложили подсказки, не задумываясь, как «приз» сочетается с «бесплатно». Именно так и работает наивный байесовский классификатор — и в этом примере упрощение приводит к верному ответу.
Проверьте себя¶
Короткий тест по уроку: выберите ответ и нажмите «Проверить» — увидите счёт и разбор.
Частые вопросы¶
Почему классификатор называют «наивным»?
Из-за упрощающего допущения: он считает слова письма независимыми друг от друга и оценивает каждое отдельно. В реальном языке слова связаны, поэтому предположение «наивное». Но оно сильно упрощает расчёты и на практике почти не вредит точности.
Может ли спам-фильтр ошибаться?
Да. Иногда обычное письмо попадает в спам (например, рассылка с акциями от знакомого магазина), а иногда спам проскакивает в почту. Поэтому существует папка «Спам», а не молчаливое удаление, и кнопки «Это спам / Не спам» — ваши пометки помогают фильтру переучиваться.
Чем наивный Байес отличается от нейросетей?
Это разные по сложности инструменты. Наивный Байес — простой и быстрый метод, который складывает улики от отдельных слов. Нейросети учитывают порядок и сочетания слов, понимают контекст глубже, но требуют больше данных и вычислений. Для базовой фильтрации спама хватает и простого подхода.
Фильтр действительно «читает» мои письма?
Нет, человек ваши письма не читает. Программа автоматически разбирает текст на слова и сравнивает их статистику с уже известными примерами спама. Это технический подсчёт, а не чтение, и в России подобная обработка регулируется законом о персональных данных (152-ФЗ).
В курсе: ← Назад: Правило Байеса простыми словами · Дальше: Виды машинного обучения: с учителем, без учителя, с подкреплением →
Авторы курса: Герман Коваленко (основатель ENGRAM) и Сергей Добров.
Нейросеть на ваших встречах, документах и переписке: отвечает со ссылкой на источник. Это ваша вторая память на базе ИИ. Данные хранятся в России, старт бесплатный.
Зарегистрироваться бесплатноENGRAM запоминает ваши встречи, документы и переписку и мгновенно находит ответ со ссылкой на источник. Ваша вторая память на базе ИИ. Данные в России, старт бесплатный.
Зарегистрироваться бесплатно