太久沒輸出乾貨了,今天來輸出一波。這個話題太大了,就談一點,glove模型的致命缺陷。

glove模型的損失函數:

loss = sum_{w_i,w_j}left(langle oldsymbol{v}_i, oldsymbol{hat{v}}_j
angle+b_i+hat{b}_j-log X_{ij}
ight)^2

在glove模型中,對目標詞向量和上下文向量做了區分,並且最後將兩組詞向量求和,得到最終的詞向量。模型中最大的問題在於參數 b_i,b_j 也是可訓練的參數,這會帶來什麼問題呢?

看下面的證明:

egin{aligned}sum_{w_i,w_j}left(langle oldsymbol{v}_i, oldsymbol{hat{v}}_j
angle+b_i+hat{b}_j-log X_{ij}
ight)^2\  =sum_{w_i,w_j}left[langle oldsymbol{v}_i+oldsymbol{c}, oldsymbol{hat{v}}_j+oldsymbol{c}
angle+Big(b_i-langle oldsymbol{v}_i, oldsymbol{c}
angle - frac{|oldsymbol{c}|^2}{2}Big)
ight.\  qquadqquadqquadqquadleft.+Big(hat{b}_j-langle oldsymbol{hat{v}}_j, oldsymbol{c}
angle - frac{|oldsymbol{c}|^2}{2}Big)-log X_{ij}
ight]^2end{aligned}

也就是說,對於glove訓練處的詞向量加上任意一個常數向量後,它還是這個損失函數的解!這就是很大的問題了,一旦在詞向量上加上一個很大的常數向量,那麼所有詞向量之間就會非常接近,從而失去了詞向量的意義。實踐中可以發現,對於glove生成的詞向量,停用詞的模長遠大於word2vec詞向量的模長。如果下一步,你不過濾停用詞,直接把幾個詞向量加起來求和用作其他任務時(如文本分類),停用詞的詞向量在求和詞向量中佔得比重還比較大,這明顯很不合理。

可以看出glove這個模型,有借鑒推薦系統中的FM(Factorization Machines)的思想,在推薦系統中,參數 b_i,b_j代表用戶對特定商品的偏好,用一個偏移量來描述是合理的,但直接應用到詞向量中,就不是很合理了。word2vec裏是沒有參數 b_i,b_j,所以大家會覺得word2vec效果好些,應用更加普及。


找規律,寫詞語:
1.生死、優劣:天地、黑白、老少、前後(前後是反義詞)
2.明白、抬舉:奔騰、長久、醜陋、疼痛(前後是近義詞)

差別不大,本質都是一樣,只是求解方法和模型構造略有差異,都是詞向量技術。現實工程情況,是你是否能找到高質量的訓練數據。


佔個坑,雖然關注的人少不過覺得是個好問題,看什麼時候有時間寫答案


大家可以針對一兩個瞭解熟悉的表達自己的觀點,不必對比全部。


推薦閱讀:
查看原文 >>
相關文章