В этой серии итераций, состоящей из нескольких разделов, вы познакомитесь с созданием детектора спама. Является продолжением 14 части серии.

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

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

Что еще более важно, мы покажем, как извлекать функции из необработанного текста без использования пакета scikit-learn. Так что возьмите эту демонстрацию в качестве бонуса, поскольку вы узнаете, как предварительно обрабатывать текст и создавать классификатор с помощью NLTK. Прежде чем приступить к работе, загрузите приведенный ниже блокнот Jupyter, чтобы следовать инструкциям:

Блокнот можно скачать по ссылке ниже



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

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

После создания словаря вручную используйте все слова в текстовом корпусе. После создания словаря следующим шагом является создание матрицы из признаков (модель мешка слов), а затем обучение на ней алгоритма машинного обучения. Алгоритм, который мы собираемся использовать, — это наивный байесовский классификатор. У нас есть отличная точность 98% на тестовом наборе. Хотя это отличная точность, вы можете улучшить ее, попробовав другие модели.

Обратите внимание, что мы создали представление набора слов, созданное с нуля без использования функции CountVectorizer(). Он использовал двоичное представление вместо того, чтобы использовать количество признаков для представления каждого слова. В этой таблице наборов слов «1» означает, что слово присутствует, тогда как «0» означает отсутствие этого слова в этом документе. Вы можете сделать это, установив для параметра «binary» значение «True» в функции CountVectorizer(). Мы использовали библиотеку pickle для сохранения модели. После создания моделей они сохраняются с помощью библиотеки pickle на диск. Таким образом, вы даже можете отправить модели для использования на другом компьютере или платформе.

За дальнейшее улучшение нашего детектора.

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

Предыдущая часть серии