# 10.5 全局向量的詞嵌入(GloVe)
讓我們先回顧一下word2vec中的跳字模型。將跳字模型中使用softmax運算表達的條件概率`$ P(w_j\mid w_i) $`記作`$ q_{ij} $`,即
```[tex]
q_{ij}=\frac{\exp(\boldsymbol{u}_j^\top \boldsymbol{v}_i)}{ \sum_{k \in \mathcal{V}} \text{exp}(\boldsymbol{u}_k^\top \boldsymbol{v}_i)},
```
其中`$ \boldsymbol{v}_i $`和`$ \boldsymbol{u}_i $`分別是索引為`$ i $`的詞`$ w_i $`作為中心詞和背景詞時的向量表示,`$ \mathcal{V} = \{0, 1, \ldots, |\mathcal{V}|-1\} $`為詞典索引集。
對于詞`$ w_i $`,它在數據集中可能多次出現。我們將每一次以它作為中心詞的所有背景詞全部匯總并保留重復元素,記作多重集(multiset)`$ \mathcal{C}_i $`。一個元素在多重集中的個數稱為該元素的重數(multiplicity)。舉例來說,假設詞`$ w_i $`在數據集中出現2次:文本序列中以這2個`$ w_i $`作為中心詞的背景窗口分別包含背景詞索引`$ 2,1,5,2 $`和`$ 2,3,2,1 $`。那么多重集`$ \mathcal{C}_i = \{1,1,2,2,2,2,3,5\} $`,其中元素1的重數為2,元素2的重數為4,元素3和5的重數均為1。將多重集`$ \mathcal{C}_i $` 中元素`$ j $`的重數記作`$ x_{ij} $`:它表示了整個數據集中所有以`$ w_i $`為中心詞的背景窗口中詞`$ w_j $`的個數。那么,跳字模型的損失函數還可以用另一種方式表達:
```[tex]
-\sum_{i\in\mathcal{V}}\sum_{j\in\mathcal{V}} x_{ij} \log\,q_{ij}.
```
我們將數據集中所有以詞`$ w_i $`為中心詞的背景詞的數量之和`$ \left|\mathcal{C}_i\right| $`記為`$ x_i $`,并將以`$ w_i $`為中心詞生成背景詞`$ w_j $`的條件概率`$ x_{ij}/x_i $`記作`$ p_{ij} $`。我們可以進一步改寫跳字模型的損失函數為
```[tex]
-\sum_{i\in\mathcal{V}} x_i \sum_{j\in\mathcal{V}} p_{ij} \log\,q_{ij}.
```
上式中,`$ -\sum_{j\in\mathcal{V}} p_{ij} \log\,q_{ij} $`計算的是以`$ w_i $`為中心詞的背景詞條件概率分布`$ p_{ij} $`和模型預測的條件概率分布`$ q_{ij} $`的交叉熵,且損失函數使用所有以詞`$ w_i $`為中心詞的背景詞的數量之和來加權。最小化上式中的損失函數會令預測的條件概率分布盡可能接近真實的條件概率分布。
然而,作為常用損失函數的一種,交叉熵損失函數有時并不是好的選擇。一方面,正如我們在10.2節(近似訓練)中所提到的,令模型預測`$ q_{ij} $`成為合法概率分布的代價是它在分母中基于整個詞典的累加項。這很容易帶來過大的計算開銷。另一方面,詞典中往往有大量生僻詞,它們在數據集中出現的次數極少。而有關大量生僻詞的條件概率分布在交叉熵損失函數中的最終預測往往并不準確。
## 10.5.1 GloVe模型
鑒于此,作為在word2vec之后提出的詞嵌入模型,GloVe模型采用了平方損失,并基于該損失對跳字模型做了3點改動 [1]:
1. 使用非概率分布的變量`$ p'_{ij}=x_{ij} $`和`$ q'_{ij}=\exp(\boldsymbol{u}_j^\top \boldsymbol{v}_i) $`,并對它們取對數。因此,平方損失項是`$ \left(\log\,p'_{ij} - \log\,q'_{ij}\right)^2 = \left(\boldsymbol{u}_j^\top \boldsymbol{v}_i - \log\,x_{ij}\right)^2 $`。
2. 為每個詞`$ w_i $`增加兩個為標量的模型參數:中心詞偏差項`$ b_i $`和背景詞偏差項`$ c_i $`。
3. 將每個損失項的權重替換成函數`$ h(x_{ij}) $` 。權重函數`$ h(x) $`是值域在`$ [0,1] $`的單調遞增函數。
如此一來,GloVe模型的目標是最小化損失函數
```[tex]
\sum_{i\in\mathcal{V}} \sum_{j\in\mathcal{V}} h(x_{ij}) \left(\boldsymbol{u}_j^\top \boldsymbol{v}_i + b_i + c_j - \log\,x_{ij}\right)^2.
```
其中權重函數`$ h(x) $`的一個建議選擇是:當`$ x < c $`時(如`$ c = 100 $`),令`$ h(x) = (x/c)^\alpha $`(如`$ \alpha = 0.75 $`),反之令`$ h(x) = 1 $`。因為`$ h(0)=0 $`,所以對于`$ x_{ij}=0 $`的平方損失項可以直接忽略。當使用小批量隨機梯度下降來訓練時,每個時間步我們隨機采樣小批量非零`$ x_{ij} $`,然后計算梯度來迭代模型參數。這些非零`$ x_{ij} $`是預先基于整個數據集計算得到的,包含了數據集的全局統計信息。因此,GloVe模型的命名取“全局向量”(Global Vectors)之意。
需要強調的是,如果詞`$ w_i $`出現在詞`$ w_j $`的背景窗口里,那么詞`$ w_j $`也會出現在詞`$ w_i $`的背景窗口里。也就是說,`$ x_{ij}=x_{ji} $`。不同于word2vec中擬合的是非對稱的條件概率`$ p_{ij} $`,GloVe模型擬合的是對稱的`$ \log\, x_{ij} $`。因此,任意詞的中心詞向量和背景詞向量在GloVe模型中是等價的。但由于初始化值的不同,同一個詞最終學習到的兩組詞向量可能不同。當學習得到所有詞向量以后,GloVe模型使用中心詞向量與背景詞向量之和作為該詞的最終詞向量。
## 10.5.2 從條件概率比值理解GloVe模型
我們還可以從另外一個角度來理解GloVe模型。沿用本節前面的符號,`$ P(w_j \mid w_i) $`表示數據集中以`$ w_i $`為中心詞生成背景詞`$ w_j $`的條件概率,并記作`$ p_{ij} $`。作為源于某大型語料庫的真實例子,以下列舉了兩組分別以“ice”(冰)和“steam”(蒸汽)為中心詞的條件概率以及它們之間的比值 [1]:
|`$ w_k $`=|“solid”|“gas”|“water”|“fashion”|
|--:|:-:|:-:|:-:|:-:|
|`$ p_1=P(w_k\mid $` “ice” `$ ) $` |0.00019|0.000066|0.003|0.000017|
|`$ p_2=P(w_k\mid $` “steam” `$ ) $`|0.000022|0.00078|0.0022|0.000018|
|`$ p_1/p_2 $`|8.9|0.085|1.36|0.96|
我們可以觀察到以下現象。
* 對于與“ice”相關而與“steam”不相關的詞`$ w_k $` ,如`$ w_k= $`“solid”(固體),我們期望條件概率比值較大,如上表最后一行中的值8.9;
* 對于與“ice”不相關而與“steam”相關的詞`$ w_k $`,如`$ w_k= $`“gas”(氣體),我們期望條件概率比值較小,如上表最后一行中的值0.085;
* 對于與“ice”和“steam”都相關的詞`$ w_k $`,如`$ w_k= $` “water”(水),我們期望條件概率比值接近1,如上表最后一行中的值1.36;
* 對于與“ice”和“steam”都不相關的詞`$ w_k $`,如`$ w_k= $`“fashion”(時尚),我們期望條件概率比值接近1,如上表最后一行中的值0.96。
由此可見,條件概率比值能比較直觀地表達詞與詞之間的關系。我們可以構造一個詞向量函數使它能有效擬合條件概率比值。我們知道,任意一個這樣的比值需要3個詞`$ w_i $`、`$ w_j $`和`$ w_k $`。以`$ w_i $`作為中心詞的條件概率比值為`$ {p_{ij}}/{p_{ik}} $`。我們可以找一個函數,它使用詞向量來擬合這個條件概率比值
```[tex]
f(\boldsymbol{u}_j, \boldsymbol{u}_k, {\boldsymbol{v}}_i) \approx \frac{p_{ij}}{p_{ik}}.
```
這里函數`$ f $`可能的設計并不唯一,我們只需考慮一種較為合理的可能性。注意到條件概率比值是一個標量,我們可以將`$ f $`限制為一個標量函數: `$ f(\boldsymbol{u}_j, \boldsymbol{u}_k, {\boldsymbol{v}}_i) = f\left((\boldsymbol{u}_j - \boldsymbol{u}_k)^\top {\boldsymbol{v}}_i\right) $`。交換索引`$ j $`和`$ k $`后可以看到函數`$ f $`應該滿足`$ f(x)f(-x)=1 $`,因此一種可能是`$ f(x)=\exp(x) $`,于是
```[tex]
f
(\boldsymbol{u}_j, \boldsymbol{u}_k, {\boldsymbol{v}}_i) = \frac{\exp\left(\boldsymbol{u}_j^\top {\boldsymbol{v}}_i\right)}{\exp\left(\boldsymbol{u}_k^\top {\boldsymbol{v}}_i\right)} \approx \frac{p_{ij}}{p_{ik}}.
```
滿足最右邊約等號的一種可能是`$ \exp\left(\boldsymbol{u}_j^\top {\boldsymbol{v}}_i\right) \approx \alpha p_{ij} $`,這里`$ \alpha $`是一個常數。考慮到`$ p_{ij}=x_{ij}/x_i $`,取對數后`$ \boldsymbol{u}_j^\top {\boldsymbol{v}}_i \approx \log\,\alpha + \log\,x_{ij} - \log\,x_i $`。我們使用額外的偏差項來擬合`$ - \log\,\alpha + \log\,x_i $`,例如,中心詞偏差項`$ b_i $`和背景詞偏差項`$ c_j $`:
```[tex]
\boldsymbol{u}_j^\top \boldsymbol{v}_i + b_i + c_j \approx \log(x_{ij}).
```
對上式左右兩邊取平方誤差并加權,我們可以得到GloVe模型的損失函數。
## 小結
* 在有些情況下,交叉熵損失函數有劣勢。GloVe模型采用了平方損失,并通過詞向量擬合預先基于整個數據集計算得到的全局統計信息。
* 任意詞的中心詞向量和背景詞向量在GloVe模型中是等價的。
## 參考文獻
[1] Pennington, J., Socher, R., & Manning, C. (2014). Glove: Global vectors for word representation. In Proceedings of the 2014 conference on empirical methods in natural language processing (EMNLP) (pp. 1532-1543).
-----------
> 注:本節與原書完全相同,[原書傳送門](https://zh.d2l.ai/chapter_natural-language-processing/glove.html)
- Home
- Introduce
- 1.深度學習簡介
- 深度學習簡介
- 2.預備知識
- 2.1環境配置
- 2.2數據操作
- 2.3自動求梯度
- 3.深度學習基礎
- 3.1 線性回歸
- 3.2 線性回歸的從零開始實現
- 3.3 線性回歸的簡潔實現
- 3.4 softmax回歸
- 3.5 圖像分類數據集(Fashion-MINST)
- 3.6 softmax回歸的從零開始實現
- 3.7 softmax回歸的簡潔實現
- 3.8 多層感知機
- 3.9 多層感知機的從零開始實現
- 3.10 多層感知機的簡潔實現
- 3.11 模型選擇、反向傳播和計算圖
- 3.12 權重衰減
- 3.13 丟棄法
- 3.14 正向傳播、反向傳播和計算圖
- 3.15 數值穩定性和模型初始化
- 3.16 實戰kaggle比賽:房價預測
- 4 深度學習計算
- 4.1 模型構造
- 4.2 模型參數的訪問、初始化和共享
- 4.3 模型參數的延后初始化
- 4.4 自定義層
- 4.5 讀取和存儲
- 4.6 GPU計算
- 5 卷積神經網絡
- 5.1 二維卷積層
- 5.2 填充和步幅
- 5.3 多輸入通道和多輸出通道
- 5.4 池化層
- 5.5 卷積神經網絡(LeNet)
- 5.6 深度卷積神經網絡(AlexNet)
- 5.7 使用重復元素的網絡(VGG)
- 5.8 網絡中的網絡(NiN)
- 5.9 含并行連結的網絡(GoogLeNet)
- 5.10 批量歸一化
- 5.11 殘差網絡(ResNet)
- 5.12 稠密連接網絡(DenseNet)
- 6 循環神經網絡
- 6.1 語言模型
- 6.2 循環神經網絡
- 6.3 語言模型數據集(周杰倫專輯歌詞)
- 6.4 循環神經網絡的從零開始實現
- 6.5 循環神經網絡的簡單實現
- 6.6 通過時間反向傳播
- 6.7 門控循環單元(GRU)
- 6.8 長短期記憶(LSTM)
- 6.9 深度循環神經網絡
- 6.10 雙向循環神經網絡
- 7 優化算法
- 7.1 優化與深度學習
- 7.2 梯度下降和隨機梯度下降
- 7.3 小批量隨機梯度下降
- 7.4 動量法
- 7.5 AdaGrad算法
- 7.6 RMSProp算法
- 7.7 AdaDelta
- 7.8 Adam算法
- 8 計算性能
- 8.1 命令式和符號式混合編程
- 8.2 異步計算
- 8.3 自動并行計算
- 8.4 多GPU計算
- 9 計算機視覺
- 9.1 圖像增廣
- 9.2 微調
- 9.3 目標檢測和邊界框
- 9.4 錨框
- 10 自然語言處理
- 10.1 詞嵌入(word2vec)
- 10.2 近似訓練
- 10.3 word2vec實現
- 10.4 子詞嵌入(fastText)
- 10.5 全局向量的詞嵌入(Glove)
- 10.6 求近義詞和類比詞
- 10.7 文本情感分類:使用循環神經網絡
- 10.8 文本情感分類:使用卷積網絡
- 10.9 編碼器--解碼器(seq2seq)
- 10.10 束搜索
- 10.11 注意力機制
- 10.12 機器翻譯