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

Kaggle, веб-сайт по науке о данных и машинному обучению, принадлежащий Google, является одной из таких платформ, которая помогает людям разрабатывать модели для определения того, является ли текстовое сообщение подлинным или спамом, и эта информация может использоваться для разработки программ для фильтрации этих спам-сообщений. поэтому пользователь не должен их видеть. Для этого Kaggle имеет в памяти своего компьютера множество наборов данных, одним из таких наборов данных является набор данных для сбора SMS-спама, ссылка на который находится здесь: - Набор данных для сбора спама SMS | Kaggle

Коллекция SMS-спама — это набор SMS-сообщений с тегами, которые были собраны для исследования SMS-спама. Он содержит один набор SMS-сообщений на английском языке из 5 574 сообщений, помеченных в зависимости от того, являются ли они ветчиной (законными) или спамом.

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

Инструмент в Python, который имеет дело с NLP, называется Natural Language Toolkit или NLK. NLTK — это коллекция библиотек, программ и образовательных ресурсов с открытым исходным кодом для создания программ НЛП.

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

Я написал эту программу в бесплатном онлайн-блокноте Jupyter Notebook от Kaggle, который похож на Google Colab. Единственная реальная разница заключается в том, что библиотека os используется для вызова файлов .csv, которые хранятся в каталоге Kaggle.

Первое, что я сделал, это импортировал библиотеки, которые мне понадобятся: numpy для алгебраических операций, pandas для управления фреймом данных и matplotlib и seaborn для графических операций. Как указано выше, я также импортировал os, чтобы вывести файл .csv, содержащий текстовые сообщения, и указать, являются ли они ветчиной или спамом:

Затем я загрузил файл, но, поскольку он был закодирован, мне пришлось добавить и параметр кодирования, чтобы панды действительно прочитали файл: -

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

Я проанализировал целевую переменную vi и обнаружил небольшой дисбаланс классов в этом наборе данных:

Я решил сопоставить целевую переменную vi, создав словарь и назначив 1 для ветчины и 0 для спама:

Затем я создал новый столбец, в котором будет размещен весь обработанный текст:

Я импортировал библиотеку nltk, которая позволяла выполнять предварительную обработку текста. Библиотека nltk вырезала слова и удалила специальные символы:

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

Когда обработанный текст был полностью предварительно обработан, я определил переменные X и y. Целевая переменная df,v1 стала y. Независимая переменная df.processedtext стала X:-

Как только X и y были определены, я использовал функцию sklearn TfidVectorizer() для векторизации переменной X:

Затем я разделил переменные X и y на наборы для обучения и проверки, используя функцию sklearn train_test_split():

После того, как переменные X и Y были разделены на наборы данных для обучения и проверки, я выбрал модель. Функция PassiveAgressiveClassifier() хорошо подходит для НЛП, поэтому я выбрал ее. Когда я обучил и подогнал модель, я добился точности 99,86%:

Затем я сделал прогноз на проверочном наборе и добился точности 97,67%. Я создал матрицу путаницы, и 11 примеров были неверными для ветчины, а 2 примера были неверными для спама:

Наконец, я нанес предсказанные примеры на график, используя функцию TruncatedSVD(), которая подходит для работы с разреженными данными:

Код этой программы можно полностью найти в моей личной учетной записи Kaggle, ссылка находится здесь: - Обнаружение спама | Kaggle