Анализ тональности – это подход к обработке естественного языка (NLP), который изучает субъективную информацию, содержащуюся в выражении. Когда мы говорим о субъективной информации, это означает, что информация может меняться от человека к человеку и включает в себя мнения, эмоции или отношение к теме, человеку или организации, которые люди склонны выражать в письменной форме. Эти выражения можно классифицировать как положительные, отрицательные или нейтральные. Алгоритмы машинного обучения просматривают эти текстовые данные и извлекают из них ценную информацию, а затем бренды и компании принимают решения на основе извлеченной информации.

Вот несколько преимуществ анализа настроений, особенно в бизнесе:

  1. Это поможет вам понять вашу аудиторию и ее конкретные потребности.
  2. Вы можете собирать полезные данные о своих продуктах на основе критических замечаний и предложений клиентов.
  3. Вы можете получить ценную информацию о своем бренде и о том, какие эмоции он вызывает у людей.
  4. Проведите всесторонний конкурентный анализ и сравните свой продукт с продуктом вашего конкурента.
  5. Мониторинг долгосрочного здоровья бренда путем отслеживания настроений в течение длительных периодов времени гарантирует, что у вас будут позитивные отношения с вашими целевыми клиентами.

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

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

Используемый набор данных можно получить с Kaggle.com по этой ссылке: https://www.kaggle.com/datasets/kazanova/sentiment140.

Этот набор данных содержит 1 600 000 твитов, извлеченных с помощью API Twitter, и они были аннотированы (0 = отрицательные, 4 = положительные) и могут использоваться для определения настроений.

Обратите внимание, что я использовал Jupyter Notebooks.

Убедитесь, что все соответствующие импорты присутствуют, как показано во фрагменте кода ниже:

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

Вы должны ожидать результат, показанный ниже:

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

Предпринятые шаги по предварительной обработке текста:

  1. Преобразование каждого текста в нижний регистр.
  2. @Usernames были заменены словом ПОЛЬЗОВАТЕЛЬ. (например: @pierre_wainaina для USER)
  3. Символы, не являющиеся ни цифрами, ни буквами алфавита, заменены пробелом.
  4. Замена URL-адресов. Ссылки, начинающиеся с http, https или www, заменяются на URL.
  5. Короткие слова, содержащие менее двух букв, были удалены.
  6. Stopwords, то есть слова, не добавляющие смысла предложению, были удалены. (например: "а", "она", "есть")
  7. Слова лемматизированы. Лемматизация — это процесс приведения слова к его базовой форме. (например, от "худшего" до "плохого")
  8. Смайлики были заменены использованием предопределенного словаря, содержащего смайлики и их значение. (например, от «:» до «EMOJIsmile»)
  9. 3 или более последовательных буквы были заменены на 2 буквы. (например, от "Эйиий" до "Эйй")

Анализ данных

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

Ниже приведен вывод облака слов для негативных твитов:

Разделение данных

  • Данные обучения: набор данных, на котором будет обучаться модель, будет содержать 95% данных.
  • Тестовые данные: набор данных, на котором будет тестироваться модель, будет содержать 95% данных.

Мы разделим предварительно обработанные данные на 2 набора:

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

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

Именно здесь вступает в игру метод TF-IDF, который присваивает вес каждому слову в зависимости от его релевантности набору данных.

Векторизатор TF-IDF преобразует набор необработанных документов в матрицу характеристик TF-IDF и обычно обучается только на наборе данных X_train.

Как видно из приведенного ниже кода, наборы данных X_train и X_test были преобразованы в матрицу функций TF-IDF с помощью TF- Векторизатор IDF. Эти наборы данных будут использоваться для обучения и тестирования модели.

Создание и оценка моделей

Мы создадим 3 модели для нашего анализа настроений.

  • Наивный Байес Бернулли (BernoulliNB)
  • Классификация линейных опорных векторов (LinearSVC)
  • Логистическая регрессия (LR)

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

Теперь мы можем проверить, может ли наша модель правильно классифицировать твиты.

Вывод должен быть следующим, и наша модель работает хорошо, поскольку она может классифицировать твиты как положительные или отрицательные.

Первоначально опубликовано на https://wainainapierre.hashnode.dev.