Сначала мы хотим узнать, что такое анализ Amazon Fine Food Review?

Этот набор данных состоит из обзоров изысканных продуктов от Amazon. Данные охватывают период более 10 лет, включая все около 500 000 обзоров до октября 2012 года. Обзоры включают информацию о продуктах и ​​пользователях, рейтинги и текстовые обзоры. У нас также есть обзоры из всех других категорий Amazon.

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

Источник: https://www.kaggle.com/snap/amazon-fine-food-reviews

Набор данных Amazon Fine Food Reviews состоит из обзоров изысканных продуктов от Amazon.

Количество отзывов: 568 454
Количество пользователей: 256 059
Количество продуктов: 74 258
Период времени: октябрь 1999 г. — октябрь 2012 г.
Количество атрибутов/столбцов в данных: 10

Информация об атрибутах:

  1. Id
  2. ProductId — уникальный идентификатор товара.
  3. UserId — уникальный идентификатор пользователя
  4. Имя профиля
  5. HelpfulnessNumerator — количество пользователей, которым отзыв был полезен.
  6. HelpfulnessDenominator — количество пользователей, которые указали, считают ли отзыв полезным или нет.
  7. Score — оценка от 1 до 5
  8. Time — временная метка обзора.
  9. Резюме — Краткое изложение обзора
  10. Текст — Текст обзора

Цель

Учитывая отзыв, определите, является ли он положительным (рейтинг 4 или 5) или отрицательным (рейтинг 1 или 2).

Содержание

  1. Предварительная обработка данных

2. Сплит «поезд-тест»

3. Простая «грубая» модель K-NN с использованием функций Bag of Words.

4. Простая «грубая» модель K-NN с использованием функций TFIDF.

5. Простая «грубая» модель K-NN с использованием функций Word2Vec

6. Простая «грубая» модель K-NN с использованием средних функций Word2Vec.

7. Простая «грубая» модель K-NN с использованием функций TFIDF W2V.

8. Модель K-NN «Kd-tree» с использованием функций Bag of Words.

9. Заключение

10. Наблюдения

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

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

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

Давайте построим модель с помощью K-NN. Если вы не знаете, как работает K-NN, чтобы узнать, пожалуйста, посетите мой предыдущий блог по ссылке здесь.

Назначьте данные зависимым функциям X, а Target — Y.

 X=data['preprocessed_reviews'].values
 Y=data['Score'].values

Сплит Train-Test

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

Если у вас есть один набор данных, вам нужно сначала разделить его с помощью функции Sklearn train_test_split.

Разделение поезд-тест — это метод оценки производительности алгоритма машинного обучения. Его можно использовать для задач классификации или регрессии, а также для любого алгоритма обучения с учителем.

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

#Train-Test split
from sklearn.model_selection import train_test_split
X_train,X_test,Y_train,Y_test=train_test_split(X,Y,test_size=0.3) #random splitting

X_train,X_cv,Y_train,Y_cv=train_test_split(X_train,Y_train,test_size=0.3) #random splitting
   
print(X_train.shape,Y_train.shape)
print(X_test.shape,Y_test.shape)
print(X_cv.shape,Y_cv.shape)

Особенности текста с помощью Bag of Words

#featurization_using_Bow
from sklearn.feature_extraction.text import CountVectorizer
vect=CountVectorizer()
vect.fit(X_train)
X_train_bow=vect.fit_transform(X_train)
X_test_bow=vect.transform(X_test)
X_cv_bow=vect.transform(X_cv)

Настройка гиперпараметров

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

Создавая простую модель с использованием грубой силы K-NN, мы уже определили функцию Grid_search, когда мы ее вызываем, она даст результат.

#Hyper parameter tuning
best_k=Grid_search(X_train,Y_train,'brute')

На графике ошибок мы выбираем K таким образом, чтобы у нас был максимальный AUC для данных cv, а разрыв между поездом и cv был меньше. в зависимости от используемого нами метода мы можем получить разные значения гиперпараметров как наилучшие.

