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

Обработка естественного языка

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

НЛП в реальной жизни

  • Поиск информации (Google находит релевантные и похожие результаты).
  • Извлечение информации (Gmail структурирует события из писем).
  • Машинный перевод (Google Translate переводит язык с одного языка на другой).
  • Упрощение текста (Rewordify упрощает смысл предложений). Могут быть использованы твиты Шаши Тхарура (каламбур).
  • Анализ настроений (Hater News дает нам мнение пользователя).
  • Обобщение текста (Smmry или autotldr Reddit дает сводку предложений).
  • Спам-фильтр (Gmail отдельно фильтрует спам-письма).
  • Автоматический прогноз (поиск Google прогнозирует результаты поиска пользователей).
  • Автокоррекция (Google Keyboard и Grammarly правильные слова иначе пишутся неправильно).
  • Распознавание речи (Google WebSpeech или Vocalware).
  • Ответ на вопрос (ответы IBM Watson на запрос).
  • Генерация естественного языка (Генерация текста из данных изображения или видео.)

(Набор инструментов для естественного языка) NLTK: NLTK - популярный пакет Python с открытым исходным кодом. Вместо того, чтобы создавать все инструменты с нуля, NLTK предоставляет все стандартные задачи NLP.

Установка NLTK

Введите !pip install nltk в блокноте Jupyter или, если он не работает, введите conda install -c conda-forge nltk. Это должно работать в большинстве случаев.

Установите NLTK: http://pypi.python.org/pypi/nltk

Импорт библиотеки NLTK

После ввода вышеуказанного мы получаем приложение-загрузчик NLTK, которое полезно в задачах NLP.

В моей системе уже установлен Stopwords Corpus, который помогает удалять повторяющиеся слова. Точно так же мы можем установить другие полезные пакеты.

Чтение и изучение набора данных

Чтение текстовых данных и зачем нам чистить текст?

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

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

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

Очистка текстовых данных необходима, чтобы выделить атрибуты, которые мы хотим, чтобы наша система машинного обучения улавливала. Очистка (или предварительная обработка) данных обычно состоит из нескольких этапов:

1. Удалить знаки препинания

Пунктуация может обеспечить грамматический контекст предложения, который поддерживает наше понимание. Но для нашего векторизатора, который считает количество слов, а не контекст, он не добавляет значения, поэтому мы удаляем все специальные символы. например: Как дела? - ›Как дела?

В body_text_clean мы видим, что все знаки препинания, такие как «Я», опущены.

2. токенизация

Обозначение разделяет текст на единицы, такие как предложения или слова. Он придает структуру ранее неструктурированному тексту. например: Plata o Plomo- ›‘ Plata ’,’ o ’,’ Plomo ’.

В body_text_tokenized мы видим, что все слова генерируются как токены.

3. Удалите игнорируемые слова

Стоп-слова - это общие слова, которые, вероятно, появятся в любом тексте. Они мало что говорят нам о наших данных, поэтому мы их удаляем. например: серебро или свинец подходят для меня ›серебра, свинца, чистого.

В body_text_nostop удаляются все ненужные слова, такие как been, for, the.

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

Основание помогает сократить слово до его основной формы. Часто имеет смысл обращаться со связанными словами одинаково. Он удаляет такие слова, как «ing», «ly», «s» и т. Д., С помощью простого подхода, основанного на правилах. Это сокращает набор слов, но часто сами слова игнорируются. например: Entitling, Entitled- ›Entitl
Примечание. Некоторые поисковые системы обрабатывают слова с той же основой как синонимы.

В body_text_stemmed такие слова, как entry, wkly, связаны с entri, wkli, хотя ничего не значат.

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

Лемматизация порождает каноническую форму («лемму») слова. то есть корневая форма. Это лучше, чем определение корня, поскольку он использует подход на основе словаря, то есть морфологический анализ корневого слова, например: Entitling, Entitled- ›Entitle

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

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

Векторизация данных

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

Векторизация данных: набор слов

Пакет слов (BoW) или CountVectorizer описывает наличие слов в текстовых данных. Он дает результат 1, если он присутствует в предложении, и 0, если он отсутствует. Таким образом, в каждом текстовом документе создается набор слов со счетчиком в матрице документа.

