Добро пожаловать, гость
:: алгоритмы  и методы :: :: олимпиадные задачи :: :: связь :: :: о сайте :: :: форум ::

Форум работает в режиме архива, только для чтения и поиска.
Архив 2004 Архив 2007 Архив 2013

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.04.2011, 16:25
Новичок

Отправить личное сообщение для stanislav.l Посмотреть профиль Найти все сообщения от stanislav.l
 
Регистрация: 23.03.2011
Сообщений: 6

А про спам поговорим ? :)
Вот эта задача как раз оч даже реальная и чиста конкретная

Пару лет назад написал свой спам-фильтр, ибо все что видел в свободном доступе мне не нравилось. (Уточняю: фильтр для сервера, а не для читалки, подключен к sendmail'у)

1. Выделил ряд признаков, позволяющих 100%-но утверждать, что заливаемое письмо - спам.
2. Так же ряд признаков, позволяющих 100%-но утверждать - НЕспам.
3. Признаки, отменяющие действие признаков из п. 1 (например, сервер отправителя находится в списке "плохо сконфигурированные сервера" - шлет кривые заголовки)
4. Аналогично, отменяющие действие признаков из 2.
Это все пока "жесткая логика", осечек почти не дает (знающие люди обратили внимание на слово "почти" .... но это пока отложим)
Но эти группы признаков позволяют классифицировать примерно 80% входящей почты.

С оставшимися 20% : выделяю кучу "слабых" признаков - каждый из которых всего лишь повышает "спам-рейтинг" письма на величину, назначенную мной от балды. (Вот как раз тут нейронные сети будут очень даже к месту!)

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

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

(Исхожу из предположения, что признаки спама статистически коррелируют между собой. Совсем грубо говоря: наличие слова "виагра" коррелирует с наличием слова "цена", а также с подделанной строчкой Received.)

А сомнения меня гложат такие:

1. Отношение спам/не_спам назвать затрудняюсь, но оно ГАРАНТИРОВАНО выше 1000 ... То-есть, в автоматически формируемой обучающей выборке примеров "не_спама" будет меньше 0.1% И есть у меня опасение, что сеть к этому "привыкнет" и станет валить в спам все подряд... Вопрос: как от этого застраховаться ?

2. А не получится ли так, что сеть в процессе обучения быстренько "обнаружит" среди полного набора признаков мои "100%-ные" и далее будет смотреть исключительно на них (а остальным присвоит нулевые коэффициенты) ? Может правильней как раз их на вход НЕ подавать ?
Идея подать их на вход вызвана тем, что часть из них, бывшая "100%-ными" ранее, сегодня таковыми быть перестала, превратилась в "99%-ные", грубо говоря Логично предположить, что "вес" ПОЧТИ ЛЮБОГО признака может меняться со временем, а потому хотелось бы отслеживание этого свалить на автомат...

Буду благодарен за любые здравые мысли.

PS А если, в результате "механического" анализа письма я прихожу к выводу "скорей всего спам, но твердой уверенности нет" - стОит ли такое письмо подавать для обучения, с желаемым значением выхода типа 0.9, или не стОит ?...

Последний раз редактировалось stanislav.l, 08.04.2011 в 16:41.
  #2  
Старый 09.04.2011, 07:39
гocть

 
Сообщений: n/a

Цитата:
1. Отношение спам/не_спам назвать затрудняюсь, но оно ГАРАНТИРОВАНО выше 1000 ... То-есть, в автоматически формируемой обучающей выборке примеров "не_спама" будет меньше 0.1% И есть у меня опасение, что сеть к этому "привыкнет" и станет валить в спам все подряд... Вопрос: как от этого застраховаться ?
во всех алгоритмах классификации можно регулировать процент ложных срабатываний, задавая веса классам. ставь не-спаму большой вес, чтобы 1) сравнять различия между распределением классов в обучающей выборке 2) выразить свое предпочтение о том насколько плохо классифицировать не-спам как спам, чем наоборот (например если это в 100 раз плохо, умножай вес не-спама на 100)

то что итоговый классификатор удовлетворяет твоим ожиданиям по качеству, проверяешь на независимой выборке, не использовавшейся во время обучении и подборе параметров

Цитата:
2. А не получится ли так, что сеть в процессе обучения быстренько "обнаружит" среди полного набора признаков мои "100%-ные" и далее будет смотреть исключительно на них (а остальным присвоит нулевые коэффициенты) ? Может правильней как раз их на вход НЕ подавать ?
Идея подать их на вход вызвана тем, что часть из них, бывшая "100%-ными" ранее, сегодня таковыми быть перестала, превратилась в "99%-ные", грубо говоря
ну в таком случае имеет смысл их подавать и отказаться от жесткой фильтрации по ним. см. также ниже

Цитата:
PS А если, в результате "механического" анализа письма я прихожу к выводу "скорей всего спам, но твердой уверенности нет" - стОит ли такое письмо подавать для обучения, с желаемым значением выхода типа 0.9, или не стОит ?...
в ответ на этот и предыдущему пункту ответ один - экспериментируй. здесь не точная наука, строгих аксиом и теорем нет (точнее теоремы есть, но они все скорее про сферические модели в вакууме). как экспериментировать: заведи выборку и разбей ее на обучающую и проверочную, используй обучающую для обучения алгоритма и настройки параметров (кроссвалидацией к примеру), смотри что получится на проверочной выборки, делай выводы.
  #3  
Старый 09.04.2011, 07:45
гocть

 
Сообщений: n/a

и еще вместо нейросетей я бы посоветовал начать хотя бы с SVM. меньше геморроя, проще и в целом получше по качеству

попробуй также уже существующие и работающие на практике подходы к задаче, прежде чем писать свой
  #4  
Старый 11.04.2011, 19:41
Новичок

Отправить личное сообщение для stanislav.l Посмотреть профиль Найти все сообщения от stanislav.l
 
Регистрация: 23.03.2011
Сообщений: 6

SVM посмотрю, спасибо.

Что касается "существующих подходов", то могу сказать что в них "плохо": есть масса фильтров, в каждом из которых реализована 1 (2, 3, ...) хорошая идея, но нет ни одного, который бы включал ВСЕ эти идеи вместе (так чтобы они взаимодействовали, а не просто последовательная проверка 10-ю разными фильтрами), и при этом бы легко подстраивался под мои личные нужды. Написать самому оказалось проще, и хоть не сделал и 1/10 того что написано до меня, эффективность поначалу была очень высокой ...

Поясню на примере. Вот есть понятие "spam-trap" - адрес, никогда не существовавший, но попавший в спамерскую базу. Как это знание использовать ? Самое тупое - просто констатировать, что письмо на этот адрес - 100% спам. Чуть более интеллектуально - IP отправителя в черный список на пару часов. Еще чуть более интеллектуально - нам прислали свежайший образчик спама, который гарантированно в течении получаса придет и на существующие адреса (если еще не пришел), так что потратить время на выделение сигнатурок - очень даже оправдано. Т.е., одну и ту же информацию надо использовать несколько раз.
  #5  
Старый 11.04.2011, 20:39
гостъ

 
Сообщений: n/a

я имел ввиду посмотреть на системы типа spamassassin, которые также основаны на обучении по данным. как минимум, у вас будет с чем сравниваться. может быть получиться расковырять подобную систему и получить нахаляву огромное число готовых признаков для признаков для классификации спама, которые вы можете внедрить в свой классификатор (см. например список http://spamassassin.apache.org/tests_3_3_x.html )
 


Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра