Подтвердить что ты не робот

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

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

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

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

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

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

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

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

Спасибо

ИЗМЕНИТЬ

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

Ответ 1

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

И характерные, основанные на словах, и словарные функции (около 97, поскольку я считаю их):

  • Общее количество символов (C)
  • Общее количество альфа-символов/C Соотношение альфа-символов
  • Общее количество цифр символов /C
  • Общее количество пробельных символов /C
  • Частота каждой буквы /C (36 букв клавиатуры - A-Z, 0-9)
  • Частота специальных символов (10 символов: *, _, +, =,%, $, @, \,/)
  • Общее количество слов (M)
  • Общее количество коротких слов /M Две буквы или меньше
  • Общее количество символов в словах /C
  • Средняя длина слова
  • Avg. длина предложения в символах
  • Avg. длина предложения в словах
  • Частота длины слова. распределение /M Отношение слов длины n, n от 1 до 15
  • Тип Токеновое число Нет уникальных слов/М
  • Hapax Legomena Freq. одноразовых слов
  • Hapax Dislegomena Freq. дважды встречающихся слов
  • Измерение Yules K
  • Симпсоны D
  • Мера Sichels S
  • Brunets W measure
  • Показатель Honores R
  • Частота пунктуации 18 знаков пунктуации:.,;?!:() - "" < > [] {}

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

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

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

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

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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

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

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

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

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