Обзоры продуктов Amazon Анализ настроений в Python
Amazon предоставляет малым предприятиям и компаниям со скромными ресурсами платформу для роста. И из-за его популярности люди действительно тратят время и пишут подробные обзоры о бренде и продукте. Таким образом, анализируя эти данные, мы можем многое рассказать компаниям об их продуктах, а также о способах повышения качества продукта. Но такой большой объем данных не может быть проанализирован человеком.
Обзоры продуктов Amazon Анализ настроений в Python
Итак, вот часть машинного обучения, то есть обработка естественного языка (NLP), чтобы преодолеть проблему больших наборов данных и проанализировать ее. Наша задача — предсказать, будет ли данный отзыв положительным или отрицательным. Реальный набор данных после очистки веб-сайта может включать миллионы отзывов. Итак, мы предварительно обработали данные для вас,
Перед запуском кода загрузите набор данных, нажав на ссылку.
Шаги, которые необходимо выполнить
- Импорт библиотек и наборов данных
- Предварительная обработка и очистка отзывов
- Анализ набора данных
- Преобразование текста в векторы
- Обучение модели, оценка и прогнозирование
Теперь начнем с кода.
Импорт библиотек и наборов данных
Используемые библиотеки:
- Pandas: для импорта набора данных.
- Scikit-learn: для импорта модели, модуля точности и TfidfVectorizer.
- Предупреждение: игнорировать все предупреждения
- Matplotlib: для построения визуализации. Также использовал Wordcloud для этого.
Python3
import warningswarnings.filterwarnings("ignore")import pandas as pdfrom sklearn.feature_extraction.text import TfidfVectorizerimport matplotlib.pyplot as pltfrom wordcloud import WordCloud |
Для части NLP мы будем использовать библиотеку NLTK. Отсюда нам потребуются стоп-слова и точки. поэтому давайте загрузим и импортируем их с помощью приведенной ниже команды.
Python3
import nltknltk.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 cleanreviewdata["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_splitx_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 LogisticRegressionmodel=LogisticRegression()#Model fittingmodel.fit(x_train,y_train)#testing the modelpred=model.predict(x_test)#model accuracyprint(accuracy_score(y_test,pred)) |
Выход :
0.81632
Давайте посмотрим на матрицу путаницы для результатов.
Python3
from sklearn import metricscm = confusion_matrix(y_test,pred)cm_display = metrics.ConfusionMatrixDisplay(confusion_matrix = cm, display_labels = [False, True])cm_display.plot()plt.show() |
Выход :