Нейронные сети для обнаружения спама по электронной почте
-
12-09-2019 - |
Вопрос
Допустим, у вас есть доступ к учетной записи электронной почты с историей полученных электронных писем за последние годы (~ 10 тыс. писем), разделенных на 2 группы
- подлинный адрес электронной почты
- спам
Как бы вы подошли к задаче создания нейросетевого решения, которое можно было бы использовать для обнаружения спама - по сути, классифицируя любое электронное письмо либо как спам, либо как не спам?
Давайте предположим, что выборка электронной почты уже запущена, и нам нужно сосредоточиться только на части классификации.
Основными моментами, на которые я надеялся бы получить ответы, были бы:
- Какие параметры выбрать в качестве входных данных для NN и почему?
- Какая структура NN, скорее всего, лучше всего подойдет для такой задачи?
Также любые рекомендации по ресурсам или существующие реализации (предпочтительно на C #) более чем приветствуются
Спасибо
Редактировать
- Я настроен на использование нейронных сетей, поскольку основным аспектом проекта является тестирование того, как подход NN будет работать для обнаружения спама
- Также это "игрушечная проблема" - просто исследовать тему в нейронных сетях и рассылать спам
Решение
Если вы настаиваете на NNs...Я бы рассчитал некоторые функции для каждого электронного письма
Функции, основанные как на символах, так и на словах, а также на словарном запасе (по моим подсчетам, их около 97):
- Общее количество символов (C)
- Общее количество альфа-символов / C Соотношение альфа-символов
- Общее количество цифровых символов / C
- Общее количество пробельных символов /C
- Частота каждой буквы / C (36 букв клавиатуры – A-Z, 0-9)
- Частота использования специальных символов (10 символов:*, _ ,+,=,%,$,@,ـ , \,/ )
- Общее количество слов (M)
- Общее количество коротких слов/ M из двух букв или менее
- Общее количество символов в словах / C
- Средняя длина слова
- Среднее значение.длина предложения в символах
- Среднее значение.длина предложения в словах
- Частота длины слова.соотношение распределение / M слов длиной n, n от 1 до 15
- Коэффициент типа Токена №.Из уникальных Слов/ M
- Гапакс Легомена Часто.из когда-то встречавшихся слов
- Часто случаются дислокации.из дважды встречающихся слов
- Святочная мера K
- D-мера Симпсона
- Мера Сихеля
- W мера Брюнета
- R-мера Оноре
- Частота пунктуации 18 знаков препинания:.، ;?!:( ) – “ « » < > [ ] { }
Вы также могли бы добавить еще несколько функций, основанных на форматировании:цвета, шрифты, размеры, ...использованный.
Большинство из этих показателей можно найти в Интернете, в статьях или даже в Википедии (все они представляют собой простые вычисления, вероятно, основанные на других характеристиках).
Таким образом, имея около 100 функций, вам нужно 100 входных данных, некоторое количество узлов в скрытом слое и один выходной узел.
Входные данные должны быть нормализованы в соответствии с вашим текущим предварительно классифицированным корпусом.
Я бы разделил его на две группы, использовал одну как обучающую, а другую как группу тестирования, никогда не смешивая их.Возможно, при соотношении обучающих / тестовых групп 50/50 с аналогичным соотношением спам / неспам.
Другие советы
Вы намерены сделать это с помощью Нейронной сети?Похоже, вы довольно хорошо настроены для использования Байесовская классификация, который хорошо изложен в паре эссе Пола Грэма:
Из секретной истории, к которой у вас есть доступ, получились бы очень сильные корпуса для передачи байесовскому алгоритму, и вы, вероятно, получили бы в итоге довольно эффективный результат.
- По сути, у вас будет целая проблема извлечения признаков, аналогичная по масштабу проектированию и обучению нейронной сети.На вашем месте я бы начал с нарезки входного текста большим количеством способов, каждый из которых является потенциальным вводом функции, примерно так: "этот нейрон сигнализирует 1.0, если "цена" и "виагра" находятся на расстоянии 3 слов друг от друга", и отбраковывает их в соответствии с наилучшей абсолютной корреляцией с идентификацией спама.
- Я бы начал с того, что взял мои лучшие 50-200 входных функциональных нейронов и подключил их к одному выходному нейрону (значения, подготовленные для 1.0 = спам, -1.0 = не спам), т. е.однослойный персептрон.Я мог бы попробовать многослойную сеть обратного распространения, если бы это сработало плохо, но не стал бы затаивать дыхание в ожидании отличных результатов.
В целом, мой опыт привел меня к мысли, что нейронные сети в лучшем случае покажут посредственную производительность в этой задаче, и я бы определенно рекомендовал что-нибудь байесовское, как предлагает Чед Берч, если это что-то иное, чем игрушечная задача для изучения нейронных сетей.
Чад, ответы, которые ты получил до сих пор, разумны, но я отвечу на твое обновление, которое:
Я настроен на использование нейронных сетей, поскольку основным аспектом проекта является тестирование того, как NN-подход будет работать для обнаружения спама.
Что ж, тогда у вас проблема:подобный эмпирический тест не может доказать непригодность.
Вероятно, вам лучше всего немного узнать о том, что NN на самом деле делают и чего не делают, чтобы понять, почему они не являются особенно хорошей идеей для такого рода задач классификации.Вероятно, полезный способ думать о них - это как об универсальных аппроксиматорах функций.Но для получения некоторого представления о том, как все это сочетается в области классификации (в чем и заключается проблема фильтрации спама), просматривая вводный текст, подобный классификация паттернов может быть полезно.
В противном случае, если вы твердо намерены увидеть его запуск, просто используйте любую общую библиотеку NN для самой сети.Большая часть вашей проблемы в любом случае будет заключаться в том, как представлять входные данные.`Лучшая" структура неочевидна, и это, вероятно, не имеет большого значения.Входными данными должны быть некоторые (нормализованные) измерения (характеристики) самого корпуса.Некоторые из них очевидны (количество "спамовых" слов и т.д.), некоторые гораздо менее очевидны.Это та часть, с которой вы действительно можете поиграть, но вы должны ожидать плохой работы по сравнению с байесовскими фильтрами (у которых здесь есть свои проблемы) из-за характера проблемы.