Изменения

Перейти к: навигация, поиск

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

579 байт добавлено, 20:34, 7 февраля 2021
BERT
== One-hot encoding ==
[[Файл:One-hot-encoding.png|thumb|right|250px220px|Рисунок 1. Пример one-hot encoding для словаря из 9 слов. [https://www.shanelynn.ie/get-busy-with-word-embeddings-introduction/ Источник]]] Пусть число различных слов равно <math>K</math>. Сопоставим слову с номером <math>i</math> вектор длины <math>K</math>, в котором <math>i</math>-тая координата равна единице, а все остальные {{---}} нулям(рис. 1). Недостатком one-hot encoding является то, что по векторным представлениям нельзя судить о схожести смысла слов. Также вектора имеют очень большой размер, из-за чего их неэффективно хранить в памяти.          
== word2vec ==
[[Файл:Words-space.png|thumb|right|400px|Рисунок 2. Полученные векторы-слова отражают различные грамматические и семантические [https://towardsdatascience.com/word-embedding-with-word2vec-and-fasttext-a209c1d3e12c концепции].<br><math>W_{king} + (W_{woman} - W_{man}) = W_{queen}</math><br><math>W_{walked} - W_{walking} = W_{swam} - W_{swimming}</math>]]word2vec {{---}} способ построения сжатого пространства векторов слов, использующий нейронные сети. Принимает на вход большой текстовый корпус и сопоставляет каждому слову вектор. Сначала он создает словарь, а затем вычисляет векторное представление слов. Векторное представление основывается на контекстной близости: слова, встречающиеся в тексте рядом с одинаковыми словами (а следовательно, имеющие схожий смысл) (рис. 2), в векторном представлении имеют высокое ''косинусное сходство'' (англ. [https://en.wikipedia.org/wiki/Cosine_similarity cosine similarity]):
:<math>\text{similarity}(\mathbf{A}, \mathbf{B}) = \cos(\theta) = {\mathbf{A} \cdot \mathbf{B} \over \|\mathbf{A}\| \|\mathbf{B}\|} = \frac{ \sum\limits_{i=1}^{n}{A_i B_i} }{ \sqrt{\sum\limits_{i=1}^{n}{A_i^2}} \sqrt{\sum\limits_{i=1}^{n}{B_i^2}} },</math>
 В word2vec существуют две основных модели обучения: ''Skip-gram'' (рис. 3) и ''CBOW'' (англ. ''Continuous Bag of Words'') (рис. 4). В модели ''Skip-gram'' по слову предсказываются слова из его контекста, а в модели ''CBOW'' по контексту подбирается наиболее вероятное слово. На выходном слое используется функция <math>softmax</math> или его вариация, чтобы получить на выходе распределение вероятности каждого слова. В обеих моделях входные и выходные слова подаются в one-hot encoding, благодаря чему при умножении на матрицу <math>W</math>, соединяющую входной и скрытый слои, происходит выбор одной строки <math>W</math>. Размерность <math>N</math> является гиперпараметром алгоритма, а обученная матрица <math>W</math> {{---}} выходом, так как ее строки содержат векторные представления слов.
Для ускорения обучения моделей ''Skip-gram'' и CBOW используются модификации <math>softmax</math>, такие как иерархический <math>softmax</math> и ''negative sampling'', позволяющие вычислять распределение вероятностей быстрее, чем за линейное время от размера словаря.
{|align="center"
|-valign="top"
|[[Файл:skip-gram.png|270px|thumb|Рисунок 3. [http://www.claudiobellei.com/2018/01/06/backprop-word2vec/ Схема сети для модели Skip-gram]]] |[[Файл:cbow.png|260px|thumb|Рисунок 4. [http://www.claudiobellei.com/2018/01/06/backprop-word2vec/ Схема сети для модели CBOW]]] |[[Файл:Words-space.png|thumb|right|500px|Полученные векторы-слова отражают различные грамматические и семантические [https://towardsdatascience.com/word-embedding-with-word2vec-and-fasttext-a209c1d3e12c концепции].<br><math>W_{king} + (W_{woman} - W_{man}) = W_{queen}</math><br><math>W_{walked} - W_{walking} = W_{swam} - W_{swimming}</math>]]
|}
== ELMO ==
[[File:ElmoElmoExplain.pngjpg|500px600px|thumb|Рисунок 5. [https://www.topbots.com/generalized-language-models-cove-elmo/ Архитектура и принцип работы ELMO]]]<i>ELMO</i> {{--- }} это многослойная двунаправленная [[:Рекуррентные_нейронные_сети|рекуррентная нейронная сеть]] c [[:Долгая_краткосрочная_память|LSTM]](рис. 5).
При использовании word2vec или fastText не учитывается семантическая неоднозначность слов.
Так, word2vec назначает слову один вектор независимо от контекста.
<i>ELMO</i> решает эту проблему. В основе стоит идея использовать скрытые состояния языковой модели многослойной [[:Долгая_краткосрочная_память|LSTM]].
Было замечено, что нижние слои сети отвечают за синтаксис и грамматику, а верхние {{- --}} за смысл слов.
Пусть даны токены <math>t_{1}, ..., t_{N}</math>, на которые поделено предложение. Будем считать логарифм правдоподобия метки слова в обоих направлениях, учитывая контекст слева и контекст справа, то есть на основании данных от начала строки до текущего символа и данных от текущего символа и до конца строки.
Таким образом, модель предсказывает вероятность следующего токена с учетом истории.
Пусть есть <math>L</math> слоев сети. Входные и выходные данные будем представлять в виде векторов, кодируя слова. Тогда каждый результирующий вектор будем считать на основании множества:
<math>\left \{ {x_{k}^{LM}}, \overrightarrow{h_{k, j}^{LM}}, \overleftarrow{h_{k, j}^{LM}} | j = 1, ..., L \right \} = \left \{ h_{k, j}^{LM} | j = 1, ..., L \right \}</math>.
Здесь <math>x_{k}^{LM}</math> {{---}}, входящий токен, а <math>\overrightarrow{h_{k, j}^{LM}}</math> и <math>\overleftarrow{h_{k, j}^{LM}}</math> {{- --}} скрытые слои в одном и в другом направлении.
Тогда результат работы ELMO будет представлять из себя выражение:
<math>ELMO_{k}^{task} = \gamma^{taks}\sum_{j=0}^{L} s_{i}^{task}h_{k,j}^{LM}</math>.
Обучаемый общий масштабирующий коэффициент <math>\gamma^{task}</math> регулирует то, как могут отличаться друг от друга по норме векторные представления слов.
Коэффициенты <math>s_{i}^{task}</math> {{---}} это обучаемые параметры, нормализованные функцией <math>softMaxSoftmax</math>.
Модель применяют дообучая ее: изначально берут предобученную <i>ELMO</i>, а затем корректируют <math>\gamma</math> и <math>s_{i}</math> под конкретную задачу. Тогда вектор, который подается в используемую модель для обучения, будет представлять собой взвешенную сумму значений этого векторах на всех скрытых слоях <i>ELMO</i>.
На данный момент предобученную модель ELMO можно [https://tfhub.dev/google/elmo/3 загрузить] и использовать в языках языке программирования Python и C++.
== BERT ==
{{main|BertBERT (языковая модель)}}[[File:Bert.png|500px|thumb|Рисунок 6. [https://towardsdatascience.com/bert-why-its-been-revolutionizing-nlp-5d1bcae76a13 Архитектура BERT]]]<i>BERT</i> {{---}} это многослойный двунаправленный [[:Автокодировщик|кодировщик]] Transformer. В данной архитектуре (рис. 6) используется двунаправленное [[:Механизм внимания|самовнимание]](англ. self-attention).
Модель используется в совокупности с некоторым классификатором, на вход которого подается результат работы <i>BERT</i> {{---}} векторное представление входных данных.
В основе обучения модели лежат две идеи для обучения.
Первая заключается в том, чтобы заменить <math>15\%</math> слов масками и обучить сеть предсказывать эти слова.
Точно так же, как и в обычном трансформере, <i>BERT</i> принимает на вход последовательность слов, которая затем продвигается вверх по стеку энкодеров.
Каждый слой энкодера применяет внутреннее внимание (self-attention) самовнимание и передает результаты в сеть прямого распространения, после чего направляет его следующему энкодеру.
Для каждой позиции на выход подается вектор размерностью <math>hiddenSize</math> (<math>768</math> в базовой модели).
Этот вектор может быть использован как входной вектор для классификатора.
Bert поддерживается в качестве моделив языке Python, которую можно [https://github.com/google-research/bert загрузить, в языке Python].
== См. также ==
174
правки

Навигация