Рубрики
 
 

С Байесом наперевес

Впервые опубликовано:
16.12.2004
SoftKey.Info

Из всех существующих методов фильтрации спама применение теоремы Байеса выглядит наиболее привлекательным.

Война со спамом давно перешла в разряд затяжных. Любой новый метод борьбы с этой напастью приводит к временному успеху, который сменяется новой волной рекламных рассылок. И так будет продолжаться еще очень долго. Просто потому, что рассылка спама - высокодоходный бизнес, подкрепленный устоявшимся рынком и стабильным спросом. Что бы ни говорили противники спама, одно остается очевидным: данный метод рекламы эффективен. В массе своей получатели все еще охотно откликаются на содержащиеся в спаме предложения товаров и услуг. Более того, это - самый дешевый способ рекламы. Стоимость контакта с клиентом при массовой рассылке рекламных писем гораздо ниже, чем при рекламировании любым другим способом.

Соответственно, растут прибыли, а значит, и техническая база спамеров. У них уже давно появилась возможность на каждую придумку антиспамеров отвечать своими решениями. Прежде чем осуществить массовую рассылку, спамеры тестируют письмо на последних версиях популярных антиспам-фильтров и разными ухищрениями добиваются максимального "прохождения" послания. Только после этого начинается "ковровое бомбометание" по всем интернет-пользователям.

А что же другая сторона? Время от времени появляются победные реляции о том, что еще немного, еще чуть-чуть, и о массовых рассылках невостребованной рекламы можно будет забыть. Но проходит неделя-другая, и выясняется, что не все так радужно, что спамеры, например, объединились с вирусописателями, и теперь спам может рассылать любая зараженная машина без ведома ее хозяина. И так далее.

Война продолжается, и оказывается, что далеко не все средства в ней хороши. Например, была идея создавать черные списки IP-адресов, уличенных в массовых рассылках, а затем блокировать рассылку с них почты. Причем блокировать на уровне провайдеров, без уведомления пользователей. В результате стала нарушаться целостность Сети. Ни в чем не повинные пользователи не могли отправить вполне обычное письмо, если оказывались в подсети, внесенной в "блэклист". А с тех пор, как рассылка спама может происходить с компьютера, владелец которого вообще ни о чем не подозревает, идея черных списков практически совсем сошла на нет.

Еще одна идея - письма-подтверждения. Вы отправляете письмо адресату, защищенному системой подтверждений. В ответ вам приходит письмо с просьбой подтвердить тот факт, что вы действительно отправляли такому-то и такому-то письмо. Вы говорите: "Да, такой факт имел место". Система заносит вас в "белый список", доставляет ваше письмо получателю и в дальнейшем уже никаких подтверждений не спрашивает. Расчет прост: поскольку спам-рассылки происходят автоматически, по многим миллионам адресов, а адрес отправителя - в большинстве случаев - поддельный, то подтверждения от настоящего спамера получить не удастся. Вроде бы, все верно. Но не тут-то было. Минусов у такой системы оказалось гораздо больше, чем плюсов. Во-первых, она резко снижает оперативность доставки писем: пока все подтверждения пройдут все инстанции... В во-вторых, спамеры научились генерировать эти самые подтверждения. Да и адреса отправителей далеко не всегда - фиктивные.

Наконец, ряд систем предоставили пользователям возможность самостоятельно составлять черные и белые списки адресов прямо в почтовых клиентах. Получил спамерское послание - добавил адрес его отправителя в "черный список", и больше с этого адреса письма к тебе не придут. Но вот беда. Во-первых, чтобы нормально пользоваться этой системой, нужно предварительно внести адреса всех друзей в "белый список", иначе письма от них безжалостно отфильтруются. А если друг завел себе новый ящик и торопится сообщить об этом? Ничего не выйдет: система увидит, что этого адреса в "белом списке" нет, пометит письмо как спам и положит в специально отведенную папочку. Вот и приходится на всякий случай периодически просматривать накопившиеся залежи спама: не завалилось ли туда нужное письмо от нужного человека. Получается, что пользы никакой, а забот - полон рот. Во-вторых, спамеры настолько просто генерируют адреса отправителя, что никаких черных списков не хватит, чтобы все их туда внести.

Так что же делать? Опустить руки и, тихонько чертыхаясь, каждое утро доставать из почтового ящика десятки ненужных рекламных писем? Нет, не все так мрачно. Поток спама можно значительно сократить, причем практически не опасаясь ложных срабатываний фильтра, когда под нож идут "правильные" письма. Для этого следует воспользоваться спам-фильтром, работа которого основана на теореме Байеса.

Томас Байес жил давно (в восемнадцатом веке), об Интернете и электронной почте ничего не знал. Разумеется, он и понятия не имел, что его теорема, одна из основополагающих в элементарной теории вероятности, поможет потомкам бороться с таким явлением, как спам. Формула, описывающая теорему, довольно сложна. А суть заключается в том, что вероятность события может быть довольно точно вычислена, если собрана статистика совершения данного события в прошлом. В применении к спаму это звучит так: если 80% писем, содержащих словосочетание "разговорный английский", являлись спамом, то и следующее письмо с этим словосочетанием - спам, причем с большой долей вероятности. Но как оценить эту долю?

Возьмем все имеющиеся у нас письма и разделим их на две "кучи". В одну отложим нужную корреспонденцию, в другую - спам. Теперь посмотрим, какие слова и словосочетания встречаются в "хороших" письмах, с какой частотой? Точно так же поступим со спамом. Выяснится, что и в тех, и в других письмах примерно с одинаковой частотой встречаются общеупотребительные слова. Таким образом, наличие этих слов в письме ничего не говорит нам о том, к какому разряду его отнести. Присвоим этим словам нейтральную оценку "спамности". Скажем, 0.5 . Анализируем дальше.

