詞向量:GloVe

GloVe:Global Vectors for Word Representation,它是一個基于全局詞頻統(tǒng)計的詞表征工具。通過GloVe計算出的詞向量捕捉到了詞之間一些語義特性,比如相似性(similarity)、類比性(analogy)等。我們通過對向量的運算,比如歐氏距離或cos相似度,可以算出詞之間的語義相似性。

1、準備工作

由語料庫構(gòu)建一個共現(xiàn)矩陣(Co-occurrence Matrix) X,矩陣中的每一個元素X_{ij}代表單詞i和上下文單詞j在特定大小的上下文窗口內(nèi)共同出現(xiàn)的次數(shù)。這里GloVe做了額外的工作,它根據(jù)兩個單詞在上下文窗口的距離d,提出了一個衰減權(quán)重decay = 1/d,也就是說距離越遠的兩個單詞所占總計數(shù)的權(quán)重越小。

2、使用GloVe模型訓練詞向量

原論文作者給出的loss function長這樣:
J=\sum_{i, j=1}^{V} f\left(X_{i j}\right)\left(w_{i}^{T} \tilde{w}_{j}+b_{i}+\tilde_{j}-\log X_{i j}\right)^{2}
其中w_{i}^{T}\tilde{w}_{j}是最終求解的詞向量,b_{i}\tilde_{j}是兩個標量(作者定義的偏差),f是權(quán)重函數(shù),V是詞典的大?。ü铂F(xiàn)矩陣的維度V x V)。這里我們知道GloVe模型沒有使用神經(jīng)網(wǎng)絡做訓練。

下面來說說權(quán)重函數(shù)f。在一個語料庫中,存在很多單詞他們在一起出現(xiàn)的次數(shù)是很多的,那么我們希望權(quán)重函數(shù)f滿足以下幾點:
a. 這些單詞的權(quán)重要大于那些很少在一起出現(xiàn)的單詞,所以這個函數(shù)是非遞減的;
b. 我們不希望這個權(quán)重過大,當?shù)竭_一定程度之后不再增加;
c. 如果兩個單詞沒有在一起出現(xiàn),也就是X_{ij} = 0,那么它們應該不參與到loss function的計算中來,也就是f(x)要滿足f(0) = 0。

綜合以上,作者選擇了如下的分段函數(shù):


WX20190731-220537@2x.png

作者在實驗中取的\alpha=0.75,x_{max} = 100。

這么看來GloVe像是一種無監(jiān)督訓練方法,因為不需要提供標注。但其實它還是有標注的,標注就是\log X_{i j},向量w_{i}^{T}\tilde{w}_{j}是需要不斷更新的學習參數(shù),所以本質(zhì)上還是監(jiān)督學習,基于梯度下降。

按原論文中的說法:采用了AdaGrad的梯度下降算法,對矩陣X中的所有非零元素進行隨機采樣,學習速率設置為0.05,在vector size小于300的情況下迭代了50次,其他大小的verctors上迭代了100次,直至收斂。

最終學習得到的是兩個向量w_{i}^{T}\tilde{w}_{j},因為X是對稱的,所以從原理上w_{i}^{T}\tilde{w}_{j}也是對稱的,他們唯一的區(qū)別是初始化的值不一樣,而導致最終的值不一樣。所以這兩者其實是等價的,都可以當成最終的結(jié)果來使用。但是為了提高魯棒性,最終選擇兩者之和作為verctor(兩者初始化不同,相當于加了不同的隨機噪聲,所以能提高魯棒性)。

3、作者如何構(gòu)建模型的

上面我們了解了GloVe模型訓練詞向量的過程,但是我們還有一個很大的疑問,loss function是怎么來的,為什么是這個形式?

首先我們先熟悉幾個符號定義:

  • X_{ij}表示單詞j出現(xiàn)在單詞i的上下文中的次數(shù);

  • X_{i}=\sum_{j=1}^{N} X_{i, j}, 表示單詞i的上下文中所有單詞出現(xiàn)的總次數(shù);

  • P_{i, k}=\frac{X_{i, k}}{X_{i}}, 表示單詞k出現(xiàn)在單詞i語境中的概率。

  • ratio_{i, j, k}=\frac{P_{i, k}}{P_{j, k}}, 兩個條件概率的比值。

作者從ratio中發(fā)現(xiàn)了一些規(guī)律,看下表:


WX20190729-112723@2x.png

看最后一行,我們可以用這個比值觀察出兩個單詞ij相對于單詞k哪個更相關。

