Это 6-я часть моего текущего проекта анализа настроений в Твиттере. Вы можете найти предыдущие сообщения по ссылкам ниже.

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

Прежде чем мы перейдем к doc2vec, лучше сначала упомянуть word2vec. «Word2vec - это группа связанных моделей, которые используются для встраивания слов. Эти модели представляют собой неглубокие двухслойные нейронные сети, которые обучены восстанавливать лингвистические контексты слов ».

Word2vec - это не единый алгоритм, а состоит из двух методов - CBOW (непрерывный пакет слов) и модели Skip-gram. Обе эти техники изучают веса, которые действуют как векторные представления слов. С корпусом модель CBOW предсказывает текущее слово из окна окружающих контекстных слов, в то время как модель Skip-gram предсказывает окружающие контекстные слова с учетом текущего слова. В пакете Gensim вы можете указать, использовать ли CBOW или Skip-gram, передав аргумент «sg» при реализации Word2Vec. По умолчанию (sg = 0) используется CBOW. В противном случае (sg = 1) используется скип-грамма.

Например, у нас есть следующее предложение: «Я люблю собак». Модель CBOW пытается предсказать слово «любовь» при вводе «я», «собаки» в качестве входных данных, с другой стороны, модель скип-граммы пытается предсказать «я», «собаки», когда в качестве входных данных используется слово «любовь».

На рисунке ниже более формально показано, как работают эти две модели.

Но то, что используется в качестве векторов слов, на самом деле не является прогнозируемыми результатами этих моделей, а весами обученных моделей. После извлечения весов такой вектор некоторым абстрактным образом представляет значение слова. Если вы хотите узнать больше о том, как работает модель word2vec, есть отличная статья Xin Rong (2016), в которой подробно объясняется каждый шаг модели.

Тогда что такое doc2vec? Doc2vec использует ту же логику, что и word2vec, но применяет ее к уровню документа. Согласно Ле и Миколов (2014), каждый абзац отображается в уникальный вектор, представленный столбцом в матрице D, и каждое слово также отображается в уникальный вектор, представленный столбцом в матрице W. Вектор абзаца и векторы слов усредняются или объединяются, чтобы предсказать следующее слово в контексте… Маркер абзаца можно рассматривать как другое слово. Он действует как память, которая запоминает то, чего не хватает в текущем контексте - или в теме абзаца .

DM: Это модель Doc2Vec, аналогичная модели CBOW в Word2vec. Векторы абзацев получаются путем обучения нейронной сети задаче вывода центрального слова на основе контекстных слов и контекстного абзаца.

DBOW: это модель Doc2Vec, аналог модели Skip-gram в Word2Vec. Векторы абзацев получаются путем обучения нейронной сети задаче прогнозирования распределения вероятностей слов в абзаце с учетом случайно выбранных слов из абзаца.

Я реализовал модель Doc2Vec с помощью библиотеки Python Gensim. В случае модели DM я реализовал как метод усреднения, так и метод конкатенации. Это навеяно исследованием из Ле и Миколов (2014). В своей статье они реализовали модель DM двумя разными способами, используя процесс среднего расчета или метод конкатенации. Это также было показано в Руководстве по Gensim.

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

  1. DBOW (Распределенный пакет слов)
  2. DMC (объединенная распределенная память)
  3. DMM (среднее значение с распределенной памятью)
  4. DBOW + DMC
  5. DBOW + DMM

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

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

Для обучения Doc2Vec я использовал весь набор данных. Обоснование этого заключается в том, что обучение doc2vec полностью неконтролируемое, и поэтому нет необходимости хранить какие-либо данные, поскольку они не помечены. Это обоснование основано на доводах Лау и Болдуина (2016) в их исследовательской статье Эмпирическая оценка doc2vec с практическими взглядами на создание встраиваемых документов.

То же самое обоснование было применено в Учебнике Gensim's Doc2Vec. В учебнике IMDB векторное обучение происходит во всех документах набора данных, включая весь набор train / test / dev.

DBOW (Распределенный пакет слов)

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

По словам разработчика Радима Жегуржека, создавшего Gensim: «Одно предостережение относительно способа работы этого алгоритма заключается в том, что, поскольку скорость обучения снижается в процессе итерации данных, метки, которые видны только в одном LabeledSentence во время обучения, будут только обучены с фиксированной скоростью обучения. Это часто дает неоптимальные результаты ».

Ниже итерация реализует явный многопроходный подход с альфа-редукцией с добавлением перетасовки. Это уже было представлено в руководстве Gensim по IMDB.

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

Точность, проверенная на проверочном наборе с логистической регрессией, составляет 73,89%. Несмотря на то, что модель DBOW не изучает значение отдельного слова, а как функции, передаваемые классификатору, похоже, что она выполняет свою работу.

Но, похоже, он не превосходит векторизатор подсчета или векторизатор Tfidf (векторизатор Tfidf со 100 000 функций, точность набора проверки составила 82,92% с логистической регрессией).

DMC (объединение распределенной памяти)

Теперь перейдем к модели распределенной памяти и посмотрим, как это работает. Сначала я попробую использовать метод конкатенации для обучения.

К сожалению, точность проверочного набора оказалась 66,47%, что немного разочаровывает. Но это не означает, что модель не смогла изучить допустимое векторное представление на уровне слов.

Глядя на слова, похожие на «facebook» после обучения, можно сделать вывод, что модель правильно улавливает значение SNS, веб-службы. Также модель удачно улавливает сравнительную форму «маленький», скармливая слово «большой» и «больший». Вышеупомянутая строка кода похожа на просьбу модели добавить векторы, связанные со словом «больше» и «маленький», а вычитание «большой» равно верхнему результату «меньше».

DMM (среднее значение с распределенной памятью)

Попробуем еще один метод обучения модели DM.

Точность набора для валидации составляет 72,56%, что намного лучше, чем у модели DMC, и немного ниже, чем у модели DBOW. Давайте также посмотрим, чему он научился.

Похоже, он хорошо усвоил значение слова «хорошо», и наиболее похожее слово, которое выбрала модель для выражения «хорошо», - «отлично». Большой!

Комбинированная модель

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

Точность набора проверки для модели DBOW + DMC составляет 74,58%, что выше, чем у чистой модели DBOW (73,89%). Попробуем другую комбинацию.

На этот раз, объединив DBOW и DMM вместе, я получил точность набора проверки 75,51%.

В случае униграммы я узнал, что объединение векторов документов в различных комбинациях повысило производительность модели. Наилучшая точность проверки, которую я получил от одной модели, - от DBOW - 73,89%. С конкатенированными векторами я получаю наивысшую точность проверки 75,51% с моделью DBOW + DMM.

В следующем посте я рассмотрю моделирование фраз с помощью Gensim и применим это к Doc2Vec, чтобы увидеть, влияет ли это на производительность.

Спасибо за чтение, и вы можете найти Jupyter Notebook по ссылке ниже.

Https://github.com/tthustla/twitter_sentiment_analysis_part6/blob/master/Capstone_part4-Copy4.ipynb