Нейронные сети для обнаружения спама по электронной почте

StackOverflow https://stackoverflow.com/questions/770238

Вопрос

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

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

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

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

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

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

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

Спасибо

Редактировать

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

Решение

Если вы настаиваете на 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. Среднее значение.длина предложения в символах
  12. Среднее значение.длина предложения в словах
  13. Частота длины слова.соотношение распределение / M слов длиной n, n от 1 до 15
  14. Коэффициент типа Токена №.Из уникальных Слов/ M
  15. Гапакс Легомена Часто.из когда-то встречавшихся слов
  16. Часто случаются дислокации.из дважды встречающихся слов
  17. Святочная мера K
  18. D-мера Симпсона
  19. Мера Сихеля
  20. W мера Брюнета
  21. R-мера Оноре
  22. Частота пунктуации 18 знаков препинания:.، ;?!:( ) – “ « » < > [ ] { }

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

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

Таким образом, имея около 100 функций, вам нужно 100 входных данных, некоторое количество узлов в скрытом слое и один выходной узел.

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

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

Другие советы

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

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

  1. По сути, у вас будет целая проблема извлечения признаков, аналогичная по масштабу проектированию и обучению нейронной сети.На вашем месте я бы начал с нарезки входного текста большим количеством способов, каждый из которых является потенциальным вводом функции, примерно так: "этот нейрон сигнализирует 1.0, если "цена" и "виагра" находятся на расстоянии 3 слов друг от друга", и отбраковывает их в соответствии с наилучшей абсолютной корреляцией с идентификацией спама.
  2. Я бы начал с того, что взял мои лучшие 50-200 входных функциональных нейронов и подключил их к одному выходному нейрону (значения, подготовленные для 1.0 = спам, -1.0 = не спам), т. е.однослойный персептрон.Я мог бы попробовать многослойную сеть обратного распространения, если бы это сработало плохо, но не стал бы затаивать дыхание в ожидании отличных результатов.

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top