Введение

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

Рабочий процесс

Рабочий процесс этого проекта состоит из двух основных этапов:

  • Построение модели машинного обучения
  • Развертывание модели с помощью Flask

Построение модели

Импорт зависимостей

Начнем с загрузки необходимых зависимостей. Используемые библиотеки: Pandas, Numpy, Pickle и Sklearn.

Загрузка и предварительная обработка данных

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

  • Загрузка набора данных

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

  • Кодировка этикетки

Модель машинного обучения не может быть обучена на метках, поэтому эти метки должны быть преобразованы в числовую форму. Этот процесс называется кодированием метки. В данном наборе данных электронные письма «Спам» помечены как 0, а электронные письма «Ветчина» или электронные письма, не являющиеся спамом, помечены как 1.

  • Разделение данных на текст и метки

Текущий набор данных состоит из двух столбцов, а именно текста или сообщений электронной почты и меток, то есть категории сообщения электронной почты (спам или ветчина). Сообщения — это входная переменная (т. е. X), а метки — целевая переменная (т. е. Y).

Разделение набора данных

Набор данных разделен на обучающие и тестовые данные. Поскольку данный набор данных относительно невелик, выполняется разделение 80:20, чтобы предоставить больше данных для обучения модели и повышения ее точности.

Извлечение функций

Извлечение признаков — это процесс преобразования текстовых данных в векторы признаков, которые будут использоваться в качестве входных данных моделью машинного обучения. Это делается с помощью векторизатора. Векторизация — это процесс преобразования текста в числовые векторы. Здесь мы используем TfidfVectorizer(). Tfidf расшифровывается как термин-частота, обратная частоте документа. Частота термина обозначает важность определенного термина в данных, в то время как частота документа указывает, насколько часто термин встречается. Следовательно, Tfidf используется для уменьшения влияния часто встречающихся терминов в данном тексте.

Здесь параметры, переданные в TfidfVectorizer():

  • min_df, для которого установлено значение 1, чтобы указать, что слова, встречающиеся менее одного раза, должны игнорироваться.
  • stop_words='english' указывает, что stop_words, которые представляют собой английские слова, которые не добавляют смысла в предложение, можно безопасно игнорировать. Некоторыми примерами стоп-слов являются «is», «the», «and», «are» и т. д.
  • нижний регистр = True переводит все алфавиты в нижний регистр

Кроме того, значения Y_train и Y_test, которые в настоящее время имеют тип «объект», преобразуются в целочисленный тип.

Обучение модели

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

  • Логистическая регрессия

Логистическая регрессия — это простейший алгоритм, который можно использовать для таких задач бинарной классификации, как эта.

Полученная точность составляет 0,9632, как видно из построенной матрицы путаницы.

  • Метод опорных векторов (SVM)

Машина опорных векторов — это алгоритм обучения с учителем, который можно использовать как для задач классификации, так и для задач регрессии. Он работает, отображая каждый элемент данных в виде графика в n-мерном пространстве (где n — количество признаков). Затем выполняется классификация путем нахождения гиперплоскости, которая лучше всего различает два класса.

Полученная точность составляет 0,8609, как показано ниже.

  • Наивный байесовский классификатор

Naive Bayes — это набор алгоритмов классификации, основанных на теореме Байеса. Фундаментальное предположение наивного байесовского классификатора состоит в том, что каждая функция независима и в равной степени влияет на результат. Здесь мы используем теорему MultinomialNB(), которая используется для угадывания тегов текстовых данных и их соответствующей классификации.

Полученная точность составляет 0,9704, что выше, чем у предыдущих моделей.

  • Случайный лесной классификатор

Случайный лес — это алгоритм обучения с учителем, в котором используется метод ансамблевого обучения, в котором несколько классификаторов объединяются для повышения производительности модели.

Точность классификатора случайного леса является лучшей из всех вышеперечисленных моделей с точностью 0,9757.

Сохранение модели

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

Развертывание

Второй этап создания классификатора обнаружения спама в электронной почте — развертывание наиболее эффективной модели с использованием Flask. Flask — это микрофреймворк на основе Python, используемый для развертывания небольших приложений.

Создание шаблона

Ввод, необходимый для этого приложения, представляет собой сообщение электронной почты, которое будет помечено как спам или ветчина. Чтобы получить ввод от пользователя, нам нужна форма с полем ввода, как показано ниже. Этот файл HTML хранится в папке с именем templates, которая будет отображаться с использованием скрипта Flask. Шаблон, используемый в качестве справки, можно найти здесь.

Скрипт Flask

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

Заключение

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