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

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

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

Введение

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

  1. Количество отзывов: 568 454
  2. Количество пользователей: 256 059
  3. Количество товаров: 74 258
  4. Срок: октябрь 1999 г. - октябрь 2012 г.
  5. Количество атрибутов / столбцов в данных: 10

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

  1. Id
  2. ProductId - уникальный идентификатор продукта
  3. UserId - уникальный идентификатор пользователя
  4. ProfileName
  5. Числитель полезности - количество пользователей, которые сочли отзыв полезным
  6. HelpfullnessDenominator - количество пользователей, которые указали, считают ли они отзыв полезным или нет
  7. Оценка - оценка от 1 до 5
  8. Время - отметка времени для обзора
  9. Сводка - краткое изложение обзора
  10. Текст - текст отзыва

Цель

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

[Q] Как определить, является ли отзыв положительным или отрицательным?

[Ans] Мы могли бы использовать Score / Rating. Оценка 4 или 5 может считаться положительным отзывом. Отзыв 1 или 2 можно считать отрицательным. Обзор 3 является нейтральным и игнорируется. Это приблизительный и косвенный способ определения полярности (положительности / отрицательности) отзыва.

Загрузка данных

Набор данных доступен в двух формах

  1. файл .csv
  2. База данных SQLite

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

Здесь, поскольку мы хотим получить только общее мнение о рекомендациях (положительное или отрицательное), мы намеренно игнорируем все баллы, равные 3. Если идентификатор балла больше 3, тогда рекомендация будет установлена ​​на «положительную». В противном случае будет установлено отрицательное значение.

Я использовал базу данных, содержащую более 500 000 отзывов о прекрасных продуктах Amazon, которые доступны через Kaggle и могут быть найдены здесь.

когда я загружаю набор данных с помощью панд, я получил этот результат в Jupiter Notebook.

Но в окне вывода вы можете спросить, что такое числитель полезности и знаменатель полезности?

Числитель полезности: количество людей, которые сочли этот обзор полезным для себя.

Знаменатель полезности: количество людей указывало, считают ли они этот обзор полезным.

В машинном обучении очистка данных очень важна. Мы хотим предварительно обрабатывать данные с помощью Pandas.

Было замечено (как показано на изображении ниже), что в данных отзывов было много повторяющихся записей. Следовательно, необходимо было удалить дубликаты, чтобы получить объективные результаты анализа данных.

Как видно выше, один и тот же пользователь имел несколько обзоров с одинаковыми значениями для Helpfulness Numerator, HelpfullnessDenominator, Score, Time, Summary и Text, и при проведении анализа было обнаружено, что

ProductId = B000HDOPZG было печенье Loacker Quadratini с ванильными вафлями, упаковки по 8,82 унции (упаковка из 8)

ProductId = B000HDL1RQ - печенье Loacker Quadratini с лимонными вафлями, пакеты объемом 8,82 унции (набор из 8) и т. д.

Мы видим, что на двух изображениях выше марки обоих продуктов одинаковы, но вкус разный.

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

Для этого использовался метод: сначала мы сортируем данные в соответствии с ProductId, а затем просто сохраняем первый аналогичный обзор продукта и удаляем остальные. например, для выше остается только обзор для ProductId = B000HDL1RQ. Этот метод гарантирует, что для каждого продукта будет только один представитель, а дедупликация без сортировки может привести к тому, что для одного и того же продукта все еще будут существовать разные представители.

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

Мы видим, что после удаления дубликатов осталось только 69,25% данных, мы заметили, что 30,75% данных дублируются в наших исходных данных.

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

Итак, мы хотим удалить данные, строка которых содержит значение Helpfulness Numerator больше, чем HelpfullnessDenominator.

Что такое final [‘score’]. value_counts (): в нашем наборе данных 307061 балл положительный и 57110 балл отрицательный.

Но вот проблема: мы видим, что в нашем наборе данных есть столбцы с текстом и сводкой. Это текстовые функции, но в машинном обучении мы хотим использовать только числовые функции для построения модели. Теперь вопрос в том, как преобразовать текстовые элементы в числовые векторы?

Но вы можете подумать, почему мы хотим преобразовать текст в числовые векторы?

Подумайте, преобразованы ли наши текстовые элементы в d-мерные числовые векторы, чем мы можем нарисовать нормаль к плоскости для разделения положительных и отрицательных отзывов. Обратите внимание на изображение ниже: синие кресты - это положительные отзывы, а красные крестики - отрицательные отзывы, разделенные знаком. самолет W.