Итак, мы выбираем в соответствии с выбранным нами методом, вы используете Grid-Search, если у нас больше вычислительной мощности, и обратите внимание, что это займет больше времени. Если мы увеличим значения cv в CV Grid Search, вы получите более надежные результаты.

Тестирование с тестовыми данными

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

После того, как мы найдем лучший k с помощью CV поиска в сетке, мы хотим проверить производительность с помощью тестовых данных, в этом примере мы используем AUC в качестве показателя производительности.

Определение функции для проверки данных.

#Testing with test data
test_data(X_train,Y_train,X_test,Y_test,'brute')

Показатели эффективности

Показатели производительности используются для измерения поведения, деятельности и эффективности бизнеса. Это должно быть в форме данных, которые измеряют требуемые данные в пределах диапазона, позволяя сформировать основу, поддерживающую достижение общих бизнес-целей.

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

Определение функции для показателей эффективности.

#performance metric
metric(X_train,Y_train,X_test,Y_test,'brute')

Обработка текста с использованием функций TFIDF

#generating the tf-idf features
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer=TfidfVectorizer(ngram_range=(1, 2))
X_train_tf_idf=vect.fit_transform(X_train)
X_test_tf_idf=vect.transform(X_test)
X_train=X_train_tf_idf
X_test=X_test_tf_idf
#Hyper Parameter Tuning
best_k=Grid_search(X_train,Y_train,'brute')

#computing the AUC on the test data
test_data(X_train,Y_train,X_test,Y_test,'brute')

#performance metric
metric(X_train_tf_idf,Y_train,X_test_tf_idf,Y_test,'brute')

Обработка текста с использованием возможностей Word2Vec

Word2vec создает векторы, которые являются распределенными числовыми представлениями характеристик слова, таких как контекст отдельных слов.

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

# Train your own Word2Vec model using your own text corpus
i=0
train_list_of_sentance=[]
for sentance in X_train:
    train_list_of_sentance.append(sentance.split())
# Using Google News Word2Vectors
from gensim.models import Word2Vec
from gensim.models import KeyedVectors
# min_count = 5 considers only words that occured atleast 5 times
train_w2v_model=Word2Vec(train_list_of_sentance,min_count=5,size=50, workers=4)

Word2Vec Featured of Train data for each review

# Train your own Word2Vec model using your own text corpus for test data
i=0
test_list_of_sentance=[]
for sentance in X_test:
    test_list_of_sentance.append(sentance.split())
test_w2v_model=Word2Vec(test_list_of_sentance,min_count=5,size=50, workers=4)

Word2Vec Характеристика тестовых данных для каждого отзыва

#Hyper parameter Tuning
best_k=Grid_search(X_train,Y_train,'brute')

#Testing with Test data
#computing the AUC on the test data
test_data(X_train,Y_train,X_test,Y_test,'brute')

#performance metric
metric(X_train,Y_train,X_test,Y_test,'brute')

Особенности текста с использованием средних функций Word2Vec

Средняя характеристика данных Word2Vec о поезде для каждого отзыва

Средняя характеристика Word2Vec тестовых данных для каждого отзыва

#Hyper parameter tuning
best_k=Grid_search(X_train,Y_train,'brute')

#Testing with Test data
#computing the AUC on the test data
test_data(X_train,Y_train,X_test,Y_test,'brute')

#performance metric
metric(X_train,Y_train,X_test,Y_test,'brute')

Обработка текста с использованием функций TFIDF W2V

#define tf_idf vectorizer
from sklearn.feature_extraction.text import TfidfVectorizer
tfidf_vect = TfidfVectorizer(ngram_range=(1, 1))
train_tfidf_w2v = tfidf_vect.fit(X_train)
test_tfidf_w2v = tfidf_vect.transform(X_test)

#Hyper parameter tuning
best_k=Grid_search(X_train,Y_train,'brute')

