Нейронные сети для обнаружения спама в электронной почте - PullRequest
18 голосов
/ 21 апреля 2009

Допустим, у вас есть доступ к учетной записи электронной почты с историей полученных писем за последние годы (~ 10 тыс. Писем), разделенных на 2 группы

  • подлинная электронная почта
  • спам

Как бы вы подошли к задаче создания решения нейронной сети, которое можно было бы использовать для обнаружения спама - в основном классифицируя любую электронную почту как спам или не спам?

Предположим, что получение электронной почты уже выполнено, и нам нужно сосредоточиться только на части классификации.

Основные моменты, на которые я бы надеялся получить ответ:

  1. Какие параметры выбрать в качестве входных данных для NN и почему?
  2. Какая структура NN наиболее вероятно подойдет для такой задачи?

Также приветствуются любые рекомендации по ресурсам или существующие реализации (предпочтительно в C #)

Спасибо

EDIT

  • Я настроен на использование нейронных сетей, поскольку основным аспектом проекта является проверка того, как подход NN будет работать для обнаружения спама
  • Также это «игрушечная проблема» - просто исследовать тему в нейронных сетях и спам

Ответы [ 4 ]

24 голосов
/ 06 мая 2009

Если вы настаиваете на NNs ... Я бы рассчитал некоторые функции для каждого письма

Функции на основе символов, слов и словарного запаса (примерно 97, как я их считаю):

  1. Общее количество символов (C)
  2. Общее количество альфа-символов / C Соотношение альфа-символов
  3. Общее количество цифр символов / C
  4. Общее количество пробельных символов / C
  5. Частота каждой буквы / C (36 букв клавиатуры - A-Z, 0-9)
  6. Частота специальных символов (10 символов: *, _, +, =,%, $, @, ـ, \, /)
  7. Всего слов нет (M)
  8. Общее количество коротких слов / M Две буквы или меньше
  9. Общее количество символов в словах / C
  10. Средняя длина слова
  11. Avg. длина предложения в символах
  12. Avg. длина предложения в словах
  13. Длина слова частота. распределение / M Соотношение слов длиной n, n между 1 и 15
  14. Тип Token Ratio Количество уникальных слов / M
  15. Hapax Legomena Freq. однократных слов
  16. Hapax Dislegomena Freq. дважды встречающихся слов
  17. Мера Кюля
  18. мера Симпсона D
  19. мера Сихеля
  20. W мера Брюне
  21. Мера Хоноре R
  22. Частота пунктуации 18 знаков препинания:. ،; ? ! : () - «« »<> [] {}

Вы также можете добавить некоторые дополнительные функции, основанные на форматировании: цвета, шрифты, размеры, ... используется.

Большинство этих мер можно найти в Интернете, в газетах или даже в Википедии (все они простые вычисления, вероятно, основанные на других функциях).

Итак, примерно с 100 объектами вам нужно 100 входов, некоторое количество узлов в скрытом слое и один выходной узел.

Входные данные должны быть нормализованы в соответствии с вашим текущим предварительно классифицированным корпусом.

Я бы разбил его на две группы, использовал одну в качестве учебной группы, а другую - в качестве группы тестирования, никогда не смешивая их. Может быть, при соотношении 50/50 в группах «поезд / тест» с аналогичными показателями «спам / не спам».

8 голосов
/ 21 апреля 2009

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

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

2 голосов
/ 21 апреля 2009

Чад, ответы, которые вы получили до сих пор, являются разумными, но я отвечу на ваше обновление, что:

Я настроен на использование нейронных сетей, поскольку основным аспектом проекта является проверка того, как подход NN будет работать для обнаружения спама.

Ну, тогда у вас есть проблема: подобный эмпирический тест не может доказать непригодность.

Вероятно, вам лучше узнать немного о том, что на самом деле делает и не делает NN, чтобы понять, почему они не являются особенно хорошей идеей для такого рода проблем классификации. Вероятно, полезный способ думать о них как об универсальных аппроксиматорах функций. Но для некоторого представления о том, как все это сочетается в области классификации (именно в этом и заключается проблема фильтрации спама), может оказаться полезным просмотр вступительного текста, например классификация шаблонов .

Если вы не уверены в том, что он запущен, просто используйте любую общую библиотеку NN для самой сети. Большая часть вашей проблемы будет в том, как представлять входные данные в любом случае. «Лучшая» структура неочевидна и, вероятно, не так уж важна. Входные данные должны быть рядом (нормализованных) измерений (признаков) на самом корпусе. Некоторые из них очевидны (количество слов «спам» и т. Д.), А некоторые - гораздо менее. Это та часть, с которой вы действительно можете поиграть, но вы должны ожидать, что она будет работать плохо по сравнению с байесовскими фильтрами (у которых здесь есть свои проблемы) из-за характера проблемы.

2 голосов
/ 21 апреля 2009
  1. По сути, у вас будет целая проблема, схожая по масштабам с проектированием и обучением нейронной сети, с извлечением функций. Где бы я начал, если бы я был вами, это нарезать и нарезать на куски входной текст большим количеством способов, каждый из которых являлся потенциальным входным признаком вдоль строк «этот нейрон сигнализирует 1,0, если происходят« цена »и« виагра » в пределах 3 слов друг от друга »и отбраковывают их в соответствии с наилучшей абсолютной корреляцией с идентификацией спама.
  2. Я бы начал с того, что взял мои лучшие от 50 до 200 входных нейронов объектов и подключил их к одному выходному нейрону (значения обучены для 1,0 = спам, -1,0 = не спам), то есть однослойный персептрон. Я мог бы попробовать многослойную сетку для обратного распространения, если бы она работала плохо, но я не задержал бы дыхание для отличных результатов.

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

...