15.5. Эмбеддинг слов с помощью глобальных векторов (GloVe)¶
Совместные появления слов в контекстных окнах могут нести богатую семантическую информацию. Например, в большом корпусе слово «solid» чаще встречается вместе со словом «ice», чем со словом «steam», тогда как слово «gas», вероятно, чаще встречается вместе со словом «steam», чем со словом «ice». Кроме того, глобальную статистику таких совместных появлений можно предварительно вычислить: это может привести к более эффективному обучению. Чтобы использовать статистическую информацию всего корпуса для создания эмбеддингов слов, давайте сначала вернёмся к модели skip-gram в Section 15.1.3, но интерпретировать её будем с использованием глобальной статистики корпуса, такой как счётчики совместных появлений.
15.5.1. Skip-Gram с глобальной статистикой корпуса¶
Обозначая через \(q_{ij}\) условную вероятность \(P(w_j\mid w_i)\) слова \(w_j\) при условии слова \(w_i\) в модели skip-gram, получаем
где для любого индекса \(i\) векторы \(\mathbf{v}_i\) и \(\mathbf{u}_i\) представляют слово \(w_i\) как центральное слово и слово контекста соответственно, а \(\mathcal{V} = \{0, 1, \ldots, |\mathcal{V}|-1\}\) — это множество индексов словаря.
Рассмотрим слово \(w_i\), которое может встречаться в корпусе несколько раз. Во всём корпусе все слова контекста, для которых слово \(w_i\) выступает в качестве центрального, образуют мультимножество \(\mathcal{C}_i\) индексов слов, допускающее повторение одних и тех же элементов. Для любого элемента его количество вхождений называется его кратностью. Для иллюстрации рассмотрим пример: предположим, что слово \(w_i\) встречается в корпусе дважды, а индексы слов контекста, для которых слово \(w_i\) является центральным в двух окнах контекста, равны \(k, j, m, k\) и \(k, l, k, j\). Таким образом, мультимножество имеет вид \(\mathcal{C}_i = \{j, j, k, k, k, k, l, m\}\), где кратности элементов \(j, k, l, m\) равны 2, 4, 1 и 1 соответственно.
Теперь обозначим кратность элемента \(j\) в мультимножестве \(\mathcal{C}_i\) как \(x_{ij}\). Это глобальная частота совместного появления слова \(w_j\) (в качестве контекстного слова) и слова \(w_i\) (в качестве центрального слова) в одном контекстном окне во всём корпусе. Используя такие глобальные статистические данные корпуса, функция потерь модели skip-gram эквивалентна
Далее обозначим через \(x_i\) общее количество слов контекста в окнах, где \(w_i\) выступает центральным словом, что эквивалентно \(|\mathcal{C}_i|\). Обозначив через \(p_{ij}\) условную вероятность \(x_{ij}/x_i\) появления слова контекста \(w_j\) при заданном центральном слове \(w_i\), выражение (15.5.2) можно переписать как
В (15.5.3), \(-\sum_{j\in\mathcal{V}} p_{ij} \log\,q_{ij}\) вычисляет перекрёстную энтропию между условным распределением \(p_{ij}\) глобальной статистики корпуса и условным распределением \(q_{ij}\) предсказаний модели. Эта функция потерь также взвешивается с помощью \(x_i\), как объяснялось выше. Минимизация функции потерь в (15.5.3) позволит предсказанному условному распределению приблизиться к условному распределению, полученному из глобальной статистики корпуса.
Хотя функция перекрёстной энтропии широко используется для измерения расстояния между распределениями вероятностей, она может оказаться не лучшим выбором в данном случае. С одной стороны, как мы упоминали в Section 15.2, стоимость корректной нормировки \(q_{ij}\) приводит к суммированию по всему словарю, что может быть вычислительно затратно. С другой стороны, большое количество редких событий из большого корпуса часто моделируется с помощью функции перекрёстной энтропии таким образом, что им присваивается слишком большой вес.
15.5.2. Модель GloVe¶
С учётом этого модель GloVe вносит три изменения в модель skip-gram с квадратичной функцией потерь (Pennington et al., 2014):
Используем переменные \(p'_{ij}=x_{ij}\) и \(q'_{ij}=\exp(\mathbf{u}_j^\top \mathbf{v}_i)\), которые не являются распределениями вероятностей, и берём логарифм от обеих, чтобы член квадратичной функции потерь принял вид \(\left(\log\,p'_{ij} - \log\,q'_{ij}\right)^2 = \left(\mathbf{u}_j^\top \mathbf{v}_i - \log\,x_{ij}\right)^2\).
Добавим по два скалярных параметра модели для каждого слова \(w_i\): смещение центрального слова \(b_i\) и смещение слова контекста \(c_i\).
Замените вес каждого слагаемого функции потерь на функцию веса \(h(x_{ij})\), где \(h(x)\) возрастает на интервале \([0, 1]\).
Объединяя всё вместе, обучение GloVe заключается в минимизации следующей функции потерь:
Для функции весов предлагается выбрать: \(h(x) = (x/c) ^\alpha\) (например, \(\alpha = 0.75\)), если \(x < c\) (например, \(c = 100\)); в противном случае \(h(x) = 1\). В этом случае, поскольку \(h(0)=0\), квадратичный член функции потерь для любого \(x_{ij}=0\) можно опустить для повышения вычислительной эффективности. Например, при использовании стохастического градиентного спуска для обучения на каждой итерации мы случайным образом выбираем мини-батч ненулевых \(x_{ij}\) для вычисления градиентов и обновления параметров модели. Обратите внимание, что эти ненулевые \(x_{ij}\) являются предварительно вычисленными глобальными статистиками корпуса; поэтому модель называется GloVe (Global Vectors — глобальные векторы).
Следует подчеркнуть, что если слово \(w_i\) встречается в контекстном окне слова \(w_j\), то верно и обратное. Следовательно, \(x_{ij}=x_{ji}\). В отличие от word2vec, который аппроксимирует асимметричную условную вероятность \(p_{ij}\), GloVe аппроксимирует симметричную вероятность \(\log \, x_{ij}\). Поэтому в модели GloVe центральный вектор слова и вектор контекстного слова для любого слова математически эквивалентны. Однако на практике из-за разных начальных значений одно и то же слово может после обучения иметь различные значения в этих двух векторах: GloVe суммирует их, образуя итоговый вектор.
15.5.3. Интерпретация GloVe через отношение вероятностей со-встречаемости¶
Мы можем также интерпретировать модель GloVe с другой точки зрения.
Используя те же обозначения, что и в Section 15.5.1,
пусть \(p_{ij} \stackrel{\textrm{def}}{=} P(w_j \mid w_i)\) будет
условной вероятностью появления слова контекста \(w_j\) при условии,
что \(w_i\) является центральным словом в корпусе.
tab_glove приводит несколько вероятностей со-встречаемости
для слов «ice» и «steam», а также их отношения, основанные на статистике
большого корпуса.
Вероятности совместного появления слов и их отношения в большом корпусе (адаптировано из таблицы 1 в Pennington et al. (2014))
\(w_k\)= |
сплошной |
газ |
Вода |
мода |
|---|---|---|---|---|
\(p_1=P(w_k\mid \textrm{ice})\) |
0.00019 |
0.000066 |
0.003 |
0.000017 |
\(p_2=P(w_k\mid\textrm{steam})\) |
0.000022 |
0.00078 |
0.0022 |
0.000018 |
\(p_1/p_2\) |
8.9 |
0.085 |
1.36 |
0.96 |
Из tab_glove следует следующее:
Для слова \(w_k\), связанного со словом «ice», но не связанного со словом «steam», например \(w_k=\textrm{solid}\), мы ожидаем большее отношение вероятностей совместного появления, например 8,9.
Для слова \(w_k\), связанного с «паром», но не связанного со «льдом», например \(w_k=\textrm{gas}\), мы ожидаем меньшее отношение вероятностей со-встречаемости, например 0,085.
Для слова \(w_k\), которое связано как с «льдом», так и с «паром», например, \(w_k=\textrm{water}\), мы ожидаем, что отношение вероятностей сосуществования будет близко к 1, например, 1.36.
Для слова \(w_k\), не связанного ни со словом «ice», ни со словом «steam», например \(w_k=\textrm{fashion}\), мы ожидаем, что отношение вероятностей со-встречаемости будет близко к 1, например, 0,96.
Как видно, отношение вероятностей со-встречаемости может интуитивно выражать связь между словами. Таким образом, мы можем сконструировать функцию от трёх векторов слов, которая аппроксимирует это отношение. Для отношения вероятностей со-встречаемости \({p_{ij}}/{p_{ik}}\), где \(w_i\) — центральное слово, а \(w_j\) и \(w_k\) — слова контекста, мы хотим аппроксимировать это отношение с помощью некоторой функции \(f\):
Среди множества возможных вариантов реализации \(f\) мы выберем лишь один разумный. Поскольку отношение вероятностей совместного появления является скаляром, мы требуем, чтобы \(f\) было скалярной функцией, например, \(f(\mathbf{u}_j, \mathbf{u}_k, {\mathbf{v}}_i) = f\left((\mathbf{u}_j - \mathbf{u}_k)^\top {\mathbf{v}}_i\right)\). При замене индексов слов \(j\) и \(k\) в (15.5.5) должно выполняться условие \(f(x)f(-x)=1\), поэтому одним из возможных вариантов является \(f(x)=\exp(x)\), то есть
Теперь выберем \(\exp\left(\mathbf{u}_j^\top {\mathbf{v}}_i\right) \approx \alpha p_{ij}\), где \(\alpha\) — константа. Поскольку \(p_{ij}=x_{ij}/x_i\), после логарифмирования обеих частей получаем \(\mathbf{u}_j^\top {\mathbf{v}}_i \approx \log\,\alpha + \log\,x_{ij} - \log\,x_i\). Мы можем использовать дополнительные члены смещения для аппроксимации \(- \log\, \alpha + \log\, x_i\), например, смещение центрального слова \(b_i\) и смещение слова контекста \(c_j\):
Измеряя квадратичную ошибку (15.5.7) с помощью весов, получают функцию потерь GloVe, представленную в (15.5.4).
15.5.4. Резюме¶
Модель skip-gram можно интерпретировать с помощью глобальной статистики корпуса, такой как подсчёт совместного появления слов.
Перекрёстная энтропия может оказаться не лучшим выбором для измерения различий между двумя распределениями вероятностей, особенно при работе с большим корпусом. GloVe использует квадратичную функцию потерь для подгонки предварительно вычисленных глобальных статистических характеристик корпуса.
Вектор центрального слова и вектор контекстного слова математически эквивалентны для любого слова в GloVe.
GloVe можно интерпретировать через отношение вероятностей совместного появления слов.
15.5.5. Упражнения¶
Если слова \(w_i\) и \(w_j\) встречаются в одном контекстном окне, как можно использовать расстояние между ними в текстовой последовательности для переработки метода вычисления условной вероятности \(p_{ij}\)? Подсказка: см. раздел 4.2 статьи GloVe (Pennington et al., 2014).
Для любого слова математически эквивалентны ли в GloVe смещение центрального слова и смещение контекстного слова? Почему?