Спам, второй раунд: байесовский фильтр входит в игру
Обучаемые фильтры на базе теоремы Байеса появились и меняют расклад. Где они работают лучше серых списков и RBL, а где по-прежнему нужен живой глаз.
байесовские антиспам-фильтры начинают появляться в почтовых системах
Полтора года назад мы разбирали, как воевать с валом спама серыми списками и RBL. Тогда вывод был невесёлый: инструменты грубые, каждый бьёт и по врагу, и по своим, и вся работа - это выбор, где потери меньше. Сейчас картина чуть меняется. В почтовых системах появляются фильтры, которые не смотрят на IP отправителя, а читают само письмо и решают, спам это или нет. Обучаемые, на базе теоремы Байеса. Пощупали на нескольких клиентах - есть что рассказать.
Идея, которая давно напрашивалась
Серые списки и RBL работают по отправителю. Байесовский фильтр работает по тексту. Смотрит на слова, на их комбинации, на структуру письма - и выдаёт вероятность: это спам или нет. Главное отличие - он обучается. Показываешь ему сотню писем-спама и сотню нормальных, он запоминает статистику, и дальше на новых письмах начинает различать. Чем больше примеров - тем точнее.
Идея давно лежала в статьях, но до рабочих реализаций доходило медленно. SpamAssassin нарастил байесовский движок, появился отдельный bogofilter. Не то что "установил и забыл" - требует первоначального обучения на реальной почте клиента, и желательно обеих видов сразу. Но заработало.
Где он оказался лучше того, что было
Первое и главное: байесовский фильтр наконец читает содержимое, а не смотрит на IP. Это меняет расклад там, где RBL был бессилен.
Спамер переехал на новый адрес. RBL его пока не знает, письмо проходит. Серый список пускает через паузу. Байес смотрит на текст и говорит: это я уже видел, структура такая же, вероятность 98%. Стоп. Не все угадывает, но многое.
Письма на русском. RBL - это международные базы, им важен IP. Русскоязычный спам, который в 2002-м был редкостью, сейчас растёт, и черные списки на него реагируют хуже, чем на английский. Байес, обученный на русской почте конкретного клиента, справляется ощутимо лучше - он знает словарный состав, характерные обороты и типичные темы, которые летят именно этому ящику.
Обходы ключевых слов. Спамеры давно не пишут "виагра" напрямую. Пишут через пробелы, латиницей вместо кириллицы, заменяют буквы цифрами. Простые правила по ключевым словам это не ловят. Байес работает со статистикой сочетаний, а не с конкретными словами, и такие трюки его сбивают меньше.
Где фильтр по-прежнему нет
Без иллюзий: байесовский фильтр - не волшебная кнопка, и у него есть понятные слабые места.
Первые недели после обучения - нестабильность. Пока база примеров маленькая, фильтр ошибается и в ту, и в другую сторону. Один клиент в первые дни жаловался, что нужные письма летят в мусор чаще, чем было до фильтра. Нужно несколько сотен примеров и каждая ошибка, которую пользователь помечает вручную, делает модель точнее. Это работа, которую надо поддерживать.
Картинки вместо текста. Сейчас начинает попадаться спам, где всё содержимое - это одна картинка, а текста в теле нет или минимум. Байес читает текст - читать нечего, и письмо проходит. Это не гипотетическая проблема, мы такие письма уже видим.
Пересечение с нормальной деловой почтой. Если клиент торгует медикаментами и регулярно обсуждает ассортимент с поставщиками, словарь его нормальной почты начинает пересекаться с типичным спамом о "таблетках". Фильтр путается. Нужно аккуратно разбирать, что именно отмечать как спам при обучении.
Как мы это используем сейчас
Чистой заменой RBL и серых списков байесовский фильтр не стал. Работает лучше в связке. Порядок примерно такой:
- Серый список первым эшелоном - всё те же тупые рассылки, которые шлют в один заход и не возвращаются. Байес на них тратить ресурсы смысла нет.
- RBL по известным источникам - проверенные списки с точечными адресами, не те, что режут целые подсети.
- Байесовский фильтр третьим слоем - по тому, что прошло дальше. Смотрит на содержимое и выставляет оценку.
Письмо с высокой оценкой спама мы не выбрасываем молча - кладём в папку подозрительных. Пользователь раз в день бежит глазами, находит ошибки, отмечает - фильтр учится. Это та же философия, что была с RBL: тихое удаление письма дороже пропущенного спама. Только теперь у пользователя больше шансов увидеть в папке нормальное письмо, а не случайно потерять его совсем.
Ручной просмотр подозрительных никуда не делся и вряд ли денется - это не недостаток инструмента, а честное признание, что автоматика ошибается. Хороший фильтр уменьшает количество писем, которые нужно смотреть глазами. Полностью убрать этот этап не получается ни у кого из тех, кого мы видим.
Если почта клиента работает на хаосе - нет чёткого понимания, что ходит и куда, нет порядка в настройках сервера - сначала нужно это разобрать, и только потом накатывать фильтрацию. Байесовский фильтр, обученный на грязной базе, просто закрепляет путаницу.
- Спам захлестнул почту, а фильтров толком нет · 15 октября 2002