Обзор

С плюсами и минусами токенизации, рассмотренными в предыдущем уроке, самое время рассмотреть встраивание слов.

Так как токены позволяют нам упростить набор слов, которые мы собрали из нашего документа или предварительно обученного словаря; Теперь мы можем сопоставить токены с трехмерным (3D) пространством, которое мы будем называть «пространством встраивания». Вы можете думать о пространстве встраивания как о матрице векторов, но в терминах Python это считается списком списков.

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

После того, как мы внедрили наши токены, мы можем использовать наше новое пространство встраивания для выполнения различных типов матричного умножения, чтобы идентифицировать различные типы шаблонов и отношений между нашими токенами. Мы даже можем извлечь наше пространство для встраивания и сохранить его для развертывания в системе или службе. Есть много способов добиться этого, но два наиболее распространенных фреймворка — это word2vec и GloVe. Оба были реализованы большим количеством библиотек, но TensorFlow, Keras и Gensim имеют одни из самых надежных версий, которые довольно просты в реализации.

Перчатка против Word2Vec

«GloVe — это алгоритм обучения без учителя для получения векторных представлений слов. Обучение выполняется на агрегированной глобальной статистике совпадения слов из корпуса, а полученные представления демонстрируют интересные линейные подструктуры векторногопространства слов».

— НЛП Стэнфорд, GloVe

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

— Google, Ускоренный курс машинного обучения

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

Давайте взглянем на код Word2Vec!

Во-первых, нам нужно импортировать библиотеки, которые мы будем использовать:

# imports
import gzip
import gensim
from gensim.utils import tokenize
import logging
# set up logging
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)

Далее мы импортируем набор данных и проверим его целостность.

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

Теперь, когда наши данные очищены (достаточно для этой демонстрации).

Давайте передадим новый объект Word2Vec в наш список списков и начнем обучение нашей модели! Обучение может занять минуту или две, в зависимости от аппаратного обеспечения вашего ПК.

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

размер

  • Размер плотного вектора, который будет представлять каждый токен (слово).
  • Меньшие наборы данных обычно используют меньшие значения, чем большие наборы данных, однако стоит поэкспериментировать с большими наборами данных, чтобы увидеть, что работает лучше всего.
  • В этой демонстрации эффективным выбором будет 125–150.

окно

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

мин_количество

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

рабочие

  • Количество рабочих процессов (потоков), запускаемых в фоновом режиме во время обработки.

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

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

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

t-Distributed Stochastic Neighbor Embedding (t-SNE) — это (отмеченный наградами) метод уменьшения размерности, который особенно хорошо подходит для визуализации многомерных наборов данных. — Лоренс ван дер Маатен

Когда они оба на месте, давайте посмотрим, что получится на выходе!

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

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

model.wv.save_word2vec_format('w2v-test', binary=False)

Важно отметить, что эти данные на самом деле находятся в трехмерном пространстве и просто выравниваются выше. Полный блокнот Jupyter для этого урока можно найти здесь: https://github.com/connlaoi/word2vec-with-visualizations.

Он также включает в себя 3D-визуализации, которые можно легко развернуть на существующих моделях Word2Vec.

Написано Коннлаой Смитом под руководством профессора Амита Мараджа.