Анализ настроений в отзывах Trip Advisor с помощью модели трансформеров Hugging Face

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

1. Введение

Отзывы покупателей играют важнейшую роль в формировании бизнес-решений. Анализ настроения, подобласть NLP, предполагает определение настроения, выраженного в тексте, например, в отзыве. В данном анализе мы будем использовать комбинацию NLTK и библиотеки трансформаторов для анализа настроения отзывов о гостиницах и визуализации результатов.

2. Библиотеки и загрузка данных

Начнем с импорта необходимых библиотек Python и загрузки данных обзора в pandas DataFrame. Набор данных можно загрузить по этой ссылке Kaggle.

# Importing libraries
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import nltk

# Load data
df = pd.read_csv('reviews.csv')

3. Исследование данных

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

df.head(10)

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

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

import nltk
from nltk.sentiment import SentimentIntensityAnalyzer

# Tokenization and part-of-speech tagging
ex = df['Review'][6778]
tk = nltk.word_tokenize(ex)
pos = nltk.pos_tag(tk)

# Named entity recognition
entity = nltk.chunk.ne_chunk(pos)
entity.pprint()

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

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

sia = SentimentIntensityAnalyzer()
sia.polarity_scores(ex)

6. Анализ настроений с использованием трансформаторов

Библиотека transformers предлагает предварительно обученные модели для различных задач НЛП, в том числе и для анализа настроений. Для анализа настроений мы будем использовать модель “cardiffnlp/twitter-roberta-base-sentiment”.

from transformers import AutoTokenizer, AutoModelForSequenceClassification
from scipy.special import softmax

MODEL = "cardiffnlp/twitter-roberta-base-sentiment"
tokenizer = AutoTokenizer.from_pretrained(MODEL)
model = AutoModelForSequenceClassification.from_pretrained(MODEL)

en_text = tokenizer(ex, return_tensors='pt')
result = model(**en_text)
ratings = result[0][0].detach().numpy()
ratings = softmax(ratings)
ratings_dict = {
    'rob_neg': ratings[0],
    'rob_neu': ratings[1],
    'rob_pos': ratings[2],
}
print(ratings_dict)

7. Создание кадра данных результата

Перебирая отзывы, мы применим функцию анализа настроения и сохраним результаты в DataFrame.

res = {}
for i, row in tqdm(df.iterrows(), total=len(df)):
    try:
        review = row['Review']
        rob_res = polarity_scores_rob(review)
        res[i] = rob_res
    except RuntimeError as e:
        res[i] = np.nan
        print(f"Error occurred at id {i}: {str(e)}")
        continue
    except IndexError as e:
        res[i] = np.nan
        print(f"IndexError occurred at id {i}: {str(e)}")
        continue

result_df = pd.DataFrame(res).T
result_df = result_df.reset_index().rename(columns={'index': "Id"})
result_df = pd.concat([result_df, df], axis=1)

8. Визуализация результатов анализа настроений

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

8.1 Парный график оценок настроений

Мы уже создали парный график, демонстрирующий взаимосвязь между оценками настроения (rob_neg, rob_neu, rob_pos) и рейтингами отзывов. Эта диаграмма позволяет быстро получить представление о том, как распределяются настроения и оценки по набору данных.

sns.pairplot(data=result_df, vars=['Id', 'rob_neg', 'rob_neu', 'rob_pos'], hue='Rating', palette='tab10')
plt.show()
Анализ настроений в отзывах Trip Advisor с помощью модели трансформеров Hugging Face

8.2 Распределение оценок настроений

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

plt.figure(figsize=(10, 6))
sns.histplot(data=result_df, x='rob_neg', bins=20, color='red', label='Negative')
sns.histplot(data=result_df, x='rob_neu', bins=20, color='gray', label='Neutral')
sns.histplot(data=result_df, x='rob_pos', bins=20, color='green', label='Positive')
plt.xlabel('Sentiment Score')
plt.ylabel('Frequency')
plt.title('Distribution of Sentiment Scores')
plt.legend()
plt.show()
Анализ настроений в отзывах Trip Advisor с помощью модели трансформеров Hugging Face

8.3 График распределения оценок настроений по рейтингам

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

plt.figure(figsize=(10, 6))
sns.boxplot(data=result_df, x='Rating', y='rob_pos', palette='viridis')
plt.xlabel('Review Rating')
plt.ylabel('Positive Sentiment Score')
plt.title('Distribution of Positive Sentiment by Review Rating')
plt.show()
Анализ настроений в отзывах Trip Advisor с помощью модели трансформеров Hugging Face

Заключение

Анализ настроений – мощный инструмент для понимания мнений и отношения клиентов, выраженных в отзывах. Объединив библиотеки NLTK и transformers, мы продемонстрировали комплексный подход к анализу настроений в коллекции отзывов о гостиницах. Этот анализ позволяет получить ценные сведения, которые могут помочь компаниям принимать обоснованные решения, направленные на повышение удовлетворенности клиентов и совершенствование своих продуктов и услуг.

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

+1
0
+1
0
+1
0
+1
0
+1
0

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *