В нашем блоге мы много пишем о создании информационные бюллетени по электронной почте и работа с электронной почтой.
Мы уже обсудили трудности антиспам , будущее электронной почты, вопросы защита почтовой корреспонденции , а также технологии работа с электронной почтой , которым пользуются менеджеры крупных ИТ-компаний.
В современном мире люди получают много писем, и возникает проблема их классификации и организации почтового ящика.
Инженер из США Андрей Куренков в своем блоге сказал о том, как я решил эту проблему с помощью нейросети.
Мы решили осветить ход реализации этого проекта и представить вам первую часть истории.
Доступен код проекта Здесь .
Начинать
Куренков пишет, что это один из его любимых мини-проектов.Электронная почтафилер , возник в результате задания на курсе «Введение в машинное обучение» в Технологическом институте Джорджии.
Задача заключалась в том, чтобы взять набор данных, применить к нему серию контролируемых алгоритмов обучения и проанализировать результаты.
Дело в том, что вы можете использовать свои собственные данные, если захотите.
Разработчик так и сделал — экспортировал свои данные Gmail, чтобы изучить возможности машинного обучения в решении задачи сортировки электронной почты.
Куренков пишет, что давно понял, что лучше всегда иметь под рукой электронные письма на случай, если вам когда-нибудь понадобится с ними связаться.
С другой стороны, ему всегда хотелось свести количество непрочитанных входящих сообщений к нулю, какой бы безнадежной ни была эта идея.
Много лет назад инженер начал сортировать электронные письма примерно по дюжине папок, и к тому времени, когда он пошел на курс машинного обучения, в этих папках накопились тысячи писем.
Так возникла идея проекта по созданию классификатора, который мог бы предлагать единую категорию для каждого входящего письма — чтобы его можно было отправить в соответствующую папку одним нажатием кнопки.
Категории (папки) и количество букв в каждой из них на старте проекта
В качестве входных данных использовались буквы, а в качестве выходных данных были включены категории букв.
Проблема заключалась в том, что разработчик хотел использовать текст и метаданные электронной почты, но выяснить, как превратить все это в набор данных, готовый к машинному обучению, было непросто.
Любой, кто изучал обработку естественного языка, сразу предложит один простой подход — использование модели «Мешок слов».
Это один из простейших алгоритмов классификации текстов – найти N общих слов для всех текстов и создать для каждого слова таблицу бинарных признаков (признак равен 1, если данный текст содержит слово, и 0, если его нет).
.
Куренков сделал это для группы слов, встречающихся во всех его письмах, а также для топ-20 отправителей писем (поскольку в некоторых случаях отправитель жестко коррелирован с категорией письма; например, если отправитель — научный сотрудник научного руководителя в вузе, то категория будет «Исследования») и для топ-5 доменов, с которых ему приходили письма (поскольку домены типа Гатек В .
edu строго указываются такие категории, как «Образование»).
Итак, примерно через час написания парсер электронной почты, он смог получить данные о своем почтовом ящике в формате csv (значения, разделенные запятыми).
Насколько хорошо это сработало? Неплохо, но хотелось большего.
Куренков рассказывает, что в то время его интересовал фреймворк машинного обучения Orange ML на Python, и, как было заказано, проверено несколько алгоритмов в вашем наборе данных.
Выделялись два алгоритма: лучше всего работали деревья решений, а хуже всего работали нейронные сети:
Вот как деревья решений работали с небольшим набором данных.
И так — нейронные сети
Если внимательно посмотреть на эти графики из OpenOffice Calc, то можно увидеть, что лучший результат деревьев решений на тесте где-то в районе 72%, а нейронных сетей — жалкие 65%.
Ужастик! Это, конечно, лучше, чем разбирать всё наугад, учитывая, что категорий 11, но это далеко не отличный результат. Почему результаты оказались такими плачевными? Дело в том, что полученные для набора данных признаки оказались очень примитивными — простой поиск 500 наиболее часто встречающихся слов в буквах даст нам не много полезных показателей, а множество распространённых конструкций, которые встречаются, например, в английском языке.
«то» или «есть».
Инженер это понял и сделал следующее: полностью убрал из списка слова из трёх и менее букв и написал какой-то код, позволяющий выбирать наиболее часто встречающиеся слова для каждой категории отдельно; но он ещё понятия не имел как улучшить результат.
Попытка номер два
Спустя пару лет Куренков решил попытаться решить задачу еще раз — хотя проект в университете уже давно был завершен, ему хотелось улучшить результаты.На этот раз инженер решил использовать Керас , потому что он написан на Python, а также хорошо работает с пакетами NumPy , панды И scikit-learn и поддерживается библиотекой Theano. Бывает также, что у Keras есть несколько примеров, с которых можно начать работу, в том числе задача классификация различных текстов.
И что интересно, в этом примере используются те же функции, которые использовал ранее инженер.
Он определяет 1000 наиболее часто встречающихся слов в документах, бинарные признаки и обучает нейронную сеть с одним скрытым слоем и регуляризацией исключения, чтобы предсказывать категорию данного текста исключительно на основе этих признаков.
Итак, первое, что приходит на ум, — опробовать этот пример на собственных данных и посмотреть, улучшит ли Keras производительность.
К счастью, старый код парсинга почтового ящика сохранился, а в Keras есть удобный класс Tokenizer для получения текстовых признаков.
Поэтому вы можете легко создать набор данных в том же формате, что и в примере, и получить новую информацию о текущем количестве писем:
Using Theano backend. Label email count breakdown:Теги: #Машинное обучение #нейронные сети #электронная почта #электронная почта #письма #Машинное обучение
-
Новеллизация «Звездных Войн»
19 Oct, 24 -
Firefox 4.0 Beta 2 Доступен Для Загрузки
19 Oct, 24