1. 程式人生 > >GloVe損失函數的理解

GloVe損失函數的理解

ram frame minus 想法 absolute 技術 意義 sdn 算法

簡介

GloVe是一種非常簡單快速的訓練詞向量的算法。與復雜的word2vec相比,其是一個log雙線性模型,僅通過一個簡單的損失函數就能夠得到很好的結果。

(1)J=∑i,jNf(Xi,j)(viTvj+bi+bj−log(Xi,j))2


其中,vivj是i和j的詞向量,bibj是兩個偏差項,f是一個權重函數,N為詞匯表大小
但是這個損失函數的意義卻不是很直觀,這裏參照一篇博客寫了一下對於這個損失函數的分析

思路

Glove首先會通過設置定義的窗口大小,進行統計得到詞的共現矩陣。如Xi,j表示詞ij同時出現的次數。共現矩陣是一個N×N

的矩陣

然後我們需要計算一些條件概率
定義

Xi=∑j=1NXi,j

Pi,k=Xi,kXi

ratioi,j,k=Pi,kPj,k


然後我們分析這裏的ratio會發現一些規律

技術分享圖片
所以我們想到,如果能夠通過詞向量vi,vjvk得到相似的規律的,那麽說明我們的詞向量是很不錯的。即我們想做的是得到函數g(),使之滿足

ratioi,j,k=Pi,kPj,k=g(vi,vj,vk)


那麽為了使二者盡量想近,對於損失函數,一個直觀的想法就是MSE,即

(2)J=∑i,j,kN(Pi,kPj,k−g(vi,vj,vk))2


不過這裏的計算復雜度是N3,過於復雜,我們需要進一步分析。我們可以開始猜想一下g(vi,vj,vk)是一個什麽樣的形式,因為其衡量了單詞i,j之間的關系,那麽我們可以猜想其中含有vi−vj,又因為其中還有對k的關系且最終是一個標量,那麽我們假設其存在一個內積,即(vi−vj)Tvk
那麽現在我們有

Pi,kPj,k=g(vi,vj,vk)=(vi−vj)Tvk=viTvk−vjTvk


可以看到這裏我們和上面的損失函數有點類似了,但是還是缺少一個exp,我們可以加上它看看,即

Pi,kPj,k=exp?(viTvk−vjTvk)=exp?(viTvk)exp?(vjTvk)


可以看到,加上exp之後分子分母的形式就完全一樣了,我們可以將其一起考慮,即現在只需要滿足

Pi,j=exp(viTvj)


兩邊取對數,我們的損失函數就能夠轉化為

(3)J=∑i,jN(log(Pi,j)−viTvj)2

這個損失函數已經更像一些了,但是還是不太一樣。這是因為我們前面是存在一點問題的。根據前面我們有

log(Pi,j)=viTvj和log(Pj,i)=vjTvi


但是實際上,上面的式子右邊是相等的,但左邊並不相等(並且對於這個問題來說,我們可以想到target和context其實是可以互換的,所以存在對稱),即原有的對稱性不滿足了。我們需要進一步處理一下。我們將上面(3)的中的條件概率log(Pi,j)展開,得到

log(Pi,j)=log(Xi,j)−log(Xi)=viTvj


這裏的log(Xi)是獨立於j的,所以可以被吸收進bi變為

log(Xi,j)=viTvj+bi+bj


這樣代價函數就變成了

J=∑i,jN(viTvj+bi+bj−log(Xi,j))2


然後加上詞頻越高權重越大(共現次數很少的實際上很可能是異常值,並且共現次數少的一般來說含的信息也少)

(4)J=∑i,jNf(Xi,j)(viTvj+bi+bj−log(Xi,j))2


權重函數

f(x)={(x/xmax)0.75,if x<xmax1,if x>=xmax


技術分享圖片

引用

  1. Pennington J, Socher R, Manning C. Glove: Global vectors for word representation[C]//Proceedings of the 2014 conference on empirical methods in natural language processing (EMNLP). 2014: 1532-1543.
  2. https://blog.csdn.net/codertc/article/details/73864097

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">



來自為知筆記(Wiz)



GloVe損失函數的理解