[Comm] написал bogofilter-howto
Mike Lykov
=?iso-8859-1?q?combr_=CE=C1_vesna=2Eru?=
Вт Ноя 11 16:51:46 MSK 2003
Здравствуйте!
Вот, решил написать нечто вроде bogofilter-howto (или bogofilter-faq).
Частично использовал информацию из
http://bogofilter.sourceforge.net/bogofilter-faq.html
Естественно, что это только первая версия, которая может содержать опечатки и
ошибки - как грамматические, так и фактические.
Поэтому буду рад увидеть комментарии и предложения по улучшению ;)
Завтра булет вторая часть.
------------------------------
BOGOFILTER HOWTO
(c) 11 Nov 2003, Mike Lykov, ver 0.1
Задумавшись о проблеме фильтрации спама на почтовом сервере компании, я выбрал
для этой цели bogofilter (сначала идущую в комплекте с Alt Linux Master 2.2
версию 0.13.6, обновив ее потом до 0.15.7). Поскольку на мои вопросы
относительно них ответить никто не смог, а русскоязычной информации о нем в
интернете мало, я решил написать самостоятельно данный bogofilter-howto.
1. Что такое bogofilter?
Bogofilter - это быстрый, написанный на С фильтр почтовых сообщений по
принципу Байеса (статистическая фильтрация по содержанию). Используется для
классификации писем как спам или не-спам.
Использовать принцип Байеса для фильтрации спама предложил Пол Грэхэм в
статье "A plan for spam" в августе 2002 г(
http://www.paulgraham.com/spam.html). Bogofilter использует метод Робинсона
с модификацией Фишера, который является развитием метода Грэхэма.
Впоследствии Грэхэм улучшил свой метод с учетом различных предложений и описал
его в статье "Better Bayesian filtering в январе 2003 года
(http://www.paulgraham.com/better.html)
Проект bogofilter изначально был начат 19 августа 2002 года Эриком Реймондом,
и впоследствии к разработке присоединились другие люди (open source проект).
Домашняя страница проекта - http://bogofilter.sourceforge.net
2. Что делает bogofilter ?
Bogofilter - это разновидность bogo-метра, он измеряет для каждого
обьекта(сообщения) меру его bogosity.
Bogosity - это "мусорность", показатель степени bogus("ненужности",
"некачественности") измеряемого обьекта.
3. Как мне начать использовать bogofilter?
Для этого надо либо получить исходные коды с домашней страницы проекта и
собрать их, либо установить готовый вариант из rpm (лучше всего
воспользоваться apt-get).
Bogofilter начнет работать нормально для вас в том случае, если вы обучите его
на заранее заготовленных примерах писем, в которых вы точно уверены, спам это
или нет.
При этом он создает т.н. wordlists (базы со словами) в формате Berkeley DB, в
которые он помещает частоту встреченных в письмах tokens (слов или других
элементов письма).
В конфигурационном файле можно задать, создавать один файл (wordlist.db) или
два (spamlist.db & goodlist.db).
Сам конфигурационный файл может располагаться в /etc/bogofilter.cf для
общестсиемной работы, или в ~/.bogofilter.cf для работы для конкретного
пользователя. Сами базы так же создаются или в ~/.bogofilter/ или в
директории, указанной в основном конфигурационном файле
(bogofilter_dir=/var/bogofilter , например).
Для обучения необходимо иметь два файла в виде mbox с коллекцией писем,
например spam.mbx & non-spam.mbx (некоторые называют это ham ;)
В каждом файле должно быть как можно больше писем(лучше, если в каждом около
1000 штук), причем в базе spam, например, не должно быть хороших писем, и
наоборот. Ошибки на данном этапе могут отразиться на дальнейшей работе -
некорректной классификации и даже потере писем (в случае, если вы настроите
уничтожать спам немедленно).
Файлы с письмами в таком количестве можно получить, применив какие-либо другие
техники отсева спама, не основанные на статистической фильтрации содержания,
или, для начала, вручную разложив свою входящую почту на две категории.
Если такие файлы в формате mbox для обучения у вас есть, вы можете создать
базы с помощью
bogofilter -n < non-spam.mbx
bogofilter -s < spam.mbx
Это в самом простом случае.
Если вы использ версию 0.15.7 и создаете базы впервые, полезно указать ключи
-Pi -Ph, для того, чтобы в базу записывались слова в нижнем регистре (нет
различия между spam, Spam & sPAm, правда это только к английскому тексту
относится), и для того, чтобы служебная информация помечалась специальным
образом (с версии 0.15.4 в базу записываются специальные префиксы head: from:
subj: и другие, что повышает точность классификации).
4. Переход со старых версий.
Если же вы используете версию до 0.15.4, то просто обновить версию на более
новую - это не все, что нужно сделать. Поскольку формат баз изменился
достаточно сильно (появился разбор mime-типов вложений и игнорирование
картинок и исполняемых файлов, и появились префиксы, показывающие тип
элемента базы), то со старыми базами очень вероятно подрастание количества
ошибок (false positives, т.е. хорошие письма, ошибочно принятые за спам).
Чтобы этого избежать, надо сгенерировать базы заново с помощью старой версии и
накопленных архивов спама (предварительно надо вычистить все false positives
из этих архивов).
При этом, как указано выше, тоже полезно использовать опции -Ph -Pi.
Правда, для тех, кто не может/ не хочет пересоздавать базы с нуля, ввели опцию
-H, используемую при классификации. Ее нужно использовать вместе с функцией
самообучения (-u), чтобы bogofilter постепенно сам создал достаточное
количество префиксов head: и других.
У меня переход с версии 0.13.6 (где я создал базы с помошью bogofilter -s без
префиксов) на версию 0.15.7 (с которой я пересоздал базы - bogofilter -s -Pi
-Ph), увеличил процент отлавливаемого спама с 15-20% (в лучшем случае около
30%) до стабильных 30-45% от всего потока писем (к сожалению, количество
false negatives посчитать сложно, так как это могут сделать только
пользователи своими глазами ;)
--
Mike
registered linux user #315334
jabber id: combr на jabber.ru
Подробная информация о списке рассылки community