常見(jiàn)的詞嵌入算法有基于矩陣分解的方法和基于淺層窗口的方法,Glove 結(jié)合了這兩類方法的優(yōu)點(diǎn)生成詞向量。基于矩陣分解的方法可以有效地利用全局信息,但是在大數(shù)據(jù)集上速度慢;而基于淺層窗口的方法對(duì)于詞匯類比任務(wù)效果較好,訓(xùn)練速度快,但是不能有效利用全局信息。
1. 詞嵌入算法 Word Embedding
在上一篇文章《詞表征學(xué)習(xí)算法 — Word2Vec》中,主要介紹了詞嵌入算法 Word2Vec。與傳統(tǒng)的 one-hot 編碼、共現(xiàn)向量相比,詞嵌入算法得到的詞向量維度更低、也可以更好地支持一些下游的任務(wù),例如文檔分類,問(wèn)答系統(tǒng)等。
本文介紹另一種詞嵌入算法 Glove,首先簡(jiǎn)述目前主要的兩類詞嵌入算法的優(yōu)缺點(diǎn)。第一類是 Matrix Factorization (矩陣分解) 方法,例如 LSA;第二類是 Shallow Window-Based (基于淺層窗口) 方法,也稱為基于預(yù)測(cè)的方法,例如 Word2Vec。Glove 算法結(jié)合了基于統(tǒng)計(jì)和基于淺窗口兩種方法的優(yōu)點(diǎn)
1.1 矩陣分解
基于矩陣分解的 word embedding 算法是一種利用了全局統(tǒng)計(jì)信息的方法,首先需要在語(yǔ)料庫(kù)中構(gòu)造出單詞共現(xiàn)矩陣或者文檔 - 單詞矩陣。下面用一個(gè)簡(jiǎn)單的例子說(shuō)明,假設(shè)語(yǔ)料庫(kù)中包含以下三個(gè)文檔,則可以構(gòu)造出對(duì)應(yīng)的單詞共現(xiàn)矩陣或者文檔 - 單詞矩陣:
文檔 1:I have a cat
文檔 2:cat eat fish
文檔 3:I have a apple

在單詞共現(xiàn)矩陣中,單詞 “I” 和 單詞 “have” 在兩篇文檔中共同出現(xiàn),因此它們的連接權(quán)重為 2;在文檔 - 單詞矩陣中文檔 1 包含一個(gè)單詞 “I”,因此為 1。在實(shí)際構(gòu)造文檔 - 單詞矩陣時(shí)則可以使用 tf-idf 作為權(quán)重。
在得到單詞共現(xiàn)矩陣或者文檔 - 單詞矩陣后可以采用 LSA 算法學(xué)習(xí)得到詞向量,LSA 算法 (潛在語(yǔ)義分析) 主要用于文本話題分析,通過(guò)對(duì)文檔 - 單詞矩陣進(jìn)行分解可以找出文檔與話題、單詞與話題之間的聯(lián)系 。矩陣?X(M×N) 表示文檔 - 單詞矩陣,其中包含 M 個(gè)文檔和 N 個(gè)單詞。LSA 使用 SVD 分解矩陣?X?,得到兩個(gè)低維的矩陣?U(M×k) 和?V(N×k),V?的每一行就是一個(gè)單詞的詞向量。