# Testing with Test data
#computing the AUC on the test data
test_data(X_train,Y_train,X_test,Y_test,'brute')

#performance metric
metric(X_train,Y_train,X_test,Y_test,'brute')

До этого мы строим простую модель «грубой силы» K-NN, используя некоторые популярные методы определения характеристик текста.

Чтобы построить модель K-NN с «Kd-деревом», в функции мы можем просто изменить алгоритм с «грубого» на «Kd-дерево», это даст нам результат.

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

K-NN kd-tree на луке Особенности

#K-D tree takes lots of time so I used 10 K data points only
#use preprocessed_reviews and score for building a model 
X=data['preprocessed_reviews'][:10000].values
Y=data['Score'][:10000].values

Мы рассмотрели только 500 функций, чтобы избежать ошибки памяти, показанной ниже.

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

X_train=X_train_bow.todense()
X_test=X_test_bow.todense()

Мы только что изменили «грубый» алгоритм на «Kd-дерево» в функции для построения K-NN с Kd-деревом, показанным ниже.

#Hyper parameter tuning
best_k=Grid_search(X_train,Y_train,'kd_tree')

# Testing with Test data
#computing the AUC on the test data
test_data(X_train,Y_train,X_test,Y_test,'kd_tree')

#performance metric
metric(X_train,Y_train,X_test,Y_test,'kd_tree')

Точно так же мы построили модель K-NN с Kd-деревом для TFIDF, Word2Vec, Average word2Vec и TFIDF W2V.

Чтобы понять полный код, перейдите по моей ссылке GitHub.

Выводы

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

The pretty table — это простая библиотека Python, предназначенная для быстрого и простого представления табличных данных в визуально привлекательных таблицах.

from prettytable import PrettyTable
    
table = PrettyTable()
table.field_names = ["Vectorizer", "Model", "Hyper Parameter", "AUC"]
table.add_row(["Bow", 'Brute_Forse', 49,80.18 ])
table.add_row(["TFIDF", 'Brute_Forse', 49, 81.34])
table.add_row(["Word2vec", 'Brute_Forse',49 ,84.61 ])
table.add_row(["Avg_Word2vec", 'Brute_Forse', 7, 50.27,])
table.add_row(["TFIDF_Word2vec", 'Brute_Forse',45 ,49.75 ])
table.add_row(["Bow", 'kd_Tree', 49,79.15 ])
table.add_row(["TFIDF", 'kd_Tree', 47,79.84 ])
table.add_row(["Word2vec", 'kd_Tree', 47,50.71 ])
table.add_row(["Avg_Word2vec", 'kd_Tree',27 ,50.12 ])
table.add_row(["TFIDF_Word2vec", 'kd_Tree', 3,49.76 ])
print(table)

Наблюдения

  1. Из приведенной выше таблицы мы можем сделать вывод, что для всех текстовых функций best_K по настройке гиперпараметра равен 49.
  2. Из приведенной выше таблицы мы заметили, что простая грубая модель K-NN Word2vec имеет самый высокий показатель AUC 84,61% на тестовых данных.
  3. Простая грубая модель K-NN функций TF-IDF и Bag of words также работает достаточно хорошо на тестовых данных, имеющих показатель AUC 81,34% и 80,18%.
  4. Avg_Word2Vec и TFIDF_Word2vec имеют низкий показатель AUC на тестовых данных.

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

Чтобы узнать, как работает K-NN, посетите мой предыдущий блог по ссылке здесь.

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

Для полного понимания кода перейдите по моей ссылке GitHub.

использованная литература

  • Прикладной ИИ
  • Курсера
  • Лагерь данных

Спасибо за чтение и ваше терпение. Надеюсь, вам понравился пост, дайте мне знать, если в моем посте есть ошибки. Давайте обсудим в комментариях, если вы нашли что-то не так в посте или у вас есть что добавить…

Счастливого обучения!!