Объяснение принципа Word2vec
принцип word2vec (1) основа модели CBOW и Skip-Gram
Принцип word2vec (2) Иерархическая модель на основе Softmax
Принцип модели word2vec (3), основанной на отрицательной выборке
word2vec — это инструмент НЛП, запущенный Google в 2013 году. Его функция заключается в векторизации всех слов, чтобы можно было количественно измерить взаимосвязь между словами и определить взаимосвязь между словами. Хотя исходный код является открытым, кодовая база Google недоступна в Китае, поэтому принцип word2vec, описанный в этой статье, основан на принципе на Github.word2vecКодекс имеет преимущественную силу. Эта статья посвящена основам word2vec.
содержание
1. Основы работы с векторами Word
2. CBOW и Skip-Gram для языковой модели нейронной сети
3. Дерево Хаффмана на основе word2vec
1. Основы работы с векторами Word
Использование векторов слов для представления слов не является первым в word2vec, оно появилось очень давно. Самый ранний вектор слова очень подробный. Он использует размер вектора слова как размер всего словаря. Для каждого конкретного слова в словаре соответствующая позиция устанавливается равной 1. Например, у нас есть следующий словарь, состоящий из 5 слов, порядковый номер слова «Королева» равен 2, тогда его вектор слов равен (0,1,0,0,0)(0,1,0,0, 0) . Точно так же вектор слов для слова «Женщина» равен (0,0,0,1,0)(0,0,0,1,0). Метод кодирования этого вектора слов обычно называется представлением 1 из N или одним горячим представлением.
Одно горячее представление очень просто для представления векторов слов, но есть много проблем. Самая большая проблема заключается в том, что наши словари, как правило, очень велики, например, миллионы уровней, так что каждое слово представлено миллионным вектором, что является катастрофой памяти. На самом деле такой вектор фактически равен 0, кроме одной позиции, а остальные позиции равны 0. Эффективность выражения невысока, можно ли уменьшить размерность вектора слов?
Распределенное представление может решить проблему одного горячего представления, Его идея состоит в том, чтобы сопоставить каждое слово с более коротким вектором слов посредством обучения. Все эти векторы слов составляют векторное пространство, и тогда можно использовать обычные статистические методы для изучения отношений между словами. Какова размерность этого более короткого вектора слов? Как правило, это необходимо указать нам самим во время обучения.
Например, на следующем рисунке мы используем слова из словаря для представления четырех измерений «Королевская власть», «Мужественность», «Женственность» и «Возраст». Вектор слова, соответствующий слову «Король», может быть (0,99, 0,99, 0,05, 0,7) (0,99, 0,99, 0,05, 0,7). Конечно, на практике мы не можем дать хорошее объяснение каждому измерению вектора слова.
С более коротким вектором слов, представленным распределенным представлением, мы можем легко анализировать отношения между словами. Например, мы уменьшаем размерность слов до 2 измерений. Интересное исследование показывает, что с помощью следующего рисунка Когда векторы слов представляют наши слова, мы можем найти:
Король→−Мужчина→+Женщина→=Королева→Король→−Мужчина→+Женщина→=Королева→
Видно, что пока мы получаем векторы слов, соответствующие всем словам в словаре, мы можем делать много интересных вещей. Однако как обучить подходящий вектор слов? Очень распространенным подходом является использование языковых моделей нейронных сетей.
2. CBOW и Skip-Gram для языковой модели нейронной сети
До появления word2vec нейронная сеть DNN использовалась для обучения векторов слов для обработки отношений между словами. Используемый метод, как правило, представляет собой трехслойную структуру нейронной сети (конечно, она также может быть многослойной), которая делится на входной слой, скрытый слой и выходной слой (слой softmax).
Как эта модель определяет ввод и вывод данных? Обычно делится на CBOW (две модели Continuous Bag-of-Words и Skip-Gram.
Входными данными для обучения модели CBOW является вектор слов, соответствующий контекстно-зависимому слову определенного характеристического слова, а выходными данными является вектор слов этого конкретного слова. Например, в следующем отрывке наш размер контекста равен 4, а конкретное слово «Обучение», которое является нужным нам вектором выходного слова.Есть 8 слов, соответствующих контексту, 4 до и после, эти 8 слов вход в нашу модель. Поскольку CBOW использует модель мешка слов, эти 8 слов равны, то есть независимо от расстояния между ними и интересующими нас словами, если они находятся в нашем контексте.
Таким образом, в нашем примере CBOW наши входные данные представляют собой 8 векторов слов, а выходные данные — это вероятность softmax для всех слов (цель обучения — ожидать максимальную вероятность softmax, соответствующую конкретному слову обучающей выборки), и соответствующий ввод слой модели нейронной сети CBOW имеет 8 нейронов, выходной слой имеет нейроны размера словаря. Мы можем сами указать количество нейронов в скрытом слое. С помощью алгоритма обратного распространения DNN мы можем найти параметры модели DNN и получить векторы слов, соответствующие всем словам одновременно. Таким образом, когда у нас есть новое требование найти наиболее вероятное выходное центральное слово, соответствующее определенным 8 словам, мы можем использовать алгоритм прямого распространения DNN и использовать функцию активации softmax, чтобы найти нейрон, соответствующий слову с самым высоким значением. вероятность.
Идеи модели Skip-Gram и CBOW меняются местами, то есть входом является вектор слова определенного слова, а выходом является вектор слова контекста, соответствующий конкретному слову. Тем не менее в приведенном выше примере наш размер контекста равен 4, конкретное слово «Обучение» является нашим входом, а эти 8 контекстных слов являются нашим выходом.
Таким образом, в нашем примере Skip-Gram наш ввод — это конкретное слово, а вывод — первые 8 слов с вероятностью softmax.Соответствующая модель нейронной сети Skip-Gram имеет 1 нейрон во входном слое и словарь в выходном слое. размер нейронов. Мы можем сами указать количество нейронов в скрытом слое. С помощью алгоритма обратного распространения DNN мы можем найти параметры модели DNN и получить векторы слов, соответствующие всем словам одновременно. Таким образом, когда у нас есть новое требование найти наиболее вероятные 8 контекстных слов, соответствующих определенному слову, мы можем получить нейрон, соответствующий 8 верхним вероятностям softmax, с помощью алгоритма прямого распространения DNN.
Выше приведен общий процесс использования CBOW и Skip-Gram для обучения модели и получения векторов слов в языковой модели нейронной сети. Но это сильно отличается от процесса использования CBOW и Skip-Gram для обучения модели и получения вектора слов в word2vec.
Почему word2vec продолжает оптимизировать новые методы без использования существующей модели DNN? Основная проблема заключается в том, что этот процесс моделей DNN занимает очень много времени. Наш словарный запас, как правило, превышает уровень миллиона, а это означает, что выходной слой нашей DNN должен выполнять softmax для вычисления выходной вероятности каждого слова, что требует большого количества вычислений. Есть ли способ немного упростить его?
3. Дерево Хаффмана на основе word2vec
word2vec также использует CBOW и Skip-Gram для обучения модели и получения векторов слов, но не использует традиционную модель DNN. Первая оптимизированная структура данных заключается в использовании дерева Хаффмана для замены нейронов в скрытом слое и выходном слое.Листовые узлы дерева Хаффмана играют роль нейронов в выходном слое, а количество конечных узлов — это словарь. словарного запаса маленький большой. Внутренние узлы действуют как нейроны скрытого слоя.
Как использовать дерево Хаффмана для обучения CBOW и Skip-Gram, будет обсуждаться в следующем разделе Здесь мы сначала рассмотрим дерево Хаффмана.
Создание дерева Хаффмана на самом деле не сложно, процесс выглядит следующим образом:
Вход: nn узлов с весами (w1,w2,...wn)(w1,w2,...wn)
Выход: соответствующее дерево Хаффмана
1) Рассмотрим (w1,w2,...wn)(w1,w2,...wn) лес с n деревьями, каждое дерево имеет только один узел.
2) Выберите два дерева с наименьшим весом корневого узла в лесу, чтобы объединить их, чтобы получить новое дерево, и эти два дерева распределяются как левое и правое поддеревья нового дерева. Вес корневого узла нового дерева равен сумме весов корневых узлов левого и правого поддеревьев.
3) Удалить из леса два дерева с наименьшим весом предыдущего корневого узла и добавить в лес новое дерево.
4) Повторяйте шаги 2) и 3), пока в лесу не останется только одно дерево.
Ниже мы используем конкретный пример, чтобы проиллюстрировать процесс построения дерева Хаффмана, У нас есть (a, b, c, d, e, f) в общей сложности 6 узлов, и распределение веса узлов (20, 4, 8, 6,16,3).
Сначала объединяются наименьшие b и f, и вес нового корневого узла дерева равен 7. В это время в лесу 5 деревьев, а веса корневых узлов равны 20, 8, 6, 16 и 7. соответственно. В это время 6 и 7 с наименьшим весом корневого узла объединяются для получения нового поддерева и так далее, и, наконец, получается следующее дерево Хаффмана.
Итак, каковы преимущества деревьев Хаффмана? Как правило, после получения дерева Хаффмана мы будем выполнять кодирование Хаффмана на листовых узлах.Поскольку листовые узлы с большим весом находятся ближе к корневому узлу, листовые узлы с низким весом будут дальше от корневого узла, поэтому наш высокий Кодовое значение узла -weight короче, а значения с низким весом кодируют более длинные значения. Это гарантирует, что взвешенный путь дерева будет кратчайшим, а также согласуется с нашей теорией информации, то есть мы хотим, чтобы более распространенные слова имели более короткие коды. Как это закодировать? Как правило, для узла дерева Хаффмана (кроме корневого узла) можно договориться, что кодировка левого поддерева равна 0, а кодировка правого поддерева равна 1. Как показано на рисунке выше, кодировка c можно получить как 00.
В word2vec метод кодирования противоположен приведенному выше примеру, то есть кодировка левого поддерева равна 1, кодировка правого поддерева равна 0, а вес левого поддерева не меньше веса правое поддерево.
Мы продолжим говорить о преимуществах использования деревьев Хаффмана по сравнению с языковыми моделями DNN и о том, как обучать модели CBOW и Skip-Gram в Hierarchical Softmax в следующем разделе.