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

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

Существует две разные версии Word2Vec для создания представлений встраивания слов. К ним относятся,

  • Модель непрерывного мешка слов
  • Модель скип-граммы

Модель непрерывного набора слов (CBOW):

Учитывая корпус, модель CBOW зацикливается на всех предложениях, выбирая контексты (окружающие слова), чтобы предсказать текущее целевое слово. Чтобы уменьшить количество слов в контексте, используется параметр размер окна. Теперь рассмотрим пример предложения «Праздный мозг — мастерская дьявола» с размером окна 2, пары (контекстные слова, целевые слова) могут иметь вид ([idle, is], brain), ([An, мозг], праздный), ([мастерская], чертова) и т.д. Короче говоря, модель CBOW предсказывает целевое слово на основе слов контекстного окна.

Архитектура модели CBOW

Подводя итог приведенной выше архитектуре модели, сначала мы берем слова окружающего контекста определенной длины окна. Мы получаем слова входного контекста с размерами (2 x размер окна), мы передаем их на слой встраивания с размерностью (размер словаря x размер встраивания), что дает нам плотное вектор встраивания для каждого слова (1 x dim встраивания). Затем мы усредняем все эти вложения, используя лямбда-слой, чтобы получить среднее плотное вложение (1 x dim встраивания).

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

На рисунке ниже показано то же самое. Далее мы обсудим модель пропуска грамм.

Визуальный контур модели CBOW

Пропустить — Модель грамма:

Модель скип-грамма полностью противоположна модели непрерывного мешка слов (CBOW). Здесь мы предсказываем слова контекста при задании целевого слова. Обратите внимание на следующее (окно контекста, целевые слова) в предложении «Киноиндустрия хорошо выглядит на расстоянии». ([внешний вид, из], хороший), ([фильм, внешний вид], индустрия)….и т.д. Поэтому задача состоит в том, чтобы предсказать контекстное окно [взгляды, откуда] с учетом целевого слова "хорошо". Модель пропуска грамм дает более точные результаты для больших наборов данных. Архитектура модели показана ниже.

Архитектура модели Skip-gram:

При наличии неконтролируемого корпуса текстовых данных модель скип-граммы преобразует его в контролируемую задачу прогнозирования (контекстных слов) на основе целевого слова. Чтобы объяснить архитектуру модели далее, она принимает входные данные как контекстного окна, так и целевого слова и передает их на уровень внедрения (vocab_size, embedding dim).

Затем эти два независимых слоя объединяются со слоем скалярного произведения. Вычисленное значение передается на плотный слой sigmoid для получения двоичного вывода 1 или 0. Прогнозируемый вывод сравнивается с истинным выводом «1», если заданные входные пары образуют (контекстные слова, целевое слово), иначе 0. Рисунок ниже объясняет то же самое.

Визуальный контур модели пропуска грамм

Хватит теории, давайте посмотрим на реализацию модели Wrd2Vec, обученной на новостях Google с 300 размерами встраивания.

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

#Импорт и загрузка модели word2vec-300
импорт numpy как np
из sklearn .manifold импорт TSNE
импорт matplotlib.pyplot как plt
импорт gensim.downloader как API

word2vec_model = api.load('word2vec-google-news-300')

word2vec_model[“computer”].shape #Получение 300 тусклых векторов для слова

Вывод: (300,)

Поиск похожих слов:

Он вычисляет близкие векторы к слову «мальчик».

word2vec_model.most_similar("мальчик")
Вывод:
[('девочка', 0.8543272018432617),
('подросток', 0.7606689929962158),
('малыш', 0.7043969631195068) ,
('teenage_girl', 0.6851483583450317),
('man', 0.6824870109558105),
('teen_ager', 0.6499968767166138),
('son', 0.633776426315307 6),< br /> ('малыш', 0.63228440284729),
('малыш', 0.6183817386627197),
('отчим', 0.5989422798156738)]

Поиск похожих парных слов:

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

Target_word = мальчик + королева — девочка

word2vec_model.most_similar(положительный=['мальчик','королева'], отрицательный = ['девочка'], topn=1)

Вывод:
[(‘король’, 0,7298422455787659)]

Встраивание 300 нечетких слов в двухмерную диаграмму:

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

vocab = ['девушка','король','мужчина','ребенок', 'индия','африка','америка','австралия']

метки = []
wordvectors = []

#Получить векторы слов для слов в словаре
для слов в словаре:
labels.append(word)
wordvectors.append(word2vec_model[word])

#Преобразует 300 дим-векторов в 2 дим с помощью PCA
tsne_model = TSNE(perplexity=3, n_components=2, init='pca')
координаты = tsne_model.fit_transform(wordvectors )

x = []
y = []
для значения в координатах:
x.append(value[0])
y.append(value[1])

#Plot
plt.figure(figsize=(10,6))
для i в диапазоне (len(x)):
plt.scatter(x[ i],y[i])
plt.annotate(labels[i], xy=(x[i], y[i]), xytext=(2, 2),
textcoords=' точки смещения', ha='right', va='bottom')

plt.show()

Вывод:

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

Далее мы увидим еще один популярный подход к обучению встраиванию слов под названием GloVe. Кроме того, мы рассмотрим использование трансферного обучения для задач НЛП.

Ссылки: