Поймите, как ваши клиенты относятся к вашим продуктам и услугам

Что такое анализ настроений?

Анализ тональности помогает понять тон текстовых данных: положительный, отрицательный или нейтральный. Учет настроений может помочь организациям лучше понять голос клиента (VOC) и даже направить разработку продукта на улучшение функциональности. Часто анализ настроений основан на лексике и правилах, то есть он выполняет поиск слов, помеченных людьми как положительные, отрицательные или нейтральные. Доступны более продвинутые модели, такие как BERT, исходный код которого был открыт Google в 2018 году. В этом посте будет рассмотрен более традиционный подход, основанный на лексиконе; мы рассмотрим модели глубокого обучения позже.

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

  • Полярность: значение, выражающее степень эмоциональности предложения от отрицательной к положительной. Значение в диапазоне [-1,0, 1,0] (отрицательный тон => -1,0, нейтральный => 0,0, положительный тон => 1,0)
  • Субъективность. Субъективное предложение выражает личные чувства, взгляды или убеждения. Субъективность — это значение в диапазоне [0,0, 1,0], где 0,0 — очень объективно, а 1,0 — субъективно.

Данные Твиттера

В этом примере мы будем использовать данные, извлеченные из Twitter. Twitter — отличный источник для анализа VOC. Вы можете искать по названию продукта, хэштегу, упоминаниям или названию компании. Для Python мы можем использовать Tweepy обертку Twitter API.

В поисках замечательных примеров данных, которые были бы крайне положительными или крайне отрицательными, я просто написал это и загрузил данные в тот момент, когда был вынесен вердикт суда над Гизлен Максвелл. будучи прочитанным и понятым, это было бы отличным местом для начала негатива. Кто был бы противоположным, когда почти все твиты были бы положительными? Я выбрал Тейлор Свифт.

Я не буду описывать фактический код, который я использовал для извлечения твитов, но весь он доступен здесь, если вы хотите попробовать это самостоятельно: Блокнот извлечения твитов.

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

import pandas as pd
from textblob import TextBlob
from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
import seaborn as sns
import matplotlib.pyplot as plt
swift = pd.read_pickle('swift.pkl')
maxwell = pd.read_pickle('maxwell.pkl')

Анализ настроений с помощью TexBlob

TexBlob — это пакет, который мне нравится использовать для быстрых проектов НЛП. Это простой Python API, который поддерживает общие задачи, такие как анализ тональности. Он содержит два разных анализатора настроений. Первый называется PatternAnalyzer, а другой — NLTKs NaiveBayesAnalyzer, который обучается на корпусе обзоров фильмов.

Получить оценку полярности (или субъективности) от TextBlob очень просто. Мы можем использовать метод apply Panda, чтобы получить `sentiment.polarity для каждого твита.

# Apply the Polarity Scoring from TextBlob
swift['blob'] = swift['text'].apply(lambda x: TextBlob(x).sentiment.polarity)
swift.head()
TWEET POLARITY
0 RT @TSwiftFTC: 🥇 According to @HITSDD, Taylor ... 1.000000
1 RT @taylorr_media: Taylor Swift - All Too Well...  0.000000
2 Taylor Swift and Ed Sheeran music mainly. And ...  0.166667
3 RT @soitgoes: Taylor Swift didn't write:...        0.200000
4 Suporte list: Nial Horan, Demi Lovato, Taylor ...  0.000000

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

# Get rid of neutral sentiment
filter = swift['blob'] != 0
swift = swift[filter]

И следующий график наших результатов. Я использую histplot от Seaborn. Гистограммы идеально подходят для визуализации показателей полярности, так как их можно удобно объединить в диапазон от -1,0 до 1,0.

sns.histplot(swift, x='blob', color="#7C8C58", bins=10)
plt.title("Taylor Swift Sentiment Distribution with TextBlob")
plt.xlabel("Sentiment")
plt.ylabel("")

Ниже вы можете видеть, что твиты Тейлор Свифт в основном положительные, а твиты Максвелла в основном негативные.

Анализ настроений в социальных сетях с Вейдером

TextBlob не оптимизирован для коротких текстов или сообщений в социальных сетях. Он лучше подходит для более длинных и чистых строк, написанных с использованием общих языковых шаблонов. Однако появились инструменты, специально настроенные для социальных сетей, которые понимают, как работать с языковыми шаблонами, используемыми в социальных сетях. Одной из таких является библиотека VADER (Valence Aware Dictionary and sEntiment Reasoner). Вот некоторые из вещей, которые VADER обрабатывает специально для социальных сетей:

  • Слова-усилители: слова, усиливающие настроение, такие как великолепный или любовь.
  • ВСЕ ЗАГЛАВНЫЕ: слова, написанные заглавными буквами, часто используются для усиления эмоций (ОТЛИЧНО).
  • Пунктуация. Такие метки, как ! или !!!, повышают тональность.
  • Сленг: такие слова, как SUX или BFF, интерпретируются правильно.
  • Эмодзи: эмодзи в кодировке UTF-8 обрабатываются правильно.

Примечание. строки нельзя очищать, как это обычно делается с другими методами НЛП. Существует много контекста, который VADER уберет из необработанного текста.

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

positive = "💕 😁 🎉"
negative = "💔 😬 🙁"
{'neg': 0.0, 'neu': 0.375, 'pos': 0.625, 'compound': 0.875}
{'neg': 0.514, 'neu': 0.203, 'pos': 0.284, 'compound': -0.3415}

Две строки вернули бы 0.0 с TextBlob, с VADER они показывают compound баллов, которые, кажется, соответствуют эмоциям, которые представляют смайлики.

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

# Add the polarity scores
swift['vader'] = swift['text'].apply(lambda x: sid.polarity_scores(x))
{'neg': 0.0, 'neu': 0.793, 'pos': 0.207, 'compound': 0.7184}

Результирующий столбец фактически представляет собой словарь различных пар ключ-значение. Пара "ключ-значение", представляющая TextBlob sentiment, называется compound. Мы можем извлечь его с помощью следующей функции, примененной к нашему фрейму данных:

# Extract only the compound score value
swift['compound'] = swift['vader'].apply(lambda score_dict: score_dict['compound'])

После повторного построения наших результатов мы видим, что VADER лучше отражает настроение. Оценки для Swift более позитивны, а Maxwell — более негативно. VADER фиксирует в твитах больше эмоций, чем TextBlob, будь то смайлики или другие распространенные способы, которыми люди подчеркивают свои чувства.

Заключение

Вот оно! Голос клиента, анализ настроений по данным социальных сетей. Этот пост — только начало того, что вы можете сделать и как вы можете использовать эту информацию; тем не менее, это мощный инструмент в вашем наборе инструментов, позволяющий лучше понять ваших клиентов и их эмоции. Полный код для извлечения данных Twitter и анализа настроений доступен на GitHub.

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