比如,ice和solid更相關,而stram和solid明顯不相關,于是發(fā)現(xiàn)\frac{P(k|ice)}{P(k|steam)}比1大很多;gas和steam更相關,而與ice不相關,所以\frac{P(gas|ice)}{P(gas|steam)}遠小于1;當都有關或都無關的時候,兩者比例接近1.

所以,以上結(jié)論可以說明通過概率的比例而不是概率本身去學習詞向量可能是一個更恰當?shù)姆椒?/strong>。

于是乎,作者開始了表演:

假設我們已經(jīng)有了詞向量v_{i}、v_{j}、v_{k},并且用這些詞向量通過某種函數(shù)計算ratio能夠得到同樣的規(guī)律的話,就意味著我們詞向量與共現(xiàn)矩陣具有很好的一致性,也就是說我們的詞向量中蘊含了共現(xiàn)矩陣中蘊含的信息。翻譯成數(shù)學表達式:\frac{P_{i, k}}{P_{j, k}}=r a t i o_{i, j, k}=g\left(v_{i}, v_{j}, v_{k}\right),我們的目標應該是使得表達式兩端盡可能地接近。所以,得出代價函數(shù):
J=\sum_{i, j, k}^{N}\left(\frac{P_{i, k}}{P_{j, k}}-g\left(v_{i}, v_{j}, v_{k}\right)\right)^{2}
有個問題,模型中有3個單詞,也就是說我們的計算復雜度是N x N x N,有點復雜。下面來做一些優(yōu)化:

  • 要考慮單詞i和j之間的關系,那g(v_{i}, v_{j}, v_{k})中大概要有v_{j} - v_{j}這么一項;
  • ratio_{i,j,k}是個標量,那么g(v_{i}, v_{j}, v_{k})最后應該是個標量,雖然輸入都是向量,那內(nèi)積應該是合理的,所以應該有這么一項:\left(v_{i}-v_{j}\right)^{T} v_{k};
  • 然后作者又在\left(v_{i}-v_{j}\right)^{T} v_{k}上加了一層指數(shù)運算,最終得到: g\left(v_{i}, v_{j}, v_{k}\right)=\exp \left(\left(v_{i}-v_{j}\right)^{T} v_{k}\right);

下面把公式做進一步變形:
\frac{P_{i, k}}{P_{j, k}}=g\left(v_{i}, v_{j}, v_{k}\right) = \exp \left(\left(v_{i}-v_{j}\right)^{T} v_{k}\right) = \exp \left(v_{i}^{T} v_{k}-v_{j}^{T} v_{k}\right) = \frac{\exp \left(v_{i}^{T} v_{k}\right)}{\exp \left(v_{j}^{T} v_{k}\right)}
因此,只要讓分子分母對應相等即可:P_{i, k}=\exp \left(v_{i}^{T} v_{k}\right), P_{j, k}=\exp \left(v_{j}^{T} v_{k}\right)。因為分子分母形式相同,所以可以把兩者統(tǒng)一考慮,我們有:P_{i, j}=\exp \left(v_{i}^{T} v_{j}\right)。

兩邊取對數(shù):\log \left(P_{i, j}\right)=v_{i}^{T} v_{j}

loss function可以化簡為:J=\sum_{i, j}^{N}\left(\log \left(P_{i, j}\right)-v_{i}^{T} v_{j}\right)^{2}

到這里,我們成功把計算復雜度從N x N x N降到N x N。

但是這里出現(xiàn)了新的問題,我們看兩個式子:\log \left(P_{i, j}\right)=v_{i}^{T} v_{j}\log \left(P_{j, i}\right)=v_{j}^{T} v_{i},兩個等式的左邊不等,但是右邊卻相等。

好了,繼續(xù)腦洞。將代價函數(shù)中的條件概率展開:\log \left(X_{i, j}\right)-\log \left(X_{i}\right)=v_{i}^{T} v_{j},添加偏置項并將\log \left(X_{i}\right)放到偏置里面去,所以有:
J=\sum_{i, j}^{N}\left(v_{i}^{T} v_{j}+b_{i}+b_{j}-\log \left(X_{i, j}\right)\right)^{2}
最后,出現(xiàn)頻率越高的詞對應的權(quán)重應該越大,所以在代價函數(shù)中添加權(quán)重項:
J=\sum_{i, j}^{N} f\left(X_{i, j}\right)\left(v_{i}^{T} v_{j}+b_{i}+b_{j}-\log \left(X_{i, j}\right)\right)^{2}

參考:

https://www.aclweb.org/anthology/D14-1162

https://blog.csdn.net/coderTC/article/details/73864097

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容