Анализ настроений - это контекстный анализ текста, который идентифицирует и извлекает субъективную информацию из исходного материала и помогает бизнесу понять социальные настроения своего бренда продукта или услуги при мониторинге онлайн-разговоров. Итак, в основном, здесь я использовал набор данных IMDb 50k Movie Review, чтобы предсказать, вызывает ли данный обзор фильма положительные или отрицательные настроения. Я использовал здесь наивный байесовский метод, потому что он превосходит большинство других алгоритмов машинного обучения, когда данные являются текстовыми. Хотя я буду использовать некоторые библиотеки НЛП, основное внимание будет уделяться использованию Наивного Байеса. Точность моих прогнозов составляет более или менее 89%. Так что я бы сказал неплохо. Вы можете использовать другие методы, такие как Bert или различные методы глубокого обучения, чтобы еще больше повысить точность.

Давайте сделаем наши маленькие шаги к обработке естественного языка с помощью наивного байесовского метода: 33

Чтобы узнать о наивном Байесе, вы можете сослаться на следующее:



Давайте начнем

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

  1. Предварительная обработка текста
  2. Векторизовать (мешок слов)
  3. Создание модели машинного обучения
  4. Развертывание

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

Итак, сначала мы должны проанализировать и очистить данные, прежде чем вписываться в модели машинного обучения, иначе мы получим…

Этапы очистки данных:

  • Удалить теги HTML
  • Удалите специальные символы
  • Преобразование всего в нижний регистр
  • Удалите игнорируемые слова
  • Основание

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

Во-первых, нам понадобятся NumPy и pandas, наши основные инструменты для анализа данных. «Re» означает регулярное выражение, которое используется для извлечения определенной части строки. Nltk - это библиотека NLP, и мы собираемся импортировать ее в определенные части нашего кода для обработки текстовых данных. Затем мы собираемся импортировать sklearn для создания модели. Мы также импортируем некоторые метрики из sklearn для анализа производительности модели.

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

Итак, у нас есть 50000 строк только с одним столбцом характеристик, который является «обзором». Вы уже можете увидеть HTML-теги, которые нужно обработать.

Как видно из вышеизложенного, есть известные пропущенные значения. Уф !!

Теперь мы преобразуем положительное настроение с помощью 1 и отрицательное с помощью -1. Мы получаем

Удаление HTML-тегов

Теперь мы удалим HTML-теги с помощью библиотеки регулярное выражение из Python. Это используется для извлечения части строки, которая следует определенному шаблону. Например, если каким-то образом номер телефона и идентификатор электронной почты объединены в один столбец, и мы хотим создать два отдельных столбца, один для номеров телефонов, а другой для идентификатора электронной почты. Для нас было бы невозможно вручную вычислить каждую строку. В этом случае мы используем регулярное выражение (также известное как регулярное выражение). Чтобы узнать больше о регулярном выражении, нажмите здесь.

Как видите, все теги HTML были удалены.

Удалить специальные символы

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

Все не буквенно-цифровые символы были удалены.

Преобразовать все в нижний регистр

Для лучшего анализа переведем все в нижний регистр.

Удаление игнорируемых слов

Стоп-слова - это те слова, которые не могут добавить большого значения к значению документа. Поэтому преобразование этих слов в столбец «Мешок слов» было бы пустой тратой времени и места. Это добавит ненужную функцию в наш набор данных и может повлиять на правильность наших прогнозов. Это артикли, предлоги или союзы, такие как «the», «is», «in», «for», «where», «when», «to», «at» и т. Д. Библиотека Python для обработки естественного языка «nltk» поставляется с классом, в котором хранятся все возможные стоп-слова. Для этого мы импортируем игнорируемые слова из файла nltk. corpus » для обработки стоп-слов.

Он возвращает список всех слов без стоп-слов.

Стемминг

Это означает, что слова, которые имеют разные формы одного и того же общего слова, должны быть удалены. Основная задача создания корней - сведение слова к его основе, которая присоединяется к суффиксам и префиксам или корням слов, известная как лемма. Построение важно для понимания естественного языка (NLU) и обработки естественного языка (NLP). Предположим, нам даны такие слова, как игра, игра, игра - все эти слова имеют одно и то же основное слово, известное как «игра». Единственное слово, которое может быть использовано в качестве вектора в нашем Мешке слов, - это «игра». Другие слова не добавили бы существенного смысла в наш набор данных или прогнозы, и они не нужны. В библиотеке «nltk» снова есть класс для выделения слов. Здесь мы импортируем «SnowballStemmer» из библиотеки «nltk.stem» для этой цели.

На этом мы закончили обработку текста.

Формируем мешок слов и внедряем их в нашу модель

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

  1. CountVectorizer
  2. TfidfVectorizer

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

Построение модели с помощью CountVectorizer

CountVectorizer просто преобразует все уникальные слова в столбцы и сохраняет их частоту. Это простейший векторизатор, используемый в машинном обучении.

Теперь разделим данные

Затем мы создадим наши модели и поместим в них данные. Здесь мы будем использовать GaussianNB, Multinomial NB и Bernoulli NB.

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

  • Истинные положительные (TP) - это правильно спрогнозированные положительные значения, которые означают, что значение фактического класса положительно, а значение прогнозируемого класса также положительно.
  • Истинные отрицательные значения (TN) - это правильно спрогнозированные отрицательные значения, которые означают, что значение фактического класса отрицательно, а значение предсказанного класса также отрицательно.
  • Ложные срабатывания (FP) - когда фактический класс отрицательный, а прогнозируемый - положительный.
  • Ложноотрицательные (FN) - когда фактический класс положительный, а прогнозируемый класс отрицательный.

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

Точность = TP + TN / TP + FP + FN + TN.

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

Точность = TP / TP + FP

Напомнить - соотношение правильно предсказанных положительных наблюдений ко всем наблюдениям в реальном классе - да. Ответы на этот вопрос: сколько из всех действительно положительных отзывов мы пометили?

Отзыв = TP / TP + FN

Итак, давайте проверим результаты:

Безусловно, Бернулли Н.Б. действует как лучший предсказатель с точностью 82,8%, точностью 81,6% и отзыв на 84,5%. Таким образом, мы можем сказать, что модель хорошо работает с данными.

Мы можем еще больше повысить производительность гауссовского наивного байесовского метода

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

Таким образом, мы видим, что показатель точности GaussianNB увеличился с 78 до 80 процентов. Таким образом, очевидно, что здесь улучшились характеристики гауссовского наивного байесовского метода. Наилучшим коэффициентом сглаживания оказывается 0,00351.

Теперь давайте построим модель с Tfidfvectorizer.

CountVectorizer против TfidfVectorizer

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

Чтобы преодолеть это, мы используем TfidfVectorizer .

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

Как и выше, мы векторизуем данные, разделим данные, а затем создадим модели.

Примечание: TfdifVectorized данные не могут быть реализованы Gaussian NB

Теперь мы поместим данные в модели и посчитаем их оценки.

Вот это да. Мы наблюдаем значительные изменения в оценках по сравнению с CountVectorizer. Здесь MultinomialNB дает наилучшую точность, составляющую около 88,3% с точностью, равной 88,2% и отзыв на 88,4% процентов. Таким образом, производительность анализатора значительно увеличилась с векторизатором TF-IDF. Поэтому мы будем использовать это при развертывании нашего проекта.

Тест хи-квадрат

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

Я сохранил всю эту статью как можно проще. Надеюсь, информация окажется для вас полезной. :)))))