基于矩陣分解的方法優(yōu)點(diǎn)是:可以有效利用全局統(tǒng)計(jì)信息。缺點(diǎn)是:1. SVD算法的時(shí)間復(fù)雜度太大,不適合用于大數(shù)據(jù)集;2. 主要用于獲取詞匯的相似性,對(duì)于詞匯類比任務(wù)的表現(xiàn)沒(méi)有基于淺窗口預(yù)測(cè)的方法好。
1.2 基于淺窗口
基于淺窗口的方法也稱為基于預(yù)測(cè)的方法,代表算法有 NNLM、Word2Vec 等?;跍\窗口的方法通常使用了語(yǔ)料庫(kù)的局部信息,在訓(xùn)練的過(guò)程中生成一個(gè)局部的上下文窗口。通過(guò)用上下文單詞預(yù)測(cè)中心詞或者用中心詞預(yù)測(cè)上下文單詞,最大化條件概率 P(中心詞|上下文單詞) 或者 P(上下文單詞|中心詞),從而訓(xùn)練得到詞向量。例如在 Word2Vec 的 Skip-Gram 模型中主要是使用中心詞預(yù)測(cè)上下文單詞,最大化 P(上下文單詞|中心詞);而 Word2Vec 中的 CBOW 模型主要是通過(guò)上下文單詞預(yù)測(cè)中心詞,最大化 P(中心詞|上下文單詞) 。上一篇文章介紹了 Word2Vec,因此不贅述了。
基于淺窗口方法的優(yōu)點(diǎn)是:1. 訓(xùn)練的過(guò)程中采用了預(yù)測(cè)的方式,在詞匯類比任務(wù)中的表現(xiàn)更好;2. 訓(xùn)練更快,能適應(yīng)大數(shù)據(jù)集;3. 能夠?qū)W習(xí)到單詞之間除了相似性之外的復(fù)雜模式。缺點(diǎn)是:1. 不能很好的使用全局統(tǒng)計(jì)信息;2. 需要大量的數(shù)據(jù)集。
可以看到矩陣分解和基于淺窗口的方法都存在一些局限,而 Glove 算法的邏輯就是,結(jié)合了兩類算法的優(yōu)點(diǎn),接下來(lái)重點(diǎn)了解 Glove 算法。
2. Glove 單詞共現(xiàn)矩陣與共現(xiàn)概率矩陣
GloVe模型將 LSA 和 Word2Vec 的優(yōu)點(diǎn)結(jié)合在一起,既利用了語(yǔ)料庫(kù)的全局統(tǒng)計(jì)信息,也利用了局部的上下文特征 (滑動(dòng)窗口)。Glove 首先需要構(gòu)造單詞共現(xiàn)矩陣,并提出了共現(xiàn)概率矩陣 (Co-occurrence Probabilities Matrix)的概念,共現(xiàn)概率矩陣可以通過(guò)單詞共現(xiàn)矩陣計(jì)算。
2.1 Glove 單詞共現(xiàn)矩陣
Glove 中構(gòu)造單詞共現(xiàn)矩陣時(shí)與 LSA 存在一些區(qū)別,需要限定一個(gè)上下文窗口,構(gòu)造的過(guò)程如下:
1.構(gòu)造一個(gè) N×N 的空矩陣,值為0
2.定義一個(gè)滑動(dòng)窗口,大小為 c
3.從語(yǔ)料庫(kù)的第1個(gè)單詞開(kāi)始作為中心詞滑動(dòng)窗口,中心詞在窗口中心
4.中心詞左右兩邊的單詞有 c-1個(gè),為上下文單詞
5.統(tǒng)計(jì)中心詞左右的上下文單詞出現(xiàn)的次數(shù),添加到矩陣中
6.繼續(xù)滑動(dòng)窗口
例如給定句子 “I have a cat” 和上下文窗口大小為 3,則可以構(gòu)造出以下窗口。當(dāng)遍歷到第 3 個(gè)窗口 “have a cat” 時(shí),中心詞是 “a”,此時(shí)要在單詞共現(xiàn)矩陣 X?中加上統(tǒng)計(jì)信息。X(a, have) += 1,X(a, cat) += 1。注意這種方法構(gòu)造出的單詞共現(xiàn)矩陣 X?是對(duì)稱矩陣。在實(shí)際使用的時(shí)候,還可以根據(jù)上下文單詞與中心詞的距離調(diào)整添加到矩陣?X?中的權(quán)重,遠(yuǎn)的詞權(quán)重小,而近的詞權(quán)重大。

2.2 Glove 共現(xiàn)概率矩陣
統(tǒng)計(jì)出共現(xiàn)矩陣?X?后,可以使用?Xij 表示單詞 i 和 j 共同出現(xiàn)的次數(shù),而?Xi 為所有?Xij 的和,Pij =?P(j|i) 表示單詞 j 出現(xiàn)在單詞 i 上下文的概率。

Glove 在上述基礎(chǔ)上提出了共現(xiàn)概率 (Co-occurrence)?的概念,共現(xiàn)概率可以理解為上面條件概率的比例?Ratio。以下是原論文中的例子,給定中心詞 ice (冰) 和 steam (水蒸氣),可以通過(guò)不同的上下文單詞 k 與中心詞 ice、steam 條件概率的比例?Ratio(ice, steam, k) 判斷它們之間的關(guān)系。