BOW применяется к body_text, поэтому количество каждого слова сохраняется в матрице документа. (Проверить репо).

Векторизация данных: N-граммы

N-граммы - это просто все комбинации соседних слов или букв длины n, которые мы можем найти в исходном тексте. Нграммы с n = 1 называются униграммами. Аналогичным образом можно использовать биграммы (n = 2), триграммы (n = 3) и т. Д.

Униграммы обычно не содержат много информации по сравнению с биграммами и триграммами. Основной принцип, лежащий в основе n-граммов, заключается в том, что они фиксируют букву или слово, которое может следовать за данным словом. Чем длиннее n-грамм (выше n), тем больше контекста вам нужно работать.

N-Gram применяется к body_text, поэтому количество слов каждой группы в слове предложения сохраняется в матрице документа. (Проверить репо).

Векторизация данных: TF-IDF

Он вычисляет «относительную частоту» появления слова в документе по сравнению с его частотой во всех документах. Это более полезно, чем «частота использования термина» для определения «важных» слов в каждом документе (высокая частота в этом документе, низкая частота в других документах).
Примечание: используется для оценки поисковой системы , реферирование текста, кластеризация документов.

Проверьте мой предыдущий пост - в Разделе TF-IDF я подробно остановился на работе TF-IDF.

TF-IDF применяется к body_text, поэтому относительное количество каждого слова в предложениях сохраняется в матрице документа. (Проверить репо).

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

Разработка функций: создание функций

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

  • body_len показывает длину слов без пробелов в теле сообщения.
  • punct% показывает процент знаков препинания в теле сообщения.

Проверьте, исправны ли функции

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

В спаме есть процент пунктуации, но не так уж далеко от Ham. Удивительно, но временами спам-сообщения могут содержать много знаков препинания. Но все же это можно назвать хорошей особенностью.

Построение классификаторов машинного обучения: выбор модели

Мы используем ансамблевый метод машинного обучения, в котором используются несколько моделей, и их комбинация дает лучшие результаты, чем одна модель (машина опорных векторов / наивный байесовский метод). Ансамблевые методы - лучший выбор для многих соревнований Kaggle. Случайный лес, то есть несколько деревьев случайных решений, строятся, и агрегаты каждого дерева используются для окончательного прогноза. Его можно использовать как для классификации, так и для решения задач регрессии. Он следует стратегии упаковки случайным образом.

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

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

Mean_test_score для n_estimators = 150 и max_depth дает лучший результат. Где n_estimators - количество деревьев в лесу (группа деревьев решений), а max_depth - максимальное количество уровней в каждом дереве решений.

Аналогично, mean_test_score для n_estimators = 150 и max_depth = 90 дает лучший результат.

Проверьте это: Хотите побеждать в соревнованиях? Обратите внимание на свои ансамбли .

Улучшения: мы можем использовать GradientBoosting, XgBoost для классификации. Я попробовал GridSearchCV на GradientBoosting, результаты занимали много времени, поэтому я отказался от идеи включения здесь. Это занимает много времени, поскольку GradientBoosting использует итеративный подход, объединяющий слабых учеников в сильных учеников, фокусируясь на ошибках предыдущей итерации. Короче говоря, по сравнению со случайным лесом он следует последовательному подходу, а не случайному параллельному подходу.

Классификатор спама

Все вышеупомянутые разделы объединены для создания классификатора спама-хэма.

Случайный лес дает точность 97,7%. Высокая оценка F1 также получена из модели. Матрица путаницы сообщает нам, что мы правильно предсказали 965 радиостанций и 123 спама. 0 радиолюбителей были ошибочно определены как спам, а 26 спама были неверно определены как радиолюбители. Обнаружение спама как радиолюбителей оправдано по сравнению с радиолюбителями как спама.

Найдите приведенный выше код в этом репозитории Github.

Заключение

Таким образом, мы узнали, как выполнять базовые задачи НЛП, и использовали классификатор машинного обучения, чтобы предсказать, является ли SMS спамом или радиолюбителем.