Как программа превращает текст в набор данных
Машина не понимает значения фраз и не читает текст подобно человеку. Чтобы алгоритм смог оценить содержимое письма, текст проходит предварительную подготовку, которую в анализе данных называют предобработкой. Программа очищает сообщение от лишнего мусора, оставляя чистые статистические единицы.
- Токенизация разбивает сплошной текст на отдельные кирпичики, то есть слова, числа и знаки препинания.
- Приведение к нижнему регистру объединяет варианты написания одного и того же слова, чтобы слова «КРЕДИТ» и «кредит» считались одинаковым признаком.
- Удаление стоп-слов избавляет текст от предлогов, союзов и междометий, которые встречаются везде одинаково часто и не несут практической пользы для распознавания темы.
- Лемматизация или стемминг отсекает окончания и суффиксы, приводя слова к их словарной форме или единой основе, чтобы формы «выигрыши», «выигрыша» и «выиграл» давали сигнал об одном и том же понятии.
После такой чистки получается модель мешка слов. В ней порядок слов и грамматика предложения полностью игнорируются, сохраняется только перечень лемм и количество их повторений. Для классификатора письмо становится просто мешком, из которого достают жетоны с отдельными словами.
Формула Байеса и математическая наивность
Основу большинства классических фильтров заложил священник и математик Томас Байес еще в восемнадцатом веке. Теорема Байеса описывает вероятность наступления события при условии, что уже произошло другое связанное событие. В компьютерных фильтрах этот принцип звучит конкретно: какова вероятность того, что письмо является спамом, если внутри него обнаружено слово «акция».
Слово «наивный» в названии классификатора появилось из-за сознательного упрощения реальности. В живой человеческой речи слова связаны по смыслу. Если в тексте появилось слово «номер», вероятность встретить рядом слово «карты» или «счета» резко возрастает. Байесовский алгоритм делает вид, что все слова в письме появляются независимо друг от друга. Математически это допущение некорректно, но на практике оно невероятно ускоряет вычисления и дает точность фильтрации около девяноста восьми процентов.
Взлет байесовской фильтрации произошел в 2002 году, когда программист и публицист Пол Грэм опубликовал эссе «План для спама». Грэм предложил не составлять бесконечные списки запрещенных выражений вручную, а дать алгоритму возможность обучаться на реальных входящих ящиках пользователей. Этот подход быстро взяли на вооружение разработчики почтовых программ, включая популярный открытый фильтр SpamAssassin.
Проблема новых слов и сглаживание Лапласа
При перемножении вероятностей возникает серьезная математическая ловушка. Если классификатор встречает редкое слово, которого раньше никогда не было в базе спама, вероятность спама для этого конкретного слова формально равна нулю. Если просто перемножить вероятности всех слов длинного текста, итоговое произведение обнулится из-за одного единственного нуля. Одно неизвестное слово способно сломать весь расчет.
Эту проблему программисты решают методом сглаживания Лапласа. К счетчику упоминаний каждого слова искусственно прибавляют единицу, как будто каждое существующее в словаре слово алгоритм уже видел хотя бы один раз в каждой категории. Нули исчезают из формул, вычисления остаются устойчивыми, а фильтр сохраняет способность адекватно оценивать текст даже при появлении редких опечаток или жаргонизмов.
Как спамеры обходят фильтры и как программы отвечают на это
Противостояние авторов спама и разработчиков фильтров длится десятилетиями. Классической техникой обхода стало байесовское отравление. Злоумышленники добавляют в конец рекламного текста длинные фрагменты из публичных книг, новостных заметок или статей Википедии. Они делают этот текст невидимым для человека, задавая цвет шрифта под цвет фона страницы. Программа считывает добропорядочные слова, их высокая положительная вероятность перевешивает спамные маркеры, и письмо пробивается во входящие.
Второй популярный прием обхода связан с искажением написания. Спамеры используют похожие по начертанию буквы из других алфавитов, разделяют буквы точками или упаковывают текст в картинку, чтобы текстовый фильтр вообще ничего не нашел внутри тела сообщения.
- Использование n-грамм позволяет дробить слова на сочетания по две-три буквы, благодаря чему слова со скрытыми заменами символов опознаются по характерным фрагментам основы.
- Встроенное распознавание символов через OCR извлекает скрытые тексты прямо из прикрепленных картинок и баннеров.
- Анализ технической информации проверяет цифровую подпись домена отправителя по стандартам SPF, DKIM и DMARC еще до анализа самого текста сообщения.
В современной почте наивный байесовский классификатор работает в связке с нейросетями и репутационными базами IP-адресов. Байесовский расчет выполняет роль быстрого и надежного первого рубежа, мгновенно отсекающего очевидный мусор без лишней нагрузки на серверы.
Частые вопросы
Почему полезное письмо от знакомого иногда по ошибке улетает в спам?
Такое явление называют ложным срабатыванием. Это происходит, если почтовый сервер отправителя неправильно настроил технические записи подтверждения домена, либо если в теле письма оказалось много ссылок на подозрительные сайты и специфических слов, часто фигурирующих в спам-базах.
Зачем спамеры заменяют русские буквы «а» или «о» на похожие английские символы?
Для человеческого глаза буквы выглядят одинаково, но компьютер видит разные числовые коды символов Юникода. Раньше это помогало обмануть базу данных, создавая иллюзию незнакомого редкого слова, однако сейчас алгоритмы нормализуют похожие знаки перед анализом.
Обучается ли почтовый фильтр, когда пользователь нажимает кнопку «Это спам»?
Да, эта кнопка отправляет письмо в обучающую выборку персонального классификатора. Счетчики вероятностей для слов из этого сообщения корректируются, поэтому аналогичные рассылки в будущем станут определяться почтовой системой жестче.
Вытеснили ли глубокие нейросети алгоритм Байеса из современных почтовых сервисов?
Нейросети работают глубже, но требуют много вычислительных ресурсов. Почтовые гиганты используют многоуровневую систему, где легкий байесовский классификатор отсеивает поток явного мусора, а сложные языковые трансформеры привлекаются только для спорных писем.