"Классификация электронной почты: проблема классификации с несколькими выходами и несколькими классами"

26 ноября 2019 года в Buildo компания Data Science Milan организовала встречу, посвященную опыту развертывания задачи классификации электронной почты.

«Как я научился перестать беспокоиться и полюбить науку о данных в производстве», Дарио Канноне, старший специалист по данным, Mutui on Line

Дарио начал рассказывать нам о процессе компании, в которой он работает: огромное количество электронных писем, полученных и обмененных между офисами, которые нужно организовать, правильно их сортируя, потому что у каждого письма есть свой пайплайн. Для оптимизации этого процесса могла бы помочь автоматическая классификация электронной почты, но это невозможно как по юридическим, так и по операционным причинам. Глядя на данные, цель состоит в том, чтобы предсказать 3 цели с более чем одним классом для каждой из них, существует от 7 до 50 классов, функции представлены в текстовом формате по электронной почте, данные могут не помещаться в памяти (>3 миллиона электронных писем , › 1 миллион уникальных слов), и они находятся в устаревшей базе данных, потому что компании уже 15 лет. Для простого и прозрачного процесса принятое решение представляет собой полуавтоматическую классификацию электронной почты с системой, позволяющей отображать первые 3 класса для каждой метки.

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

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

Еще один шаг — отделить обучающую часть от самой модели, создав функцию модели с Keras API (высокоуровневый API нейронных сетей, написанный на Python), что позволяет изменить архитектуру модели без изменения способа ее обучения.

Построение модели требует преобразования слов в числа, и Дарио объяснил некоторые эксперименты, которые они провели с ней: векторизация TF-IDF, встраивание слов, например word2vec, и предварительно обученное word2vec с SIF (сглаженная обратная частота).

Подход TF-IDF (частота терминов — обратная частота документа) масштабирует частоту слов в зависимости от того, как часто они появляются во всех документах. Термин «Частота» применяет оценку частоты слова в текущем корпусе; Инверсия частоты документа применяет оценку того, насколько редко слово встречается в корпусе. С помощью метода TF-IDF термины взвешиваются, и с помощью баллов выделяются слова с полезной информацией.

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

Поскольку встраивание поездов в сеть может быть очень медленным, можно использовать предварительно обученный word2vec, а интересным подходом является использование гладкой обратной частоты. Это средневзвешенное значение векторов, основанное на частоте терминов всех слов, оно состоит в вычислении средневзвешенного значения векторов слов в предложении и последующем удалении проекций средних векторов на их единичный вектор.

На последнем этапе развертывания для взаимодействия с производственной средой используется инструмент Flask: среда веб-приложений Python. Этот процесс обеспечивает высокую доступность и масштабируемость, потому что, если трафик растет, можно легко добавить больше виртуальных машин. С помощью этого потока производительность отслеживается в режиме реального времени с помощью уведомления от пользователя, а также позволяет собирать новые данные. Посмотрите на видео.

Автор Клаудио Г. Джанкатерино