Если предположить, что кто-то дал новую оценку классификации, чем мы преобразовали в числовой вектор и умножили на веса, то если результат ›0, мы рассматриваем как положительный отзыв, а если результат

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

Итак, мы хотим преобразовать текстовые функции в числовые векторы. но вопрос в том, как преобразовать в числовой вектор?

Ответ - обработка естественного языка: мы используем некоторые методы обработки естественного языка для преобразования текста в числовые векторы.

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

какова связь между текстом и числовыми векторами?

  1. Учтите, что если два отзыва очень похожи, то расстояние между этими двумя векторами невелико, т. е. похожие точки должны быть ближе.
  2. Если расстояние между векторами двух обзоров велико, значит, отзывы различаются.
  3. Если два обзора r1, r2 более похожи, то векторное представление обзоров v1 и v2 должно быть близким.
  4. аналогичный текст должен быть близок геометрически.
  5. мы хотим найти метод, который принимает текст в качестве входных данных и возвращает числовой вектор в качестве выходных данных, так что аналогичный текст должен быть близок геометрически.

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

Мешок слов

tf – idf

Word2vec

Среднее значение Word2vec

Среднее значение tf – idf Word2vec

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

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

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

  1. Начните с удаления тегов HTML.
  2. Удалите знаки препинания или ограниченный набор специальных символов, например, или. или # и т. д.
  3. Убедитесь, что слово составлено из английских букв, а не является ли оно буквенно-цифровым.
  4. Убедитесь, что длина слова больше 2 (поскольку было исследовано, что прилагательного, состоящего из двух букв, нет).
  5. Преобразовать слово в нижний регистр.
  6. Удалите стоп-слова (стоп-слова, которые рассматриваются как шум в тексте. Текст может содержать такие стоп-слова, как is, am, are, this, a, an, the и т. д.).
  7. Наконец, Snowball Stemming слова (Stemming - это процесс взятия связанных слов и преобразования их в основную форму Stemming помогает в приведении слов к компактной форме, называемой основой слова). Пример: вкус, вкусный, со вкусом для этих слов основная форма - вкус после корня.

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

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

Методы изменения текста:

ЛУК (мешок слов):

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

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

BOW - это подход, широко используемый с:

  1. Обработка естественного языка.
  2. Получение информации из документов.
  3. Классификация документов.

На высоком уровне это включает следующие шаги.

Что такое вектор слова?

С одной стороны, это просто вектор весов. При простом кодировании 1-из-N (или «горячо») каждый элемент вектора связан со словом в словаре. Кодирование данного слова - это просто вектор, в котором соответствующий элемент установлен в единицу, а все остальные элементы равны нулю.

Предположим, в нашем словаре всего пять слов: король, королева, мужчина, женщина и ребенок. Мы могли бы закодировать слово «королева» как:

Токенизация:

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

Токенизация предложения

Токенизатор предложений разбивает текстовый абзац на предложения.

Токенизация Word

Токенизатор Word разбивает текстовый абзац на слова.

Создание функций с помощью пакета слов

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

Модель набора слов (BoW) - это простейший способ извлечения функций из текста. BoW преобразует текст в матрицу встречаемости слов в документе. Эта модель касается того, встречаются ли данные слова в документе или нет.

Пример. Предположим, есть три документа:

Док 1. Я люблю собак.

Док 2. Ненавижу собак и вязание.

Док 3. Вязание - мое хобби и страсть

Теперь вы можете создать матрицу документа и слов, подсчитав количество слов в данном документе. создать словарь документа, включающий все слова из трех документов, и извлечь слова из предложений.

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

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

пример: Doc1-Doc2 = || Doc1-Doc2 || = sqrt (0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0)

Doc1-Doc2 = sqrt (4) = 2

Двоичный пакет слов (BoW): В двоичном BOW мы учитываем вместо того, сколько раз вхождение слова, мы учитываем только то, является ли слово выходом или нет. Если слово существует, поставьте 1, иначе присвойте вектору 0.

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

Понимание слов:

Модель BOW учитывает только то, встречается ли известное слово в документе или нет. Его не волнует значение, контекст и порядок, в котором они появляются.

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

Ограничения BOW

  1. Семантическое значение: основной подход BOW не учитывает значение слова в документе. Он полностью игнорирует контекст, в котором используется. Одно и то же слово может использоваться в нескольких местах в зависимости от контекста или ближайших слов.
  2. Размер вектора. Для большого документа размер вектора может быть огромным, что требует больших вычислений и времени. Возможно, вам придется игнорировать слова в зависимости от вашего варианта использования.

