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

Что ж, это изменило мой мир, если можно так сказать! Это не просто открыло для меня ворота НЛП и анализа настроений, но это был мой первый проект по машинному обучению, в котором я понял, что мы, все мы, смотрим вокруг, являемся производителями данных. И эти данные сознательно или неосознанно используются аналитиками. Разве это не круто? Ну я так и думал :)

Итак, после этого я начал свое приключение в области машинного обучения, и это привело меня на Medium! Поскольку это мой первый рассказ здесь, я подумал, почему бы не сделать анализ еще одной кучи обзоров. На этот раз данные из ресторанов, ничего особенного, данные можно найти на kaggle, по этой ссылке: Отзывы клиентов ресторана | Каггл. Так что следите за новостями или просто читайте в свое удовольствие! Да, и в качестве справки я также использовал курс машинного обучения от A до Z от Udemy и TensorProjects.

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

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

#import all the required libraries, there's practically one for #everything
import numpy as np
import pandas as pd
#now lets import all the useful Natural Language Processing #Libraries
import nltk
import re
nltk.download('stopwords')
from nltk.corpus import stopwords
from nltk.stem.porter import PorterStemmer
#rest we can import while coding

Теперь, чтобы получить представление о данных, мы сделаем это:

P.S: извините за отсутствие вывода, но вам придется попробовать это на своем собственном ноутбуке, приятель. Не бойтесь, если вы столкнетесь с ошибками, просто погуглите, и кто-нибудь из StackOverflow или какого-нибудь замечательного форума придет вам на помощь xD

df = pd.read_csv('Location of your dataset', delimiter='\t', quoting=3)
df.shape
df.columns
df.head()

Теперь пришло время НЛП — комментарии говорят сами за себя

# Cleaning the reviews
corpus = []
for i in range(0,1000):
# Cleaning special character from the reviews
  review = re.sub(pattern='[^a-zA-Z]',repl=' ', string=df['Review'][i])
# Converting the entire review into lower case
  review = review.lower()
# Tokenizing the review by words
  review_words = review.split()
# Removing the stop words
  review_words = [word for word in review_words if not word in set(stopwords.words('english'))]
# Stemming the words
  ps = PorterStemmer()
  review = [ps.stem(word) for word in review_words]
# Joining the stemmed words
  review = ' '.join(review)
# Creating a corpus
  corpus.append(review)
# Creating the Bag of Words model
from sklearn.feature_extraction.text import CountVectorizer
cv = CountVectorizer(max_features=1500)
X = cv.fit_transform(corpus).toarray()
y = df.iloc[:, 1].values

Обучение модели - Использование разделения тестов поезда и реализация наших алгоритмов

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.20, random_state = 0)

Теперь ниже приведены различные модели классификации, которые вы можете использовать по своему усмотрению: 1) Наивный байесовский анализ.

# Fitting Naive Bayes to the Training set
from sklearn.naive_bayes import MultinomialNB
classifier = MultinomialNB()
classifier.fit(X_train, y_train)

2) СВМ

from sklearn.svm import SVC
classifier = SVC(kernel = 'linear', random_state = 0)
classifier.fit(X_train, y_train)

3) Классификатор случайного леса

from sklearn.ensemble import RandomForestClassifier
classifier = RandomForestClassifier(n_estimators = 10, criterion = 'entropy', random_state = 0)
classifier.fit(X_train, y_train)

Предсказания — эта функция берет обзор образца, преобразует его в нижний регистр, удаляет стоп-слова и использует PorterStemmer, который является предопределенной функцией для поиска корней и преобразования в окончательный чистый обзор.

def predict_sentiment(sample_review):
  sample_review = re.sub(pattern='[^a-zA-Z]',repl=' ', string = sample_review)
  sample_review = sample_review.lower()
  sample_review_words = sample_review.split()
  sample_review_words = [word for word in sample_review_words if not word in set(stopwords.words('english'))]
  ps = PorterStemmer()
  final_review = [ps.stem(word) for word in sample_review_words]
  final_review = ' '.join(final_review)
temp = cv.transform([final_review]).toarray()
  return classifier.predict(temp)

Теперь предсказание —

# Predicting values
sample_review = 'The food is really good here.'
if predict_sentiment(sample_review):
  print('This is a POSITIVE review.')
else:
  print('This is a NEGATIVE review!')

Ну это было долго!! Если вы дочитали до конца, большое вам спасибо и надеюсь, что вы чему-то научились!