1 論文背景
glove模型是基于當時新流行的Word2vec。word2vec是當年轟動一時的模型子眶。用向量表示單詞或文檔的語義是很多人追求的目標吏颖,此前還是笨拙的用tf-idf + cbow向量表示失晴,而word2vec的提出,給大家提供了如何在神經(jīng)網(wǎng)絡的視角下完成單詞的向量表示耻警,以及利用上下文來進行訓練的手法隔嫡,可謂是開創(chuàng)了新流派吧。不過有人總覺得不用統(tǒng)計的方式去解釋問題甘穿,建模問題腮恩,就會浪費了統(tǒng)計的優(yōu)勢,提出了glove模型温兼。該模型的訓練相比于Word2vec的原始定義有較明顯的優(yōu)勢秸滴。其他自稱的優(yōu)點比如說“可解釋性”,“利用了統(tǒng)計優(yōu)勢”這些我認為都不太顯著妨托。
值得一提的是缸榛,一般的論文模型的提出,都是非常直接的兰伤。說考慮什么因素就直接給出一個計算方式内颗,說用這個方式來衡量該因素就行。而本文的建模思路跟其他論文相比敦腔,比較詳細均澳,大概就是借用了別人考慮因素的思路,然后稍加改造符衔,再加一個自己考慮的因素找前,把自己設計函數(shù)的思考過程全都寫了出來。這一點值得我等菜逼參考學習判族。
2 模型提出的思路
既然說到了這個論文的特異之處躺盛,我們就一起看一下這個模型的具體思考過程
2.1 論文最終模型
先給出最終公式,大家先嘗試理解一下:
其中形帮,Xij是在單詞i的上下文中槽惫,單詞j出現(xiàn)的次數(shù),wi是單詞i的向量辩撑,bi是類似LSI模型中矩陣分解表示的那個偏移量界斜,也有叫誤差的。f(Xij)是一個僵硬的權值函數(shù)合冀,具體取值如下:
其函數(shù)圖像如下:
所以各薇,這個模型看起來是很不知所謂的,下面給出具體的思考過程君躺。
2.2 模型設計思路
1.從word2vec出發(fā)峭判,談模型設計與改進
眾所周知开缎,word2vec模型的核心是一個單詞向量和所有的V個單詞向量相乘,得到V個分數(shù)朝抖,然后選擇它的上下文單詞去進行反向傳導啥箭,進而更新整個參數(shù)矩陣谍珊。當然這里的分數(shù)需要轉(zhuǎn)化成概率治宣,所以最后一層套了一個softmax函數(shù)來進行概率計算。最后為了方便凸優(yōu)化砌滞,對softmax取負的log侮邀,利用極大似然的思想去估計參數(shù),我們就得到了目標函數(shù):
我們仔細想一下這個函數(shù)贝润,如果不用skip gram和cbow绊茧,而是一個單詞對應一個的訓練方式,里面是不是有很多bigram的樣本啊打掘,難免相同的組合會出現(xiàn)多次华畏。如果我們把這些重復出現(xiàn)的單詞加起來,就變成下面這個函數(shù):
這個函數(shù)與上面的函數(shù)是完全等價的尊蚁。
定義
其中Xi的含義是在i的上下文中亡笑,出現(xiàn)過的單詞總量,其實就等價于窗口大小乘以單詞i出現(xiàn)的次數(shù)横朋。Pij的含義可以理解成在i的上下文中(一般是一個窗口大新匚凇),j出現(xiàn)的概率琴锭。
公式可以寫成:
其中H(Pi,Qi)是Pi和Qi的交叉熵晰甚,定義類似于Xi,都是i的上下文單詞的加和决帖。那么這個函數(shù)跟word2vec的目標函數(shù)的完全等價的厕九,但是這個函數(shù)有挺多問題,作者提到的的有:
? Q必須經(jīng)過正則化地回,這會使訓練過程中Qi計算代價太高扁远。
? 長尾分布,對出現(xiàn)頻次較低的事件給予的權重太高落君。
2. glove模型對word2vec的改進
那么穿香,如何進行優(yōu)化呢?作者提出一個思路绎速,那就是把交叉熵換成其他的函數(shù)---最小二乘函數(shù)皮获,并且拋棄正則化的Q和P項。改成如下模型:
其中:P?i j = Xi j 纹冤,Q?i j = exp(wiT w?j ) 這兩項是不需要正則化的洒宝。不過這樣有個問題购公,Xij一般會很大,會給計算帶來麻煩雁歌,那么為了糾正這個問題宏浩,可以給最小二乘項加上log,就變成了這樣:
然后為了平衡頻繁項對目標函數(shù)的影響靠瞎,我們給Xi加個權重比庄,再加上兩個bias項,就得到了目標函數(shù):
3 檢驗模型效果
word2vec直接借用了交叉熵的概念乏盐,所以不需要解釋模型的合理性(交叉熵的理論完備性已經(jīng)很好了)佳窑。本文模型已經(jīng)做好了,下面用實驗數(shù)據(jù)來支撐模型的合理性父能。作者做了兩個問題的試驗神凑,一個是word analogy任務(解釋一下什么是word analogy task:The word analogy task is introduced by Mikolov et al. (2013) to quantitatively evaluate the linguistic regularities between pairs of word representations. The task consists of questions like “a is to b as c is to __”, where is missing and must be guessed from the entire vocabulary.)。一個是NER(實體詞識別)
3.1 word analogy試驗
作者使用了word2vec作者的數(shù)據(jù)集做同樣的何吝。還用數(shù)據(jù)集CoNLL-03做溉委,結果如下:
可以看到analogy訓練的準確率還是挺高的,跟原word2vec模型及其各種變種相比差不太多爱榕。
3.2 NER試驗
NER問題的效果如下:
可以看到瓣喊,也達到了state-of-art。
3.3 超參數(shù)分析
1. 向量長度和窗口大小
2. 訓練樣本大小
syntactic問題來說訓練樣本越多越準呆细,semantic卻不完全是這樣
3. 訓練時長
單線程來說:2.1GHz Intel Xeon E5-2658 的機器, 訓練一個窗口大小為10, 40萬詞匯量, 60億大小的樣本型宝,需要85分鐘。
可以看到相同訓練時長下絮爷,glove的準確率高趴酣,就是說glove需要的訓練時間短。
4 模型計算效率的解釋
既然效果差不多坑夯,為什么用glove嘞岖寞?glove的模型優(yōu)勢就是解決了word2vec的問題啊,一個是長尾問題柜蜈,一個是計算效率問題仗谆。長尾問題用模型效果來印證,計算效率這個除了用試驗證明之外淑履,還以用理論公式推導來證明隶垮,下面一起看一下證明過程(這個證明過程我只是直接翻譯過來,我自己也沒看懂):
作者認為秘噪,Xij可以用共現(xiàn)的單詞對排名的指數(shù)來表示狸吞,大概就是如下公式:
其中rij指的是這個單詞對出現(xiàn)的頻率名次,最多的排第一取值為1,次多的排第二取值為2蹋偏。而語料的總單詞數(shù)(注意這不是詞匯數(shù)便斥,詞匯數(shù)是去重的,corpus是未去重的)C跟X矩陣所有元素的加和成正比威始∈嗑溃可以表示成如下形式:
最高的單詞對出現(xiàn)的頻次記為|X|。Hx,a表示從1到|X|的加和黎棠。那么就可以寫成如下形式:
然后用一個叫harmonic number的來代替Hx,a
其中ζ (s)是一個叫Riemann zeta的函數(shù)晋渺。然后|X|可以表示成:
然后用實驗數(shù)據(jù)去擬合這個方程中的參數(shù),可以得到a=1.25葫掉,所以:
這就比word2vec的模型O(|C|)要略強一丟丟些举。
5 自己的想法
從這篇論文來看跟狱,模型公式的提出俭厚,主要是根據(jù)函數(shù)的性質(zhì)進行設計,數(shù)學上的推導只是一個思路驶臊,需要這個數(shù)學推導證明模型的收斂性和計算效率等挪挤。
很多模型都是基于統(tǒng)計學基礎來進行設計,很多時候模型今年學了明年就用不上了关翎,而基礎是不會變的扛门,所以機器學習的統(tǒng)計學基礎是必要的。