Внедрение набора данных Bow on Food Reviews в учебном пособии

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

TF-IDF (частота термина - обратная частота документа):

TF-IDF означает «Частота термина - обратная частота документа». Это метод количественной оценки слова в документах, мы обычно вычисляем вес для каждого слова, который означает важность слова в документе и корпусе. Этот метод широко используется в поиске информации и интеллектуальном анализе текста.

Частота термина (tf). Частота термина - это частота слова в каждом документе в корпусе. Это отношение количества раз, когда слово встречается в документе, к общему количеству слов в этом документе. Он увеличивается по мере увеличения количества вхождений этого слова в документе. У каждого документа свой tf.

Частота использования термина показывает, как часто слово «w» встречается в документе d. Если Чаще слово «w» tf будет увеличиваться.

Обратная частота данных (idf): Этот измеряет важность документа во всем наборе корпуса, это очень похоже на tf. Единственное отличие состоит в том, что tf - это частотомер для термина t в документе d, где DF - это количество появлений термина t в наборе документов N.

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

Если мы уже вычислили значение tf и в результате получается векторизованная форма документа, почему бы не использовать только tf для определения релевантности между документами? зачем нам idf?

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

Наконец, взяв мультипликативное значение tf и idf, мы получаем оценку tf-idf, существует много различных вариантов tf-idf, но пока давайте сосредоточимся на этой базовой версии.

Давайте рассмотрим пример, чтобы лучше понять.

Предложение 1. Автомобиль едет по дороге.

Предложение 2. Грузовик едет по шоссе.

В этом примере каждое предложение представляет собой отдельный документ.

Теперь мы рассчитаем tf-idf для двух вышеуказанных документов, которые представляют наш корпус.

Из приведенной выше таблицы видно, что tf-idf общих слов был равен нулю, что показывает, что они не значимы. С другой стороны, tf-idf слов «автомобиль», «грузовик», «дорога» и «шоссе» не равны нулю. Эти слова имеют большее значение.

В tf-idf мы придаем большее значение:

  1. редкие слова встречаются в нашем корпусе.
  2. в нашем документе встречаются более частые слова.

Ограничения tf-idf

  1. Семантическое значение: он также не учитывает семантическое значение слова. Он полностью игнорирует контекст, в котором оно используется. Одно и то же слово может использоваться в нескольких местах в зависимости от контекста или ближайших слов.

Внедрение tf-idf в наборе данных Amazon Food Reviews в sci-kit learn

Десять лучших характеристик на основе оценки дает

word2vec:

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

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

Результатом модели word2vec являются Плотные векторы. Модель Word2vec требует большого корпуса текста.

В word2vec используется распределенное представление слова. Возьмем вектор с несколькими сотнями измерений (скажем, 1000). Каждое слово представлено распределением весов между этими элементами. Таким образом, вместо однозначного сопоставления между элементом вектора и словом, представление слова распространяется на все элементы в векторе, и каждый элемент в векторе способствует определению многих слов.

Если я помечу размеры в гипотетическом векторе слова (конечно, в алгоритме нет таких заранее назначенных меток), это может выглядеть примерно так:

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

Векторы для короля, мужчины, королевы и женщины:

Результат векторной композиции Король - Мужчина + Женщина =?

Чтобы понять всю работу модели word2vec, посетите здесь.

Внедрение word2vec в наборе данных Amazon Food Reviews в научно-учебном пособии

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

Простое сходство слов также дает:

Среднее значение word2vec:

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

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

Внедрение Average word2vec в наборе данных Amazon Food Reviews в sci-kit learn

Word2vec с взвешиванием по tf-idf:

В этом методе сначала мы вычисляем значение tf-idf каждого слова, затем мы умножаем его на значение word2vec каждого слова и берем его среднее значение.

Внедрение tf-idf weighted word2vec в наборе данных Amazon Food Reviews в sci-kit learn

Сначала мы рассчитаем значение tf-idf для каждого слова.

Затем мы вычисляем word2vec каждого слова и умножаем его на tf-idf значения слова и берем среднее значение.

Это небольшое введение в преобразование функций текста с помощью обработки естественного языка с использованием набора реальных данных Amazon Food Reviews от Kaggle.

Чтобы просмотреть полный код, посетите мой репозиторий GitHub, нажмите здесь

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

  • Прикладной ИИ
  • Coursera
  • Data Camp

Благодарим за внимание и за терпение. Сообщите мне, если в сообщении есть ошибки. Обсудим в комментариях, если вы обнаружите что-то не так в публикации или есть что добавить…