【Graph Embedding】GloVe:如何從大規模語料中快速訓練詞向量

1. Introduction

今天學的論文是斯坦福大學 2014 年的工作《GloVe: Global Vectors for Word Representation》,在當時有兩種主流的 Word Embedding 方式,一種是 LSA,創建詞頻矩陣,利用 SVD 分解得到詞向量;另一種是 13 年提出的 Word2Vec,基於滑動窗口的淺層神經網絡。前者的優點是利用了全局的統計信息(共現矩陣),後者的優點是計算簡單且效果好 = =,但缺點是沒利用全局的統計信息。所以這篇論文的主要工作是想綜合兩者的優點。

在看論文前我們不妨來思考一下,如果你是研究員,現在有這樣的想法(綜合全局信息和局部信息),你該如何去實現?

2. GloVe Model

2.1 Weighted Least Squares

我們先來給些定義,另 X 爲詞與詞的共現矩陣,XijX_{ij} 表示單詞 j 出現在單詞 i 上下文中的次數。於是我們有單詞 j 出現在單詞 i 上下文的共現概率:
Pij=P(ji)=XijXi P_{ij} = P(j|i) = \frac{X_{ij}}{X_i} \\
我們觀察下表的共現概率,只看第一行第二行我們能看出 ice 和 stream 與 solid gas water fashion 等詞的相關性嗎?答案是否定的,但如果我們使用比值 P(kice)P(ksteam)\frac{P(k|ice)}{P(k|steam)} 就可以很直觀的看到其相關性:

  • 當 k = solid 時,其值爲 8.9,則表明,ice 與 solid 更相關;
  • 當 k = gas 時,其值爲 8.5×1028.5 \times 10^{-2} ,所以 steam 與 gas 更相關;
  • 當值爲 1 左右時,表明 ice 和 steam 與目標單詞 k 都相關或者都不相關。

Co-occurrence Probabilities

從上面的表述中我們看出,比值更能反映相關性,而不是共現單詞概率。所以我們有:
F(wi,wj,w~k)=PikPjk F(w_i,w_j,\widetilde w_k) = \frac{P_{ik}}{P_{jk}} \\
其中,wiw_i 表示單詞 i 的詞向量,w~k\widetilde w_k 是獨立的上下文向量將在後面進行介紹,F 可以視爲一種映射或是一種運算。

我們再來看下上面的等式,一個很直觀的感覺就是 F 可能取值很廣。不過不要緊,我們現在給它加些約束。由於向量空間是線形的,所以可以使用向量差:
F(wiwj,w~k)=PikPjk F(w_i-w_j,\widetilde w_k) = \frac{P_{ik}}{P_{jk}} \\
爲了保證混合向量的維度不變,我們再做個點乘:
F((wiwj)Tw~k)=PikPjk F\big((w_i-w_j)^T\widetilde w_k \big) = \frac{P_{ik}}{P_{jk}} \\
實際中,單詞和共現單詞是可以可交換的,現在的等式不滿足交換律。

爲了保證交換律,我們先讓 F 保證爲羣 (R,+)(R,+) 到羣 (R>0,×)(R_{>0}, \times) 的羣同態:
F((wiwj)Tw~k)=F(wiTw~kwjTw~k)=F(wiTw~k)F(wkTw~k) F\big((w_i-w_j)^T \widetilde w_k\big) = F\big(w_i^T \widetilde w_k-w_j^T \widetilde w_k\big) = \frac{F(w_i^T \widetilde w_k)}{F(w_k^T \widetilde w_k)} \\

羣同態:設 (M,)(M,*)(S,)(S,·) 是兩個羣,σ:MSa,bM\sigma:M→S,∀a,b∈M,有 σ(ab)=σ(a)σ(b)\sigma(a*b)=\sigma(a)·\sigma(b),則稱 σ\sigma 爲 M 到 S 的同態或羣映射。

所以我們有:
F(wiTw~k)=Pik=XikXi F(w_i^T \widetilde w_k) = P_{ik} = \frac{X_{ik}}{X_i} \\
從加減到乘除的運算最容易想到的是指數運算,所以 F=expF = exp
wiTw~k=log(Pik)=log(Xik)log(Xi) w_i^T \widetilde w_k = log(P_{ik}) = log(X_{ik}) -log(X_{i}) \\
但是有 log(Xi)log(X_i) 存在依然沒法符合交換律,又由於其與 k 無關,所以可以將其視爲一個常數 bib_i
wiTw~k=log(Xik)bi w_i^T \widetilde w_k = log(X_{ik}) - b_i \\
現在還不滿足,不過已經很快了,我們在額外的添加一個偏執項 b~k\widetilde b_k
wiTw~k+bi+b~k=log(Xik) w_i^T \widetilde w_k + b_i + \widetilde b_k= log(X_{ik}) \\
好了,現在的等式是對原始等式的一個極端簡化。但這個等式還有一個問題:當 Xik=0X_{ik}=0 時怎麼辦?所以在實際的算法中我們會加一個偏執:log(Xik)log(1+Xik)log(X_{ik}) \rightarrow log(1+X_{ik}) ,這樣即保證了稀疏性,又不至於導致發散。

