Понимание структуры и вывода Word2Vec Skip-Gram

У меня двоякий вопрос, но, надеюсь, не слишком сложный. И обе части конкретно относятся к модели Skip-Gram в Word2Vec:

  • Первая часть касается структуры: насколько я понимаю, модель Skip-Gram основана на одной нейронной сети с одной входной матрицей весов W, одним скрытым слоем размера N и выходным весом C. матрицы W ', каждая из которых используется для создания одного из выходных векторов C. Это верно?

  • Вторая часть касается выходных векторов: насколько я понимаю, каждый выходной вектор имеет размер V и является результатом функции Softmax. Каждый выходной вектор узел соответствует индексу слова в словаре, а значение каждого узла - это вероятность того, что соответствующее слово встречается в этом месте контекста (для данного входного слова). Целевые выходные векторы, однако, не кодируются в горячем режиме, даже если обучающие экземпляры кодируются. Это верно?

Как я себе представляю, это что-то вроде следующих строк (выдуманный пример):

Предполагая, что словарь ['quick', 'fox', 'jumped', 'lazy', 'dog'] и контекст C = 1, и предполагая, что для входного слова 'jumped' я вижу два выходных вектора, выглядящих как это:

[0,2 0,6 0,01 0,1 0,09]

[0,2 0,2 ​​0,01 0,16 0,43]

Я бы интерпретировал это как «лиса», как наиболее вероятное слово, которое появляется перед словом «прыгнула» (p = 0,6), а «собака» - как наиболее вероятное слово, которое появляется после него (p = 0,43).

Я имею это право? Или я совсем выключен? Любая помощь приветствуется.


person BlackBeard    schedule 18.12.2015    source источник


Ответы (2)


Это мой первый ответ в SO, так что вот оно.

Согласно этой статье, ваше понимание обеих частей кажется правильным:

http://arxiv.org/abs/1411.2738

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

  • В структуре Skip Gram действительно используется единственная нейронная сеть, с вводом в виде целевого слова с горячим кодированием и ожидаемым выходом в виде контекстных слов с горячим кодированием. После обучения нейронной сети на корпусе текста входная матрица весов W используется в качестве векторных представлений слов в корпусе, а выходная матрица весов W ', который является общим для всех выходов C (выходные-векторы в терминологии вопроса, но во избежание путаницы с представлениями выходного вектора, используемыми далее ..), становится выходным вектором представления слов. Обычно представления вектора вывода игнорируются, а представления вектора ввода, W, используются как вложения слов. Чтобы понять размерность матриц, если мы предположим, что размер словаря равен V, а размер скрытого слоя равен N, у нас будет W как матрицу (V, N), где каждая строка представляет входной вектор проиндексированного слова в словаре. W ' будет матрицей (N, V), в которой каждый столбец представляет выходной вектор проиндексированного слова. Таким образом мы получаем N-мерные векторы для слов.
  • Как вы упомянули, каждый из выходных данных (избегая использования термина «выходной вектор») имеет размер V и является результатом функции softmax, причем каждый узел в выходных данных дает вероятность появления слова как контекстное слово для заданного целевого слова, что приводит к тому, что выходы не кодируются в горячем режиме, но ожидаемые выходы действительно кодируются в горячем режиме, т.е. фактическое слово, встречающееся в этой позиции контекста, из выходных данных нейронной сети, а затем веса обновляются с использованием градиентного спуска.

Ссылаясь на упомянутый вами пример, с C = 1 и словарем ['quick', 'fox', 'jumped', 'lazy', 'dog']

Если вывод скип-граммы равен [0,2 0,6 0,01 0,1 0,09], где правильное целевое слово - «лиса», тогда ошибка рассчитывается как -

[0 1 0 0 0] - [0.2 0.6 0.01 0.1 0.09] = [-0.2 0.4 -0.01 -0.1 -0.09]

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

Надеюсь это поможет !

person KeshavKolluru    schedule 20.07.2016
comment
В наборе поезд входом является слово, представленное горячим вектором. На выходе получается слово или несколько слов? - person derek; 05.03.2017

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

Тогда каков вектор?

Это распределенное представление значения слова.

Я точно не понимаю, как это можно тренировать. но обученный означает, как показано ниже.

Если одно такое векторное представление,

[0.2 0.6 0.2]

Он ближе к [0,2 0,7 0,2], чем [0,7 0,2 0,5].

Другой пример.

CRY [0,5 0,7 0,2]

СЧАСТЛИВ [-0,4 0,3 0,1]

SAD [0,4 0,6 0,2]

CRY ближе к SAD, чем HAPPY, потому что методы (CBOW или SKIP-GRAM и т. Д.) Могут сделать векторы более близкими, когда значение (или синтаксическая позиция) слов схожи.

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

Если вы хотите проверить сходство некоторых слов, вы сначала создаете векторы слов и проверяете косинусное сходство этих слов.

В документе (https://arxiv.org/pdf/1301.3781.pdf) объясняются некоторые методы и перечисленные точности.

Вы можете понимать коды c, программу word2vec (https://code.google.com/archive/p/word2vec/) полезно. Он реализует CBOW (Continuous Bag-Of-Words) и SKIP-грамм.

ps) Пожалуйста, поправьте мой плохой английский. ps) прокомментируйте, если есть вопрос, то пока.

person Chang-Uk Shin    schedule 20.07.2016