常見的詞嵌入算法有基于矩陣分解的方法和基于淺層窗口的方法,Glove 結(jié)合了這兩類方法的優(yōu)點(diǎn)生成詞向量∧∏。基于矩陣分解的方法可以有效地利用全局信息沪么,但是在大數(shù)據(jù)集上速度慢硼婿;而基于淺層窗口的方法對于詞匯類比任務(wù)效果較好,訓(xùn)練速度快禽车,但是不能有效利用全局信息寇漫。
1. 詞嵌入算法 Word Embedding
在上一篇文章《詞表征學(xué)習(xí)算法 — Word2Vec》中,主要介紹了詞嵌入算法 Word2Vec殉摔。與傳統(tǒng)的 one-hot 編碼州胳、共現(xiàn)向量相比,詞嵌入算法得到的詞向量維度更低逸月、也可以更好地支持一些下游的任務(wù)栓撞,例如文檔分類,問答系統(tǒng)等碗硬。
本文介紹另一種詞嵌入算法 Glove瓤湘,首先簡述目前主要的兩類詞嵌入算法的優(yōu)缺點(diǎn)。第一類是 Matrix Factorization (矩陣分解) 方法恩尾,例如 LSA弛说;第二類是 Shallow Window-Based (基于淺層窗口) 方法,也稱為基于預(yù)測的方法翰意,例如 Word2Vec木人。Glove 算法結(jié)合了基于統(tǒng)計(jì)和基于淺窗口兩種方法的優(yōu)點(diǎn)
1.1 矩陣分解
基于矩陣分解的 word embedding 算法是一種利用了全局統(tǒng)計(jì)信息的方法,首先需要在語料庫中構(gòu)造出單詞共現(xiàn)矩陣或者文檔 - 單詞矩陣冀偶。下面用一個簡單的例子說明虎囚,假設(shè)語料庫中包含以下三個文檔,則可以構(gòu)造出對應(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 包含一個單詞 “I”堤如,因此為 1蒲列。在實(shí)際構(gòu)造文檔 - 單詞矩陣時則可以使用 tf-idf 作為權(quán)重窒朋。
在得到單詞共現(xiàn)矩陣或者文檔 - 單詞矩陣后可以采用 LSA 算法學(xué)習(xí)得到詞向量,LSA 算法 (潛在語義分析) 主要用于文本話題分析蝗岖,通過對文檔 - 單詞矩陣進(jìn)行分解可以找出文檔與話題侥猩、單詞與話題之間的聯(lián)系 。矩陣?X(M×N) 表示文檔 - 單詞矩陣抵赢,其中包含 M 個文檔和 N 個單詞欺劳。LSA 使用 SVD 分解矩陣?X?,得到兩個低維的矩陣?U(M×k) 和?V(N×k)铅鲤,V?的每一行就是一個單詞的詞向量划提。
基于矩陣分解的方法優(yōu)點(diǎn)是:可以有效利用全局統(tǒng)計(jì)信息。缺點(diǎn)是:1. SVD算法的時間復(fù)雜度太大邢享,不適合用于大數(shù)據(jù)集鹏往;2. 主要用于獲取詞匯的相似性,對于詞匯類比任務(wù)的表現(xiàn)沒有基于淺窗口預(yù)測的方法好骇塘。
1.2 基于淺窗口
基于淺窗口的方法也稱為基于預(yù)測的方法伊履,代表算法有 NNLM、Word2Vec 等款违√破伲基于淺窗口的方法通常使用了語料庫的局部信息,在訓(xùn)練的過程中生成一個局部的上下文窗口插爹。通過用上下文單詞預(yù)測中心詞或者用中心詞預(yù)測上下文單詞哄辣,最大化條件概率 P(中心詞|上下文單詞) 或者 P(上下文單詞|中心詞),從而訓(xùn)練得到詞向量递惋。例如在 Word2Vec 的 Skip-Gram 模型中主要是使用中心詞預(yù)測上下文單詞柔滔,最大化 P(上下文單詞|中心詞);而 Word2Vec 中的 CBOW 模型主要是通過上下文單詞預(yù)測中心詞萍虽,最大化 P(中心詞|上下文單詞) 睛廊。上一篇文章介紹了 Word2Vec,因此不贅述了杉编。
基于淺窗口方法的優(yōu)點(diǎn)是:1. 訓(xùn)練的過程中采用了預(yù)測的方式超全,在詞匯類比任務(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)财异,接下來重點(diǎn)了解 Glove 算法倘零。
2. Glove 單詞共現(xiàn)矩陣與共現(xiàn)概率矩陣
GloVe模型將 LSA 和 Word2Vec 的優(yōu)點(diǎn)結(jié)合在一起,既利用了語料庫的全局統(tǒng)計(jì)信息戳寸,也利用了局部的上下文特征 (滑動窗口)呈驶。Glove 首先需要構(gòu)造單詞共現(xiàn)矩陣,并提出了共現(xiàn)概率矩陣 (Co-occurrence Probabilities Matrix)的概念疫鹊,共現(xiàn)概率矩陣可以通過單詞共現(xiàn)矩陣計(jì)算袖瞻。
2.1 Glove 單詞共現(xiàn)矩陣
Glove 中構(gòu)造單詞共現(xiàn)矩陣時與 LSA 存在一些區(qū)別,需要限定一個上下文窗口拆吆,構(gòu)造的過程如下:
1.構(gòu)造一個 N×N 的空矩陣聋迎,值為0
2.定義一個滑動窗口,大小為 c
3.從語料庫的第1個單詞開始作為中心詞滑動窗口锈拨,中心詞在窗口中心
4.中心詞左右兩邊的單詞有 c-1個砌庄,為上下文單詞
5.統(tǒng)計(jì)中心詞左右的上下文單詞出現(xiàn)的次數(shù)羹唠,添加到矩陣中
6.繼續(xù)滑動窗口
例如給定句子 “I have a cat” 和上下文窗口大小為 3奕枢,則可以構(gòu)造出以下窗口。當(dāng)遍歷到第 3 個窗口 “have a cat” 時佩微,中心詞是 “a”缝彬,此時要在單詞共現(xiàn)矩陣 X?中加上統(tǒng)計(jì)信息。X(a, have) += 1哺眯,X(a, cat) += 1谷浅。注意這種方法構(gòu)造出的單詞共現(xiàn)矩陣 X?是對稱矩陣。在實(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 (水蒸氣),可以通過不同的上下文單詞 k 與中心詞 ice丐黄、steam 條件概率的比例?Ratio(ice, steam, k) 判斷它們之間的關(guān)系斋配。
當(dāng)單詞 k 與 ice 相關(guān)性比較大的時候,例如 k = solid (固體)艰争,Ratio(ice, steam, k) 會比較大十偶;
當(dāng)單詞 k 與 steam 相關(guān)性比較大的時候,如 k = gas (氣體)园细,Ratio(ice, steam, k) 會比較械牖;
當(dāng) k 與 ice猛频、steam 都相關(guān)時狮崩,如 k = water (水),Ratio(ice, steam, k) 的值會接近 1鹿寻;
當(dāng) k 與 ice睦柴、steam 都不相關(guān)時,如 k = fashione (時尚)毡熏,Ratio(ice, steam, k) 的值也會接近 1坦敌;
通過這個比例?Ratio(ice, steam, k) 可以很好地區(qū)分與 ice 相關(guān)的詞 (solid)、與 steam 相關(guān)的詞 (gas) 和一些對于 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 作為上下文時候的詞向量提茁。則給定中心詞 i淹禾,j 和上下文單詞 k,Glove 希望詞向量可以編碼?Ratio(i, j, k)的信息茴扁,則會存在一種函數(shù) F铃岔,使得下式成立。
上式右側(cè)部分通過單詞共現(xiàn)矩陣計(jì)算丹弱,接下來需要簡化公式德撬。Glove 的作者認(rèn)為,單詞詞向量空間是一個線性結(jié)構(gòu)躲胳,例如?“man” - “women”?的差與?“king” - “queen”?的差很相近蜓洪。因此一種直觀的方法是,通過詞向量的差值簡化公式坯苹。
上式的右側(cè)是一個標(biāo)量隆檀,而左側(cè) F 函數(shù)里面是向量。為了避免函數(shù) F (F可以很復(fù)雜,例如使用神經(jīng)網(wǎng)絡(luò)來學(xué)習(xí)) 學(xué)習(xí)到一些無用的東西恐仑,混淆 Glove 希望得到的線性結(jié)構(gòu)泉坐,因此進(jìn)一步對公式進(jìn)行簡化,將公式 F 函數(shù)里面的也變?yōu)橐粋€標(biāo)量裳仆。
單詞共現(xiàn)矩陣 X?是一個對稱矩陣腕让,說明中心詞與上下文詞是可以互換位置的,即公式中變換 w(x) 與 w'(x)歧斟、X(i, j) 與?X(j, i)纯丸,公式應(yīng)該不變。但是上面的式子并不滿足這一條件静袖,因此要將上面的公式變成滿足同態(tài)性的觉鼻。
從式子可以看出 F 是指數(shù)函數(shù),即 F = exp队橙,于是上面的公式可以進(jìn)行變換坠陈,得到下面的公式。
注意到上面的式子右側(cè)交換 i 和 k 的位置會改變公式對稱性捐康,為了保證對稱性仇矾,作者進(jìn)行了如下變換,增加了兩個偏置項(xiàng) b(i) 與 b'(k)吹由。
因此最終需要最小化下面的目標(biāo)函數(shù):
目標(biāo)函數(shù)就是平方誤差若未,其中 f(Xij) 表示損失函數(shù)的權(quán)重朱嘴,作者采用了上述公式計(jì)算 f(Xij)倾鲫,保證了:1. 兩個單詞共現(xiàn)次數(shù)越多,損失函數(shù)權(quán)重越大萍嬉;2. 兩單詞共現(xiàn)次數(shù)超過一個閾值時乌昔,權(quán)重不繼續(xù)增大,最大權(quán)重為 1壤追;3. 兩個單詞共現(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?是一個稀疏矩陣悼做,Glove 通常優(yōu)化速度比 Word2Vec 要快疯特,因?yàn)?Word2Vec 中語料庫的每一對 (中心詞、上下文詞) 都是訓(xùn)練樣本肛走,樣本數(shù)量較多漓雅。
4. 總結(jié)
Glove 算法結(jié)合了矩陣分解和淺窗口方法的優(yōu)點(diǎn),充分地利用了全局的統(tǒng)計(jì)信息和局部上下文窗口的優(yōu)勢。在實(shí)際使用中效果會比 Word2Vec 要好邻吞,而且訓(xùn)練的速度更快组题。
參考文獻(xiàn)
《GloVe : Global Vectors forWord Representation》