本文主要對《GloVe: Global Vectors for Word Representation》進(jìn)行解讀元扔。
盡管word2vector在學(xué)習(xí)詞與詞間的關(guān)系上有了大進(jìn)步渣蜗,但是它有很明顯的缺點(diǎn):只能利用一定窗長的上下文環(huán)境,即利用局部信息,沒法利用整個語料庫的全局信息漓概。鑒于此萎攒,GloVe誕生了饲帅,它的全稱是global vector,很明顯它是要改進(jìn)word2vector丽啡,利用語料庫的全局信息谋右。
1.共現(xiàn)概率
什么是共現(xiàn)?
單詞出現(xiàn)在單詞
的環(huán)境中(論文給的環(huán)境是以為中心的左右10個單詞區(qū)間)叫共現(xiàn)补箍。
什么是共現(xiàn)矩陣改执?
共現(xiàn)矩陣是單詞對共現(xiàn)次數(shù)的統(tǒng)計(jì)表。我們可以通過大量的語料文本來構(gòu)建一個共現(xiàn)統(tǒng)計(jì)矩陣坑雅。
例如辈挂,有語料如下:
I like deep learning.
I like NLP.
I enjoy flying.
以窗半徑為1來指定上下文環(huán)境,則共現(xiàn)矩陣就應(yīng)該是:
X01:它表示like出現(xiàn)在I的環(huán)境(I like區(qū)間)中的次數(shù)(在整個語料庫中的總計(jì)次數(shù))裹粤,此處應(yīng)當(dāng)為2次呢岗,故第一行第二列應(yīng)當(dāng)填2。還應(yīng)當(dāng)發(fā)現(xiàn)蛹尝,這個共現(xiàn)矩陣它是對稱陣后豫,因?yàn)閘ike出現(xiàn)在I的環(huán)境中,那么必然I也會出現(xiàn)在like的環(huán)境中突那,所以X10= 2挫酿。
共現(xiàn)矩陣有以下3個特點(diǎn):
·統(tǒng)計(jì)的是單詞對在給定環(huán)境中的共現(xiàn)次數(shù);所以它在一定程度上能表達(dá)詞間的關(guān)系愕难。
·共現(xiàn)頻次計(jì)數(shù)是針對整個語料庫而不是一句或一段文檔早龟,具有全局統(tǒng)計(jì)特征。
·共現(xiàn)矩陣它是對稱的猫缭。
共現(xiàn)矩陣的生成步驟:
·首先構(gòu)建一個空矩陣葱弟,大小為V×V,即詞匯表×詞匯表猜丹,值全為0芝加。矩陣中的元素坐標(biāo)記為。
·確定一個滑動窗口的大小(例如取半徑為m)
·從語料庫的第一個單詞開始射窒,以1的步長滑動該窗口藏杖,因?yàn)槭前凑照Z料庫的順序開始的,所以中心詞為到達(dá)的那個單詞即脉顿。
·上下文環(huán)境是指在滑動窗口中并在中心單詞兩邊的單詞蝌麸。
·若窗口左右無單詞,一般出現(xiàn)在語料庫的首尾艾疟,則空著来吩,不需要統(tǒng)計(jì)敢辩。
·在窗口內(nèi),統(tǒng)計(jì)上下文環(huán)境中單詞出現(xiàn)的次數(shù)弟疆,并將該值累計(jì)到位置上责鳍。
·不斷滑動窗口進(jìn)行統(tǒng)計(jì)即可得到共現(xiàn)矩陣。
什么是叫共現(xiàn)概率兽间?
定義X為共現(xiàn)矩陣历葛,共現(xiàn)矩陣的元素為詞
出現(xiàn)在詞
環(huán)境的次數(shù),令
嘀略,為任意詞出現(xiàn)在
的環(huán)境的次數(shù)(即共現(xiàn)矩陣第
行的和)恤溶,那么:
為詞出現(xiàn)在詞環(huán)境中的概率(這里以頻率計(jì)算概率),這一概率被稱為詞
和詞
的共現(xiàn)概率帜羊。共現(xiàn)概率是指在給定的環(huán)境下出現(xiàn)(共現(xiàn))某一個詞的概率咒程。注意:在給定語料庫的情況下,我們是可以事先計(jì)算出任意一對單詞的共現(xiàn)概率的讼育。
2.共現(xiàn)概率比
? ? ?接下來闡述為啥作者要提共現(xiàn)概率和共現(xiàn)概率比這一概念帐姻。下面是論文中給的一組數(shù)據(jù):
先看一下第一行數(shù)據(jù),以ice為中心詞的環(huán)境中出現(xiàn)solid固體的概率是大于gas奶段、fashion而且小于water的饥瓷,這是很合理的,對吧痹籍,因?yàn)楝F(xiàn)實(shí)語言使用習(xí)慣就是這樣的呢铆。同理可以解釋第二行數(shù)據(jù)。我們來重點(diǎn)考慮第三行數(shù)據(jù):共現(xiàn)概率比蹲缠。我們把共現(xiàn)概率相比棺克,我們發(fā)現(xiàn):
1.看第三行第一列:當(dāng)ice的語境下共現(xiàn)solid的概率應(yīng)該很大,當(dāng)stream的語境下共現(xiàn)solid的概率應(yīng)當(dāng)很小线定,那么比值就>1娜谊。
2.看第三行第二列:當(dāng)ice的語境下共現(xiàn)gas的概率應(yīng)該很小,當(dāng)stream的語境下共現(xiàn)gas的概率應(yīng)當(dāng)很大斤讥,那么比值就<1纱皆。
3.看第三行第三列:當(dāng)ice的語境下共現(xiàn)water的概率應(yīng)該很大,當(dāng)stream的語境下共現(xiàn)water的概率也應(yīng)當(dāng)很大周偎,那么比值就近似=1抹剩。
4.看第三行第四列:當(dāng)ice的語境下共現(xiàn)fashion的概率應(yīng)該很小,當(dāng)stream的語境下共現(xiàn)fashion的概率也應(yīng)當(dāng)很小蓉坎,那么比值也是近似=1。
因?yàn)樽髡甙l(fā)現(xiàn)用共現(xiàn)概率比也可以很好的體現(xiàn)3個單詞間的關(guān)聯(lián)(因?yàn)楣铂F(xiàn)概率比符合常理)胡嘿,所以glove作者就大膽猜想蛉艾,如果能將3個單詞的詞向量經(jīng)過某種計(jì)算可以表達(dá)共現(xiàn)概率比就好了(glove思想)。如果可以的話,那么這樣的詞向量就與共現(xiàn)矩陣有著一致性勿侯,可以體現(xiàn)詞間的關(guān)系拓瞪。
3.Glove優(yōu)化目標(biāo)
想要表達(dá)共現(xiàn)概率比,這里涉及到的有三個詞即,它們對應(yīng)的詞向量用
表示助琐,那么我們需要找到一個映射
,使得:
,等式的右邊的比值可以通過統(tǒng)計(jì)得到祭埂。這個比值可以作為標(biāo)簽,我們需要設(shè)計(jì)一個模型通過訓(xùn)練的方式讓映射值逼近這個確定的共現(xiàn)概率比兵钮。很明顯這是個回歸問題蛆橡,我們可以用均方誤差作為loss。當(dāng)然掘譬,設(shè)計(jì)這個函數(shù)或者這個模型當(dāng)然有很多途徑泰演,我們來看看作者是怎么設(shè)計(jì)的。
下面將從如何構(gòu)造展開討論葱轩,首先聲明以下的內(nèi)容更多的是體現(xiàn)作者構(gòu)造模型的思路睦焕,而不是嚴(yán)格的數(shù)學(xué)證明。
為了讓左右兩邊相等靴拱,很容易想到用兩者的均方差做代價函數(shù):
但是里面含有3個單詞垃喊,這意味這要在V*V*V的復(fù)雜度上計(jì)算,太復(fù)雜了袜炕。
為了簡化計(jì)算缔御,作者是這樣思考的:
1. 為了考慮單詞和單詞
之間的關(guān)系,那么
是一個合理的選擇
2.是標(biāo)量妇蛀,而
均為向量耕突,為了將向量轉(zhuǎn)為標(biāo)量,可以將兩個向量做內(nèi)積评架,于是有了
3.?接著眷茁,作者在外面加了指數(shù)運(yùn)算exp(),得到:
即:
即:
即:
這樣纵诞,便可以發(fā)現(xiàn)簡化方法了:只需要上式分子對應(yīng)相等上祈,分母對應(yīng)相等即可。
即:并且
考慮到和
形式是相同的浙芙,于是進(jìn)行統(tǒng)一考慮登刺,即:
本來我們追求的是:
現(xiàn)在只需要追求:
兩邊取對數(shù):
那么代價函數(shù)可簡化為:
現(xiàn)在只需要在V*V的復(fù)雜度上進(jìn)行計(jì)算。
4.仔細(xì)觀察和
可以發(fā)現(xiàn):
不等于
但是
和
是相等的嗡呼。即等式左側(cè)不具有對稱性而右側(cè)有對稱性纸俭。這在數(shù)學(xué)上出現(xiàn)問題,有可能會導(dǎo)致模型無法訓(xùn)練優(yōu)化南窗。
為了解決這個問題將中的
按照條件概率展開揍很,即為:?
將其變?yōu)椋?img class="math-inline" src="https://math.jianshu.com/math?formula=log(X_%7Bij%7D)%3Dv_i%5ET%5Ctilde%7Bv%7D_j%2Bb_i%2B%5Ctilde%7Bb%7D%20_j" alt="log(X_{ij})=v_i^T\tilde{v}_j+b_i+\tilde郎楼 _j" mathimg="1">
即添加一個偏置項(xiàng)窒悔,將
吸收到偏置項(xiàng)
中呜袁。
于是代價函數(shù)變成了:?
5.在代價函數(shù)中添加權(quán)重項(xiàng)简珠,于是代價函數(shù)進(jìn)一步進(jìn)化為:
是怎樣的呢?有什么作用呢聋庵?為什么要添加權(quán)重函數(shù)膘融?
我們知道在一個語料庫中,肯定存在很多單詞他們在一起出現(xiàn)的次數(shù)是很多的珍策,那么我們希望:
1.這些單詞的權(quán)重須大于那些很少在一起出現(xiàn)的單詞托启,所以這個函數(shù)要是非遞減函數(shù);
2.但我們也不希望這個權(quán)重過大攘宙,當(dāng)?shù)竭_(dá)一定程度之后應(yīng)該不再增加屯耸;
3.如果兩個單詞沒有在一起出現(xiàn),也就是蹭劈,那么他們應(yīng)該不參與到loss function的計(jì)算當(dāng)中去疗绣,也就是
要滿足
滿足以上條件的函數(shù)有很多,作者采用了如下形式的分段函數(shù):
函數(shù)圖像:
這篇glove論文中的所有實(shí)驗(yàn)铺韧,的取值都是為0.75多矮,而
為100
也就是說詞對共現(xiàn)次數(shù)越多的,有更大的權(quán)重將被懲罰得更厲害些哈打;次數(shù)少塔逃,有更小的懲罰權(quán)重,這樣就可以使得不常共現(xiàn)的詞對對結(jié)果的貢獻(xiàn)不會太小料仗,而不會過分偏向于常共現(xiàn)的詞對湾盗。
那么總結(jié)下,glove的優(yōu)化目標(biāo)為:
Question&Answer
Question1: GloVe是如何訓(xùn)練的?
Answer1: 雖然很多人聲稱GloVe是一種無監(jiān)督的學(xué)習(xí)方式(因?yàn)樗_實(shí)不需要人工標(biāo)注label)格粪,但其實(shí)它還是有l(wèi)abel的,這個label就是優(yōu)化目標(biāo)中的氛改。而優(yōu)化目標(biāo)中的
就是要不斷更新/學(xué)習(xí)的參數(shù)帐萎,所以本質(zhì)上它的訓(xùn)練方式跟監(jiān)督學(xué)習(xí)的訓(xùn)練方法沒什么不一樣,都是基于梯度下降的胜卤。具體地疆导,這篇論文里的實(shí)驗(yàn)是這么做的:采用了AdaGrad的梯度下降算法,對矩陣中的所有非零元素進(jìn)行隨機(jī)采樣瑰艘,學(xué)習(xí)率(learning rate)設(shè)為0.05是鬼,在vector size小于300的情況下迭代了50次肤舞,其他大小的vectors上迭代了100次紫新,直至收斂均蜜。最終學(xué)習(xí)得到的是兩個vector是
,因?yàn)閄是對稱的,所以從原理上講
也是對稱的芒率,他們唯一的區(qū)別是初始化的值不一樣囤耳,而導(dǎo)致最終的值不一樣。所以這兩者其實(shí)是等價的偶芍,都可以當(dāng)成最終的結(jié)果來使用充择。但是為了提高魯棒性,最終會選擇兩者之和作為最終的vector(兩者的初始化不同相當(dāng)于加了不同的隨機(jī)噪聲匪蟀,所以能提高魯棒性)椎麦。
三千多字,碼字不易材彪,如果大家發(fā)現(xiàn)我有地方寫得不對或者有疑問的观挎,麻煩評論,我會回復(fù)并改正段化。對于重要問題嘁捷,我會持續(xù)更新至Question&Answer。
參考
Pennington J , Socher R , Manning C . Glove: Global Vectors for Word Representation[C]// Conference on Empirical Methods in Natural Language Processing. 2014.