Обзоры продуктов Amazon Анализ настроений в Python

Опубликовано: 13 Декабря, 2022

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

Обзоры продуктов Amazon Анализ настроений в Python

Итак, вот часть машинного обучения, то есть обработка естественного языка (NLP), чтобы преодолеть проблему больших наборов данных и проанализировать ее. Наша задача — предсказать, будет ли данный отзыв положительным или отрицательным. Реальный набор данных после очистки веб-сайта может включать миллионы отзывов. Итак, мы предварительно обработали данные для вас,

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

Шаги, которые необходимо выполнить

  1. Импорт библиотек и наборов данных
  2. Предварительная обработка и очистка отзывов
  3. Анализ набора данных
  4. Преобразование текста в векторы
  5. Обучение модели, оценка и прогнозирование

Теперь начнем с кода.

Импорт библиотек и наборов данных

Используемые библиотеки:

  • Pandas: для импорта набора данных.
  • Scikit-learn: для импорта модели, модуля точности и TfidfVectorizer.
  • Предупреждение: игнорировать все предупреждения
  • Matplotlib: для построения визуализации. Также использовал Wordcloud для этого.

Python3




import warnings
warnings.filterwarnings("ignore")
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
import matplotlib.pyplot as plt
from wordcloud import WordCloud

Для части NLP мы будем использовать библиотеку NLTK. Отсюда нам потребуются стоп-слова и точки. поэтому давайте загрузим и импортируем их с помощью приведенной ниже команды.

Python3




import nltk
nltk.download("punkt")
nltk.download("stopwords")
from nltk.corpus import stopwords

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

Python3




data = pd.read_csv("AmazonReview.csv")
data.head()

Выход :

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

Python3




data.info()

Выход:

Data columns (total 2 columns):
 #   Column     Non-Null Count  Dtype 
---  ------     --------------  ----- 
 0   Review     24999 non-null  object
 1   Sentiment  25000 non-null  int64 

Теперь, чтобы удалить нулевые значения (если они есть), выполните приведенную ниже команду.

Python3




data.dropna(inplace=True)

Чтобы предсказать настроение как положительное (числовое значение = 1) или отрицательное (числовое значение = 0), нам нужно изменить их значения на эти категории. Для этого условие будет таким: если значение тональности меньше или равно 3, то оно отрицательное (0), иначе положительное (1). Для лучшего понимания обратитесь к приведенному ниже коду.

Python3




#1,2,3->negative(i.e 0)
data.loc[data["Sentiment"]<=3,"Sentiment"] = 0
 
#4,5->positive(i.e 1)
data.loc[data["Sentiment"]>3,"Sentiment"] = 1

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

Python3




stp_words=stopwords.words("english")
def clean_review(review):
  cleanreview=" ".join(word for word in review.
                       split() if word not in stp_words)
  return cleanreview
 
data["Review"]=data["Review"].apply(clean_review)

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

Python3




data.head()

Выход :

Анализ набора данных

Давайте проверим, сколько существует положительных и отрицательных настроений.

Python3




data["Sentiment"].value_counts()

Выход :

0    15000
1     9999

Чтобы иметь лучшее представление о важности слов, давайте создадим Wordcloud из всех слов с тональностью = 0, т.е. с отрицательным значением.

Выход :

Давайте сделаем то же самое для всех слов с настроенностью = 1, т.е. положительной.

Python3




consolidated=" ".join(word for word in data["Review"][data["Sentiment"]==1].astype(str))
wordCloud=WordCloud(width=1600,height=800,random_state=21,max_font_size=110)
plt.figure(figsize=(15,10))
plt.imshow(wordCloud.generate(consolidated),interpolation="bilinear")
plt.axis("off")
plt.show()

Выход :

Теперь у нас есть четкая картина слов, которые есть в обеих категориях.

Давайте создадим векторы.

Преобразование текста в векторы

TF-IDF вычисляет, насколько релевантно слово в ряду или корпусе тексту. Значение увеличивается пропорционально количеству раз в тексте, которое слово появляется, но компенсируется частотой слова в корпусе (наборе данных). Мы будем реализовывать это с помощью кода ниже.

Python3




cv = TfidfVectorizer(max_features=2500)
X = cv.fit_transform(data["Review"] ).toarray()

Обучение модели, оценка и прогнозирование

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

Python3




from sklearn.model_selection import train_test_split
x_train ,x_test,y_train,y_test=train_test_split(X,data["Sentiment"],
                                                test_size=0.25 ,
                                                random_state=42)

Теперь мы можем обучить любую модель. Давайте рассмотрим логистическую регрессию.

Python3




from sklearn.linear_model import LogisticRegression
 
model=LogisticRegression()
 
#Model fitting
model.fit(x_train,y_train)
 
#testing the model
pred=model.predict(x_test)
 
#model accuracy
print(accuracy_score(y_test,pred))

Выход :

0.81632

Давайте посмотрим на матрицу путаницы для результатов.

Python3




from sklearn import metrics
cm = confusion_matrix(y_test,pred)
 
cm_display = metrics.ConfusionMatrixDisplay(confusion_matrix = cm,
                                            display_labels = [False, True])
 
cm_display.plot()
plt.show()

Выход :