GloVe損失函數的理解

 

簡介

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的矩陣spa

而後咱們須要計算一些條件機率
定義.net

Xi=∑j=1NXi,j

 

Pi,k=Xi,kXi

 

ratioi,j,k=Pi,kPj,k


而後咱們分析這裏的ratio會發現一些規律code


因此咱們想到,若是可以經過詞向量vi,vjvk獲得類似的規律的,那麼說明咱們的詞向量是很不錯的。即咱們想作的是獲得函數g(),使之知足 orm

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


那麼爲了使兩者儘可能想近,對於損失函數,一個直觀的想法就是MSE,即 xml

(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
那麼如今咱們有blog

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


能夠看到這裏咱們和上面的損失函數有點相似了,可是仍是缺乏一個exp,咱們能夠加上它看看,即 ip

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


能夠看到,加上exp以後分子分母的形式就徹底同樣了,咱們能夠將其一塊兒考慮,即如今只須要知足ci

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;">



相關文章
相關標籤/搜索