Практическое руководство по созданию собственной модели doc2vec

Этот пост представляет собой руководство для начинающих по пониманию внутренней работы doc2vec для задач НЛП.

Существует две основные архитектуры для реализации doc2vec: а именно: Модель распределенной памяти векторов абзацев (PV-DM) и версия распределенного набора слов Вектор абзаца (PV-DBOW).

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

вступление

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



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

  • Кодировка метки
  • Пользовательское двоичное кодирование
  • Одно горячее кодирование

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

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

Doc2vec

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

Исходная бумага:



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

parargaph_id, также известный как вектор абзаца, был добавлен для отображения недостающих данных из контекста документа (т. Е. Темы абзацев).

Умный ход, правда?

Без лишних слов, давайте рассмотрим архитектуры doc2vec.

Версия вектора абзаца с распределенной памятью (PV-DM)

Эта архитектура похожа на модель непрерывного набора слов (CBOW) в word2vec.

Если вы вспомните архитектуру CBOW из моей статьи о word2vec, то увидите, что здесь просто добавлены parargaph_id. Paragraph_id, и векторы слов инициализируются произвольно. Каждый paragraph_id относится к отдельной записи (документу), в то время как векторы слов используются всеми записями. Следовательно, вы можете сказать, что paragraph_id уникален для каждого документа.

Таким образом, вектор документа D также обучается при обучении векторов слов W. В конце концов, D содержит числовое представление записи. Итак, вы можете сказать,

Модель PV-DM служит памятью, которая вспоминает то, что отсутствует в текущем контексте (теме абзаца).

Возьмем пример. Допустим, у нас есть предложение «Кот сел на диван». Модель CBOW учится предсказывать слово «сидел» при условии контекста отдельных слов вокруг него - кот, на и диван.

Точно так же в PV-DM последовательные слова выбираются случайным образом из абзаца, а затем модель пытается предсказать центральное слово из случайно выбранного набора слов с учетом учтите ввод - контекстные слова и paragraph_id.

Прежде чем перейти к следующей архитектуре, давайте попробуем лучше понять приведенную выше диаграмму. Архитектура состоит из 3-х частей. Первая часть - это матрица абзацев, , которая состоит из векторных столбцов абзаца. Затем у нас есть Average / Concatenate, который указывает, будет ли модель принимать среднее значение или объединять векторы абзаца и слов. И, наконец, у нас есть Классификатор, который принимает входные данные из последнего скрытого слоя и пытается предсказать центральное слово.

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

Версия вектора абзаца с распределенным набором слов (PV-DBOW)

Эта архитектура представляет собой версию Word2vec Skip-Gram с добавлением параметра paragraph_id.

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

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

Возьмем пример, приведенный на рисунке выше. Предположим, что модель обучается, прогнозируя 2 слова из выборки. Чтобы модель запомнила вектор документа, выбираются два слова из [the, cat, sat, on, the, Sofa].

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

Реализация

Модуль, который мы собираемся использовать, - Gensim (используется для моделирования тем, индексации документов и поиска сходства), а набор данных, который мы будем использовать, будет text8, который представляет собой набор данных размером ~ 100 МБ, сформированный с помощью случайных дампов Википедии (подробнее об этом здесь). Его можно загрузить с помощью загрузчика Gensim, как показано в приведенном ниже коде.

Теперь откройте командную строку и установите Gensim…

$ pip install gensim

После установки Gensim загрузите набор данных text8.

import gensim.downloader as api
dataset = api.load("text8")

В ячейке «Инициализировать модели» вы заметите аргумент dm , для которого установлено значение 0 при работе с моделью DBOW и 1 при работе с моделью PV-DM.

В конце концов, мы вызвали функцию most_similar, которая возвращает все похожие слова по всему документу.

Ага, вот и все! Были сделаны.

Еще несколько интересных ссылок по этим темам, которые вы, возможно, захотите проверить:





Выбор между DBOW и PV-DM

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

Но у DBOW есть свои преимущества - он использует меньше памяти и работает быстрее, чем PV-DM, поскольку не сохраняет векторы слов. И согласно найденным результатам, конкатенация неизменно превосходит метод агрегирования / среднего в подходе PV-DM.

Заключение

В этой статье мы изучили идеи и концепции, лежащие в основе doc2vec, и реализовали нашу собственную модель doc2vec, используя как архитектуру DBOW, так и архитектуру PV-DM. Вы можете дополнительно настроить модель, чтобы она работала лучше (подробнее о том, как это сделать здесь).

Так что пока все. Не стесняйтесь обращаться с любыми вопросами или отзывами.

Удачного обучения: D

GitHub Gist Link:

Https://gist.github.com/abhiinavx/aad89c7a4e9aa1b356b3652272ecfd0a#file-doc2vec-ipynb

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

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

Если вы хотите внести свой вклад, отправляйтесь на наш призыв к участникам. Вы также можете подписаться на наши еженедельные информационные бюллетени (Deep Learning Weekly и Comet Newsletter), присоединиться к нам в » «Slack и подписаться на Comet в Twitter и LinkedIn для получения ресурсов, событий и гораздо больше, что поможет вам быстрее и лучше строить модели машинного обучения.