當(dāng)單詞 k 與 ice 相關(guān)性比較大的時(shí)候,例如 k = solid (固體),Ratio(ice, steam, k) 會(huì)比較大;
當(dāng)單詞 k 與 steam 相關(guān)性比較大的時(shí)候,如 k = gas (氣體),Ratio(ice, steam, k) 會(huì)比較??;
當(dāng) k 與 ice、steam 都相關(guān)時(shí),如 k = water (水),Ratio(ice, steam, k) 的值會(huì)接近 1;
當(dāng) k 與 ice、steam 都不相關(guān)時(shí),如 k = fashione (時(shí)尚),Ratio(ice, steam, k) 的值也會(huì)接近 1;
通過(guò)這個(gè)比例?Ratio(ice, steam, k) 可以很好地區(qū)分與 ice 相關(guān)的詞 (solid)、與 steam 相關(guān)的詞 (gas) 和一些對(duì)于 ice、steam 不是很重要的詞 (water、fashion)。因此 Glove 使用了一種重要的思想,即給定中心詞 i,j 和上下文單詞 k,詞向量的學(xué)習(xí)應(yīng)該與單詞條件概率的比例?Ratio(i, j, k) 相關(guān),好的詞向量可以編碼?Ratio(i, j, k) 的相關(guān)信息。
3. Glove 算法的推導(dǎo)
使用 w(x) 表示單詞 x 的詞向量,w'(x) 表示單詞 x 作為上下文時(shí)候的詞向量。則給定中心詞 i,j 和上下文單詞 k,Glove 希望詞向量可以編碼?Ratio(i, j, k)的信息,則會(huì)存在一種函數(shù) F,使得下式成立。

上式右側(cè)部分通過(guò)單詞共現(xiàn)矩陣計(jì)算,接下來(lái)需要簡(jiǎn)化公式。Glove 的作者認(rèn)為,單詞詞向量空間是一個(gè)線性結(jié)構(gòu),例如?“man” - “women”?的差與?“king” - “queen”?的差很相近。因此一種直觀的方法是,通過(guò)詞向量的差值簡(jiǎn)化公式。

上式的右側(cè)是一個(gè)標(biāo)量,而左側(cè) F 函數(shù)里面是向量。為了避免函數(shù) F (F可以很復(fù)雜,例如使用神經(jīng)網(wǎng)絡(luò)來(lái)學(xué)習(xí)) 學(xué)習(xí)到一些無(wú)用的東西,混淆 Glove 希望得到的線性結(jié)構(gòu),因此進(jìn)一步對(duì)公式進(jìn)行簡(jiǎn)化,將公式 F 函數(shù)里面的也變?yōu)橐粋€(gè)標(biāo)量。

單詞共現(xiàn)矩陣 X?是一個(gè)對(duì)稱矩陣,說(shuō)明中心詞與上下文詞是可以互換位置的,即公式中變換 w(x) 與 w'(x)、X(i, j) 與?X(j, i),公式應(yīng)該不變。但是上面的式子并不滿足這一條件,因此要將上面的公式變成滿足同態(tài)性的。


從式子可以看出 F 是指數(shù)函數(shù),即 F = exp,于是上面的公式可以進(jìn)行變換,得到下面的公式。

注意到上面的式子右側(cè)交換 i 和 k 的位置會(huì)改變公式對(duì)稱性,為了保證對(duì)稱性,作者進(jìn)行了如下變換,增加了兩個(gè)偏置項(xiàng) b(i) 與 b'(k)。

因此最終需要最小化下面的目標(biāo)函數(shù):


目標(biāo)函數(shù)就是平方誤差,其中 f(Xij) 表示損失函數(shù)的權(quán)重,作者采用了上述公式計(jì)算 f(Xij),保證了:1. 兩個(gè)單詞共現(xiàn)次數(shù)越多,損失函數(shù)權(quán)重越大;2. 兩單詞共現(xiàn)次數(shù)超過(guò)一個(gè)閾值時(shí),權(quán)重不繼續(xù)增大,最大權(quán)重為 1;3. 兩個(gè)單詞共現(xiàn)次數(shù)為 0,則權(quán)重為 0。f(Xij) 的圖像如下。

目標(biāo)函數(shù)采用隨機(jī)梯度下降法進(jìn)行優(yōu)化,隨機(jī)選取單詞共現(xiàn)矩陣 X?中的非 0 項(xiàng)進(jìn)行優(yōu)化。X?是一個(gè)稀疏矩陣,Glove 通常優(yōu)化速度比 Word2Vec 要快,因?yàn)?Word2Vec 中語(yǔ)料庫(kù)的每一對(duì) (中心詞、上下文詞) 都是訓(xùn)練樣本,樣本數(shù)量較多。
4. 總結(jié)
Glove 算法結(jié)合了矩陣分解和淺窗口方法的優(yōu)點(diǎn),充分地利用了全局的統(tǒng)計(jì)信息和局部上下文窗口的優(yōu)勢(shì)。在實(shí)際使用中效果會(huì)比 Word2Vec 要好,而且訓(xùn)練的速度更快。
參考文獻(xiàn)
《GloVe : Global Vectors forWord Representation》