Нейронные сети для обнаружения спама в электронной почте
Скажем, у вас есть доступ к учетной записи электронной почты с историей полученных писем с прошлых лет (~ 10 тыс. электронных писем), разделенных на 2 группы.
- подлинный адрес электронной почты
- спам
Как бы вы приблизились к задаче создания решения нейронной сети, которое можно было бы использовать для обнаружения спама - в основном классифицировать любое электронное письмо как спам или не спам?
Предположим, что выборка электронной почты уже существует, и нам нужно сосредоточиться только на части классификации.
Основные моменты, на которые я надеюсь получить ответ, будут:
- Какие параметры выбрать как вход для NN и почему?
- Какая структура NN, скорее всего, будет работать лучше всего для такой задачи?
Также рекомендуются любые рекомендации по ресурсам или существующие реализации (желательно на С#)
Спасибо
ИЗМЕНИТЬ
- Я настроен на использование нейронных сетей, поскольку основным аспектом проекта является проверка того, как подход NN будет работать для обнаружения спама.
- Также это "игрушечная проблема" просто для изучения предмета по нейронным сетям и спама.
Ответы
Ответ 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 для самой сети. Большая часть вашей проблемы будет заключаться в том, чтобы представить входные данные в любом случае. "Лучшая" структура неочевидна, и, вероятно, это не так важно. Входы будут иметь ряд (нормализованных) измерений (характеристик) на самом корпусе. Некоторые из них очевидны (количество слов "спам" и т.д.), Что гораздо меньше. Это та часть, с которой вы действительно можете поиграть, но вы должны ожидать, что будете плохо работать по сравнению с байесовскими фильтрами (у которых есть свои проблемы здесь) из-за характера проблемы.