Определение того, является ли данный текст спамом или нет (ветчина).

Спам-тексты — это нежелательные сообщения, обычно рассылаемые с целью рекламы. Хотя это помогает продукту дойти до потребителей, оно может стать источником нежелательной информации/коммуникации с потребителем.

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

Есть много способов, которыми спамер может связаться с вами: SMS, звонки, электронная почта, результаты веб-поиска и т. д.

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

Реализация идеи на cAInvas — здесь!

Набор данных

На Kaggle от Team AI

Алмейда, Т.А., Гомес Идальго, Дж.М., Ямаками, А. Вклад в изучение фильтрации SMS-спама: новая коллекция и результаты. Материалы симпозиума ACM по разработке документов (DOCENG’11) 2011 г., Маунтин-Вью, Калифорния, США, 2011 г. Веб-сайт | UCI

Набор данных представляет собой файл CSV с 5572 сообщениями, относящимися к одной из двух категорий — ветчина и спам.

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

Удаление повторяющихся строк

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

Теперь в наборе данных 5157 строк, из которых 4516 — спам, а 641 — спам. Это несбалансированный набор данных, но давайте все же попробуем на нем потренироваться.

Кодирование значений категории

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

Очистка данных

Текст в сообщениях должен быть предварительно обработан, прежде чем он будет использован в качестве входных данных для модели.

Определение нескольких функций для выполнения предварительной обработки —

  • удаление тегов HTML и URL-адресов
  • сохранение только алфавитов, т. е. удаление знаков препинания, специальных символов и цифр
  • удалить повторяющиеся символы. Когда мы пишем текст, мы склонны расширять символы для акцента или из-за волнения. Например, «эээээээ». Несколько вхождений одной и той же буквы сокращаются до 1. То есть вышеуказанное сокращается до «привет». Но в английском языке есть слова, в которых есть последовательные повторяющиеся символы, такие как шерсть, привет и т. д. Вот почему мы усекаем символы, которые встречаются более двух раз подряд. Экземпляры с 3 последовательными повторяющимися символами редки.

Список стоп-слов также определен для последующего использования.

Стеммер Snowball модуля nltk.stem используется для получения корня слов в сообщении.

Слова в обеих категориях сохраняются отдельно для последующей визуализации.

Здесь мы пропустили фильтрацию стоп-слов, так как наряду с контекстом стиль текста также является важным фактором.

Очищенные предложения добавляются в виде столбца в набор данных.

Разделение поезд-валидация-тест

Использование соотношения 80–10–10 для разделения фрейма данных на наборы для проверки и проверки поезда. Для этого используется функция train_test_split модуля sklearn.model_selection. Затем они делятся на X и y (вход и выход) для дальнейшей обработки.

В наборе поезда 4125 образцов, в наборе проверки и тесте по 516 образцов.

Векторизация TF-IDF

Существует два способа реализации векторизации TF-IDF:

  • Векторизатор TF-IDF
  • CountVectorization с последующим преобразователем TF-IDF

Функция CountVectorization модуля keras.preprocessing.text используется для преобразования текста в последовательность целых чисел, представляющих количество токенов.

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

Определение входных и выходных данных для модели (X — входные данные, а y — выходные данные) —

Визуализация

Глядя на слова, которые являются важными/частыми в обеих категориях.

Функция WordCloud используется для визуализации слов. Частота слов в корпусе прямо пропорциональна их размеру на рисунке.

Модель

Используемая модель является простой с 3 плотными слоями, 2 из которых имеют функции активации ReLU, а последний имеет функцию активации Sigmoid, которая выводит значение в диапазоне [0, 1].

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

Функция обратного вызова EarlyStopping модуля keras.callbacks отслеживает потерю проверки и останавливает обучение, если она не уменьшается в течение 5 эпох непрерывно. Параметр restore_best_weights гарантирует, что веса модели с наименьшими потерями проверки будут восстановлены в переменной модели.

Модель была обучена со скоростью обучения 0,0001 и достигла точности ~ 98,8% на тестовом наборе.

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

Составление матрицы путаницы для лучшего понимания результатов —

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

Метрики

Прогноз

Давайте выполним прогнозы на случайных тестовых выборках —

Образец текста берется из исходного CSV-файла, очищается, векторизуется, а затем вводится в модель, поскольку внешний образец должен пройти тот же процесс.

глубокий C

Библиотека, компилятор и инфраструктура вывода deepC предназначены для включения и выполнения нейронных сетей глубокого обучения с упором на функции устройств малого форм-фактора, таких как микроконтроллеры, eFPGA, процессоры и другие встроенные устройства, такие как raspberry-pi, odroid, Arduino, SparkFun Edge, RISC-V, мобильные телефоны, x86 и портативные компьютеры.

Компиляция модели с помощью deepC —

Перейдите на платформу cAINvas (ссылка на блокнот, указанную ранее), чтобы запустить и создать свой собственный файл .exe!

Источники: Аиша Д