以上想法看似天馬行空,其實一部分想法是與 LSA 密切相關的(參考 SVD 的變種)。我們 LSA 所有的共現都是等價的, 即使共現次數非常小。然而很多非常小的共現可能是源於噪聲,其攜帶的信息非常少,所以我們引入加權最小二乘法來約束一下噪聲:
J=i,j=1Vf(Xij)(wiTw~k+bi+b~klogXik) J = \sum_{i,j=1}^V f(X_{ij})(w_i^T \widetilde w_k + b_i + \widetilde b_k -logX_{ik}) \\
其中,權重應該遵循以下原則:

  1. f(0)=0f(0)=0,保證了代價函數 J 在 0 點的連續性;
  2. f(x)f(x) 應該非遞減的,這個很好理解,共現越多,權值越大;
  3. 對於較大的 x ,f(x)f(x) 不能太大;

這樣的函數有很多,我們自己設計一個:
f(x)={(x/xmax)αif  x<xmax1otherwise f(x) = \left\{ \begin{aligned} (x/x_{max})^{\alpha} &\quad if \; x < x_{max} \\ 1 &\quad otherwise \end{aligned} \right. \\
這裏的 α\alpha 爲經驗參數,可以取 1 或者 3/4,我們這裏取 3/4(是不是想起了什麼?提示一下:Word2Vec 中 Negative Sampling )。下圖爲 α=3/4\alpha = 3/4 的函數的可視化:

Weight Function f

2.2 Relationship to Word2Vec

目前所有的 Word Embedding 的無監督方法最終都是基於語料庫的,只是某些方法不是特別明顯,如 Word2Vec,本節將說明我們定義的模型與現有模型的一些關係。

我們先來給出 Skip-Gram 的預測概率:
Qij=exp(wiTw~j)k=1Vexp(wiTw~k Q_{ij} = \frac{exp(w_i^T \widetilde w_j)}{\sum_{k=1}^Vexp(w_i^T \widetilde w_k)} \\
全局交叉熵代價函數爲:
J=isorpusjcontext(i)log Qij J=-\sum_{i \in sorpus}\sum_{ j\in context(i)} log \ Q_{ij}
計算代價昂貴,Skip-Gram 給出會採用近似解。

由於相同單詞 i 和 j 可以在語料庫中出現多次,所以將相同值的 i 和 j 放在一起:
J=i=1Vj=1VXijlog Qij J= -\sum_{i=1}^V \sum_{j=1}^V X_{ij} log\ Q_{ij} \\
由於 Pij=Xij/XiP_{ij} = X_{ij}/X_i ,所以:
J=i=1VXij=1VPijlog Qij=i=1VXiH(Pi,Qi) J= -\sum_{i=1}^V X_i \sum_{j=1}^{V} P_{ij} log\ Q_{ij} = \sum_{i=1}^V X_i H(P_i,Q_i) \\
其中,H(Pi,Qi)H(P_i, Q_i) 爲分佈 PiP_iQiQ_i 的交叉熵。J 可以視爲交叉上誤差的加權和。

交叉熵損失的一個重要缺點是需要對分佈 Q 進行歸一化,代價昂貴,所以我們使用最小二乘法來代替交叉熵:
J^=i,jXi(P^ijQ^ij)2 \hat J= \sum_{i,j} X_i (\hat P_{ij}-\hat Q_{ij})^2 \\
其中,$\hat P_{ij} = X_{ij},\ \hat Q_{ij} = exp(w_i^T\hat w_j) $ 都是非正態分佈,捨棄原來的歸一化因子。

但這個式子引入了一個新的問題:XijX_{ij} 通常取值很大。一個有效的方式是取 log:
J^=i,jXi(log P^ijlog Q^ij)2=i,jXi(wiTw~jlog wij)2 \hat J= \sum_{i,j} X_i (log\ \hat P_{ij} -log \ \hat Q_{ij})^2 \\ = \sum_{i,j} X_i (w_i^T \widetilde w_j -log \ w_{ij})^2 \\
當然 Mikolov 等人也採用了 Sub-Sampling 來減少高頻單詞的權重,所以我們有:
J^=i,jf(xij)(wiTw~jlog wij)2 \hat J = \sum_{i,j} f(x_{ij}) (w_i^T \widetilde w_j -log \ w_{ij})^2 \\
至此就完成了公式推導,可以看到其實這和我們給出的 GloVe 的代價函數基本是一致的。

3. Experiments

然後我們來看下與其他模型的對比實驗部分:

Experiments_1

Experiment

Experiments

還有參數敏感性的實驗:

Experiments

細心的同學可以看到這裏有一個 Window Size 的參數,這個是用來統計共現矩陣的。

至此,我們的論文就結束了。但我看完這篇論文還有一個非常大的疑惑:GloVe 是怎麼訓練的呢?

4. Training

我覺得出現這個疑惑一個很大的原因在於,我一直以爲 GloVe 是在 Skip-Gram 架構的基礎上添加語料庫的全局信息,所以也沒有太明白爲什麼論文要證明 Word2Vec 的代價函數與 GloVe 的代價函數相似。

但其實 GloVe 與 LSA 更相關,我們來看下 GloVe 推導的公式:
wiTw~k+bi+b~k=log(Xik) w_i^T \widetilde w_k + b_i + \widetilde b_k= log(X_{ik}) \\
是不是和帶有偏置的 SVD 的數學表達式很像:
k=1Fpukqki+μ+bu+bi=r^ui \sum_{k=1}^{F}{p_{uk}q_{ki}} + \mu + b_u + b_i = \hat{r}_{ui} \\
這樣一看應該就明白了,GloVe 的訓練方式其實和 SVD 類似。而推導 Skip-Gram 的代價函數其實是爲了證明其代價函數與 GloVe 設計的代價函數是有關的。所以 Glove 更像是擁有 LSA 的優點,並加入 Skip-Gram 的優點,而不是反過來的。

下面簡要給出 GloVe 的訓練過程:

  1. 首先,預統計 GloVe 的共現矩陣;
  2. 接着,隨機初始化兩個矩陣:W 和 W~\widetilde W ,大小爲 (V,n)(|V|, n),還有兩個偏置向量:B 和 B~\widetilde B 大小爲 (V,1)(|V|,1)
  3. 然後,計算 GloVe 的損失函數,並通過 Adagrad 來更新參數,參數包括兩個矩陣和兩個偏置向量;
  4. 最後,重複第三步知道達到停止條件後結束訓練。

我們最終得到的詞向量爲 W 和 W~\widetilde W,類似於 Skip-Gram 裏面的輸入矩陣和輸出矩陣。

那麼問題來了:爲什麼不用一個矩陣和一個偏置項呢?這樣計算量還可以減少一半,何樂不爲?

歡迎大家在留言區討論留言。

我們再簡單分析一下 GloVe 的時間複雜度,從上面的實驗結果來看 GloVe 的速度是非常快的,其原因主要有以下幾點:

  1. 時間複雜度低,最差爲 O© ,即統計一遍語料庫的共現矩陣,具體推導看論文;
  2. 參數稀疏,可以用異步梯度下降算法進行優化;
  3. 關注全局信息,收斂速度快。

5. Conclusion

至此,我們便結束了 GloVe 的介紹,用一句話總結便是:GloVe 使用具有全局信息的共現矩陣,並採用類似矩陣分解的方式求解詞向量,通過修改代價函數將 Word2Vec 關注局部特徵的優點加入進來,並取得了良好的效果。

我們嘗試着將 GloVe 與 Word2Vec 進行對比:

  1. Word2Vec 有神經網絡,GloVe 沒有;
  2. Word2Vec 關注了局部信息,GloVe 關注局部信息和全局信息;
  3. 都有滑動窗口但 Word2Vec 是用來訓練的,GloVe 是用來統計共現矩陣的;
  4. GloVe 的結構比 Word2Vec 還要簡單,所以速度更快;
  5. Word2Vec 是無監督學習,而 GloVe 可是視爲有監督的,其 Label 爲 log Xijlog\ X_{ij}

再試着將 GLoVe 與 SVD 進行對比:

  1. SVD 所有單詞統計權重一致,GloVe 對此進行了優化;
  2. GloVe 使用比值而沒有直接使用共現矩陣。

當然 GloVe 看着那麼好,其實並不一定,在很多任務中都沒 Word2Vec 的效果好。

畢竟沒有最好的模型,只有最適合的模型。

6. Reference

  1. 《GloVe: Global Vectors for Word Representation》

關注公衆號跟蹤最新內容:阿澤的學習筆記

阿澤的學習筆記

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章