Допустим, оказалось, что словосочетание "разговорный английский" встречается в восьми спам-письмах и только в двух нормальных. Поставим этому словосочетанию оценку 0.8 . И наоборот, выяснилось, что слово "дружище" девять раз встречалось в нормальных письмах и только один раз - в спаме. Поставим ему оценку 0.1 . И вот мы получили коротенькое письмо: "Дружище! Как твой разговорный английский?" . Попробуем оценить его "спамность". Очевидно, слова как и твой ничего для нашего анализа не дадут - слова слишком общеупотребительные, могут встречаться с одинаковой частотой как в спаме, так и в обычных письмах. Поэтому поставим им оценку 0.5 . А общую оценку письму ( Z ) поставим, воспользовавшись несколько упрощенной формулой Байеса:
Z = A/(A+B),
где А = z 1 *z 2 *...*z n ,
B = (1-z 1 )*(1-z 2 )*...(1-z n ),
z n - спам-оценка каждого слова, входящего в письмо.

В нашем конкретном примере получаем:

А = 0.1*0.5*0.5*0.8 = 0.02
B = (1-0.1)*(1-0.5)*(1-0.5)*(1-0.8) = 0.045
Z = 0.02/0.045 = 0.44

Таким образом, наше гипотетическое письмо получило нейтральную оценку с небольшим акцентом в сторону "неспамности". Понятно, что этот пример - абсолютно эфемерный, он лишь показывает принцип расчета вероятности того, что пришедшее письмо - спам. При других исходных данных и более объемном тексте письма оценка была бы точнее.

Фильтры, работающие на основе данной теоремы, собирают словари "спамных" и "неспамных" слов и словосочетаний. Затем, при получении почты, они "взвешивают" каждое письмо, выясняют, сколько в нем содержится "плохих" слов, а сколько - "хороших". На основании этих расчетов письму выставляется оценка. Например, данное послание с вероятностью 95% - спам. А вот это письмо, с вероятностью 80% - не спам. Затем письма, получившие высокую спам-оценку, укладываются в корзину или в специально отведенную папку, а письма с низкой спам-оценкой помещаются в папку входящих.

Основной вопрос - как спам-фильтры набирают свои словари? Только с помощью пользователей. Изначально байесовские фильтры абсолютно не умеют отсеивать спам. Пользователю на первых порах приходится самостоятельно указывать: это письмо - спам, а это - не спам. Таким образом фильтр проходит обучение и постепенно (но довольно быстро), с ростом словарей, начинает эффективно отсеивать невостребованную почту.

Задача значительно упрощается, если фильтр устанавливается и настраивается на уже имеющейся базе писем, когда весь спам продолжительное время не удалялся, а складывался в отдельную папку. В таком случае фильтру достаточно указать: в этих папках лежат "хорошие" письма, а в этой - "плохие". Он проанализирует содержимое всех посланий и на основании полученных данных выстроит свою шкалу оценок электронной корреспонденции. Зачем фильтру указывать папки с "хорошими" письмами? Не достаточно ли натравить его только на спам? Нет, категорически недостаточно. В этом случае работа фильтра будет затруднена, станет несколько однобокой. Встретилось в письме словосочетание "разговорный английский" - в спам его! А что если вы нанимаете работника, и он написал в своем резюме: "Разговорным английским владею в совершенстве"... Фильтр будет непреклонен и, скорее всего, положит такое резюме в спам-папку. Ведь, зная, что такое спам, он понятия не имеет, что такое "хорошие" письма.

Еще один важный момент: чужие словари для байесовских фильтров. Скажем, за год мой фильтр проанализировал порядка 20 тысяч писем. Из них порядка 12 тысяч - "хорошие", а 8 тысяч отнесены к спаму. Хорошая база знаний. Теоретически я могу выложить собранные моим фильтром словари в публичный доступ, пригласить вас скачивать их и обучать свои собственные фильтры. Однако я этого делать не буду по той простой причине, что спам - понятие, в общем-то, относительное. С точки зрения одного пользователя, письма про "разговорный английский" - безусловный спам. А у другого - работающего, скажем, в кадровом агентстве - таких писем чуть ли не большинство, и они ему ох как нужны для работы. Поэтому обучать свои фильтры лучше самостоятельно, на своих собственных письмах. Немного терпения - и фильтры начнут работать, как положено.

Справедливости ради отмечу, что и байесовский фильтр - отнюдь не панацея. Иногда он даже после длительного обучения пропускает спам сквозь свое сито. Просто потому, что в своей работе он опирается и на презумпцию невиновности. Если о тексте данного письма нет никаких порочащих его данных, лучше признать его не спамом , чтобы не инициировать ложное срабатывание. Например, когда поднялась волна спама, связанная с политическим кризисом в Украине, мой фильтр дал сбой и пропустил несколько таких посланий, призывающих то ли идти голосовать, то ли выходить на баррикады. Это и понятно: ведь ранее я подобных писем не получал. Следовательно, содержащиеся в них словосочетания не присутствовали в спам-словаре, и фильтр давал низкую оценку "спамности" письмам. Но стоило мне пару раз указать фильтру, что подобные письма - спам, как он выставил им полноценный заслон.

Таким образом, на сегодняшний день фильтрация спама Байесовскими фильтрами выглядит наиболее привлекательной по сравнению с другими существующими методами. Фильтры, работающие на основе теоремы, сегодня довольно популярны. А разработчики таких известных почтовых клиентов, как TheBat! и ThunderBird , даже включили эти фильтры в состав своих продуктов.

Ссылки в тему:



Поиск по сайту
SoftRing     Web

 
 
 
 
 
Карта сайта | Обратная связь

© 2004-2013 Soft Ring: интернет-энциклопедия полезных программ