Большинство предприятий преуспевают в онлайн-маркетинге благодаря отзывам и оценкам пользователей, которые ранее приобрели определенный продукт. Известно, что продажи продукта в максимальной степени зависят от оценок и отзывов, данных предыдущими покупателями. Популярные веб-сайты, которые придерживаются этого формата, включают Flipkart, Amazon и eBay. В этой статье описывается процедура, направленная на использование обзорных текстов для выполнения анализа на основе вывода, тем самым помещая модель под опеку различных алгоритмов прогнозирования для прогнозирования категориальных рейтингов на основе этих текстов. Для этой цели был выбран набор данных Ecommerce Women’s Clothing от Kaggle.
Конечная идея этой статьи состоит в том, чтобы продемонстрировать метод прогнозирования класса неизвестного экземпляра, что означает, что данный текст обзора будет использоваться для классификации как «плохой» или «хороший» рейтинг. Для набора данных будет проведен сравнительный анализ различных моделей прогнозирования, чтобы выбрать наиболее эффективную модель прогнозирования. Использование информативного набора данных, такого как «Женская одежда для электронной торговли», даст необходимый импульс для понимания статуса продуктов и брендов на рынке.
Мы можем использовать различные алгоритмы для выполнения прогнозного анализа. Различные модели машинного обучения используются для повышения производительности с точки зрения точности и сравнения других важных показателей этих моделей. Мы можем использовать следующие алгоритмы в машинном обучении:
1. Логистическая регрессия
2. Полиномиальный наивный байесовский метод
3. Машина опорных векторов (SVM)
4. K-ближайшие соседи (KNN)
Подробное описание предлагаемого метода приведено ниже:
Шаг 1: Загрузите набор данных из Kaggle.
Шаг 2. Выполните очистку данных, чтобы удалить информацию, которая не способствует анализу тональности.
Шаг 3: Удалите данные о пропущенных значениях с помощью фильтрации.
Шаг 4: Используйте Pipeline для применения CountVectorizer, TfidfTransformer, а затем различных алгоритмов для получения максимально возможной точности.
Шаг 5. Сравните показатели производительности, в том числе точность, точность, полноту и оценку F-1.
Набор данных Ecommerce Women’s Clothing Reviews загружается из Kaggle для проведения анализа настроений. Затем этот набор данных подвергается различным этапам предлагаемой процедуры, блок-схема которой показана ниже.
НАСТОЯТЕЛЬНО РЕКОМЕНДУЕТСЯ: сначала выполните блоки кода в соответствии с номером, указанным в нижней части каждого блока в квадратных скобках, а затем просмотрите примечания, приведенные в этой статье. Сначала выполните блоки кода, относящиеся только к модели MultinomialNB, разберитесь в пунктах статьи, а затем приступайте к реализации других моделей ML, которые потребуют незначительных изменений по сравнению с кодом для MultinomialNB. Объяснения некоторых сегментов проекта расположены не в той последовательности, в которой код должен быть упорядоченно выполнен, в пояснительных целях. Блоки кода до раздела «Другие модели» охватывают только полиномиальную наивную байесовскую модель, коды, следующие за ними, указывают на незначительные изменения, необходимые для выполнения трех других моделей.
Импорт необходимых библиотек:
import pandas as pd import numpy as np import matplotlib.pyplot as plt %matplotlib inline import seaborn as sns import string import nltk [1]
Загрузить пакет «стоп-слова» из download_shell:
nltk.download_shell() //following the execution of the above line of code, enter 'd' which stands for 'download', followed by 'stopwords', which leads to downloading the 'stopwords' package. from nltk.corpus import stopwords [2]
Давайте выполним шаги, как показано на блок-схеме.
Набор данных. Прочитайте соответствующий набор данных, используя библиотеку pandas.
reviews=pd.read_csv('Womens_Clothing_E_Commerce_Reviews.csv') [3]
Очистка данных. В наборе данных вы заметите, что некоторые строки содержат по крайней мере одно значение столбца, которое оказалось нулевым. В свете этого нам нужно удалить строки, которые имеют нулевое значение хотя бы для одного столбца.
cols=[] for i in reviews.columns: cols.append(i) reviews.dropna(subset=cols,axis=0,inplace=True) [4]
Теперь мы создаем столбец с именем «Хорошо/Плохо», который вставляет значение «Хорошо» для строк с рейтингом>3 и «Плохо» для строк с рейтингом ≤3. Эта цель достигается за счет использования лямбда-функций, которые вызывают функцию «myfunc1», которая применяется специально к столбцу «Рейтинг» и возвращает значения «Хорошо» или «Плохо» на основе вышеупомянутого условия.
def myfunc1(var): if (var<=3): return 'Bad' else: return 'Good' reviews['Good/Bad']=reviews['Rating'].apply(lambda x: myfunc1(x)) [5]
Согласно блок-схеме, давайте получим представление об основных функциях Pipeline, а затем кратко объясним различные пошаговые задачи, которые он выполняет.
Каркас того, как конвейер использовался в нашем случае, можно увидеть в приведенном ниже коде:
from sklearn.pipeline import Pipeline pipeline=Pipeline([('bow',CountVectorizer(analyzer=myfunc).fit(Reviews['Review Text'])), ('tfidf',TfidfTransformer()), ('classifier',MultinomialNB()) ]) // Execute the above block of code after importing the libraries required for carrying out the task of the pipeline successfully, which is observed in the next block of code. [9]
Показанный выше конвейер выполняет следующие операции: удаление стоп-слов и знаков препинания, получение пакета слов, применение векторизации TF-IDF с последующим применением выбранной вами модели машинного обучения. Давайте рассмотрим значения различных терминов, наблюдаемых в конвейере.
Стоп-слова: это английские слова в предложении, которые можно безопасно игнорировать, не жертвуя смыслом предложения. Например, такие слова, как: «тот», «он», «иметь» и т. д. Даже в отношении набора данных Kaggle ранее упомянутые слова не будут влиять на прогнозирование того, является ли рейтинг, связанный с конкретным текстом отзыва, «хорошим». " или "плохой".
Пунктуация: поскольку мы занимаемся преобразованием текстовых данных в векторы для прогнозного анализа, абсолютно необходимо удалить любые знаки препинания, которые могут присутствовать в отзыве пользователя.
Модель мешка слов — это упрощающее представление, используемое при обработке естественного языка и поиске информации (IR). В этой модели текст (например, предложение или документ) представляется в виде набора (мультимножества) его слов без учета грамматики и даже порядка слов, но с сохранением множественности. Чтобы получить пакет слов, нам сначала нужно выполнить очистку текстовых данных, удалив стоп-слова и знаки препинания.
Предварительная обработка текста, фильтрация стоп-слов и знаков препинания — все это реализовано в CountVectorizer, который создает словарь признаков и преобразует документы в векторы признаков. CountVectorizer подсчитывает только количество появлений слова в документе, что часто приводит к смещению в пользу наиболее часто встречающихся слов, что приводит к игнорированию редких слов, которые могли бы помочь в более эффективной обработке данных [9]. Чтобы преодолеть это, мы используем TfidfTransformer. TF-IDF — это мера слова путем сравнения количества раз, когда слово встречается в документе, с количеством документов, в которых это слово встречается. раз слова, присутствующие во всем наборе данных, встречаются в разных предложениях. «IDF» относится к «обратной частоте документа», цель которого — отразить важность слова в документе в коллекции или корпусе.
Важно отметить, если кто-то запутается, это то, что Pipeline выполняет последовательное выполнение операций. Как видно из функции Pipeline, задачи CountVectorizer и TfidfTransformer могут быть успешно решены всего двумя строками кода. Шаг классификатора предназначен исключительно для модели классификации, которую вы хотите применить к данным.
Импортируем необходимые библиотеки и модели ML следующим образом:
//first import these before executing the pipeline step from sklearn.feature_extraction.text import CountVectorizer from sklearn.feature_extraction.text import TfidfTransformer from sklearn.naive_bayes import MultinomialNB from sklearn.neighbors import KNeighborsClassifier from sklearn.linear_model import LogisticRegression from sklearn.svm import SVC from sklearn.model_selection import GridSearchCV [6]
Можно задаться вопросом о назначении параметра «анализатор» шага CountVectorizer конвейера. Он вызывает функцию с именем «myfunc», которая, подобно роли вызываемой функции в лямбда-выражении, применяется к определенному столбцу «Просмотр текста», задачей которого является удаление стоп-слов и знаков препинания. Функция и ее работа следующие:
def myfunc(punc): ml1=[] for i in punc: if i not in string.punctuation: ml1.append(i) ml2=''.join(ml1) ml2=ml2.split() i=0 while i<len(ml2): if ml2[i].lower() in stopwords.words('english'): del ml2[i] else: i=i+1 continue return ml2 [7]
Работа myfunc:
Давайте рассмотрим пример предложения, чтобы понять, как выполняется очистка текста. Рассмотрим следующее предложение: «Это горизонтальная проблема». Заметно, что предложение состоит из 2 стоп-слов и 1 знака препинания. Вышеупомянутая функция, используя цикл for, сначала проверяет, является ли итерируемый элемент знаком препинания или нет. Если элемент не является пунктуацией, он добавляется в список «ml1». Если это знак препинания, он просто игнорируется. Список «ml1» теперь состоит только из слов в предложении. Содержимое «ml1» теперь добавляется к ml2. После выполнения цикла while «ml2» теперь будет возвращать текстовые данные, не содержащие ни стоп-слов, ни знаков препинания, следовательно, очистка данных прошла успешно, и полученные слова готовы для векторизации подсчета.
Функция конвейера на рис. 2 охватывает только модель MultinomialNB. Возможны изменения для других моделей. Во-первых, нам нужно разделить данные столбца «Просмотр текста» на данные обучения и тестирования (столбец «X»), при этом то же самое будет реализовано в нашем целевом столбце прогнозирования, т. Е. «Хорошо/плохо».
X=Reviews['Review Text'] y=Reviews['Good/Bad'] X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3) [8]
Затем следует подгонка данных обучения и тестирования, прогнозирование и, наконец, создается отчет о классификации, который предоставляет различные показатели на основе используемой модели.
pipeline.fit(X_train['Review Text'],y_train) predictions=pipeline.predict(X_test['Review Text']) from sklearn.metrics import classification_report print(classification_report(y_test,predictions)) [10]
Другие модели:
I. K-ближайшие соседи: изменения, необходимые для успешного выполнения этой модели, потребуются только в коде конвейера следующим образом:
pipeline=Pipeline([('bow',CountVectorizer(analyzer=myfunc).fit(Reviews['Review Text'])), ('tfidf',TfidfTransformer()), ('classifier',KNeighborsClassifier(n_neighbors=5)) ])
При этом все остальные блоки кода остаются прежними.
II. Логистическая регрессия: ниже можно наблюдать только изменения для модели LR:
pipeline=Pipeline([('bow',CountVectorizer(analyzer=myfunc).fit(Reviews['Review Text'])), ('tfidf',TfidfTransformer()), ('classifier',LogisticRegression()) ])
III. SVM: для модели машины опорных векторов перед конвейером вам необходимо выполнить следующий код:
param_grid = {'C': [0.1,1, 10, 100, 1000], 'gamma': [1,0.1,0.01,0.001,0.0001], 'kernel': ['rbf']}
Затем за этим может следовать функция конвейера:
pipeline=Pipeline([('bow',CountVectorizer(analyzer=myfunc).fit(Reviews['Review Text'])), ('tfidf',TfidfTransformer()), ('classifier',GridSearchCV(SVC(),param_grid,refit=True,verbose=3)) ])
Метрический анализ 4 моделей, использованных после получения отчета о классификации каждой модели, можно резюмировать на рисунке ниже: