Фильтрация сообщений в спам / ветчину с использованием классификатора голосования

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

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

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

Однако есть другой способ решить эту проблему. В частности, мы можем использовать ансамблевое обучение - метод, который объединяет несколько различных алгоритмов или моделей для получения улучшенных результатов.

Но почему ученики ансамбля?

  1. Более низкая ошибка. Ансамбли обычно имеют более низкий уровень ошибок, чем отдельные модели сами по себе, из-за окончательной агрегации прогнозов.
  2. Меньше переобучения. Каждый тип учащихся, который мы используем, имеет предвзятость, но когда мы объединяем их вместе, предвзятость имеет тенденцию уменьшаться.

Реализация спам-фильтра путем наложения разных моделей

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

Библиотеки, которые нам понадобятся для работы с этой реализацией, следующие:

  1. NLTK: платформа для создания программ Python для работы с данными на человеческом языке. Также содержит функции, помогающие пользователям работать с корпусами, категоризировать текст, анализировать лингвистические структуры и т. Д.
  2. sklearn: библиотека Python, содержащая множество эффективных инструментов для машинного обучения и статистического моделирования, включая классификацию, регрессию, кластеризацию и уменьшение размерности.
  3. Pandas: предлагает структуры данных и операции для управления числовыми таблицами.
  4. NumPy: поддерживает большие многомерные массивы и матрицы, а также большой набор высокоуровневых математических функций для работы с этими массивами.

Убедившись, что все эти библиотеки установлены правильно, давайте загрузим набор данных как фреймворк Pandas. Набор данных, который мы будем использовать, взят из репозитория машинного обучения UCI. Он содержит более 5000 помеченных SMS-сообщений, которые были собраны для исследования спама на мобильных телефонах. Его можно скачать по следующему URL-адресу:

Https://archive.ics.uci.edu/ml/datasets/sms+spam+collection

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

Предварительная обработка данных

Предварительная обработка данных остается важным шагом в обработке естественного языка (и действительно в любом конвейере машинного обучения). На этом шаге мы преобразуем наши метки классов (спам / ветчина) в двоичные значения с помощью LabelEncoder from sklearn, заменим адреса электронной почты, URL-адреса, номера телефонов и другие символы регулярными выражениями, удалим стоп-слова и извлечем слово стебли.

Извлечение функций из предварительно обработанных сообщений

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

Применение нескольких алгоритмов

Теперь, когда у нас есть готовый набор данных на основе извлеченных функций, мы можем приступить к созданию алгоритмов! Давайте начнем с простого линейного классификатора опорных векторов, а затем расширим его до других алгоритмов, таких как KNN, дерево решений, регрессор и т. Д. Нам нужно будет импортировать каждый алгоритм, который мы планируем использовать, из sklearn и оценить его на основе установленных нами показателей производительности.

Укладка всех моделей

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

  1. Жесткое голосование: при жестком голосовании прогнозируемый выходной класс - это класс с наибольшим большинством голосов, то есть класс с наибольшей вероятностью быть прогнозируемым каждым из классификаторов.
  2. Мягкое голосование. При мягком голосовании выходной класс - это прогноз, основанный на среднем значении вероятностей, данных этому классу.

Результаты тестирования

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

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

Полный код этой демонстрации можно найти в следующем репозитории GitHub:



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

Являясь независимой редакцией, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по данным и группам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим участникам и не продаем рекламу.

Если вы хотите внести свой вклад, отправляйтесь на наш призыв к участникам. Вы также можете подписаться на наши еженедельные информационные бюллетени (Deep Learning Weekly и Comet Newsletter), присоединиться к нам в » «Slack и подписаться на Comet в Twitter и LinkedIn для получения ресурсов, событий и гораздо больше, что поможет вам быстрее создавать лучшие модели машинного обучения.