GloVe: Global Vectors for Word Representation 阅读笔记

GloVe: Global Vectors for Word Representation 阅读笔记

词嵌入模型背景研究

目前关于词嵌入模型的研究主要有两个方向

  1. 全局矩阵分解模型——latent semantic analysis (LSA)

过多的基于统计学信息,导致在词类类比任务上表现不好

  1. 基于上下文的窗口模型——skip-gram model

依赖上下文信息过多,导致无法有效获取全局信息

所以作者的想法是将二者的优点结合起来,基于共现矩阵的非零元素的统计信息,而不是全部的稀疏矩阵或者特定的上下文窗口。

The GloVe Model

X_{ij}:在单词i周围出现j的次数

X_i:i周围出现所有单词的总次数

P_{ij}=P(j|i)=X_{ij}/X_i

{ratio_{i,j,k}}=P_{i,k}/P_{j,k}
这里的k是同时出现在i,j周围的词,GloVe方法引入三元组来表达一个词。这里可以近似理解为k为标杆,通过k来展示ij的差异。

probability and Ratio k=solid k=gas k=water k=fashion
P(k|ice) i:ice 1.9*10^{-4} 6.6*10^{-5} 3.0*10^{-3} 1.7*10^{-5}
P(k|steam) j:steam 2.2*10^{-5} 7.8*10^{-4} 2.2*10^{-3} 1.8*10^{-5}
P(k|ice)/P(k|steam) 8.9 8.5*10^{-2} 1.36 0.96

Ratio的规律

Ratio j 与 k 相关 j 与 k 不相关
i 与 k 相关 趋于1 很大
i 与 k 不相关 很小 趋于1

相比于概率矩阵,Ratio矩阵避免了大量的稀疏

那么如何理解Ratio值所代表的含义呢

我认为Ratio的值可以近似理解为ijk特征上的差异,icesteam与都water相关,所以icesteamwater特征上差异小,反应在Ratio值就会趋于一。同理在isolid相关,但是和jsolid不相关,所以差异大,Ratio值就是很大或者很小。

Ratio规律是正确的,Ratio的值也是可以求得的。那么如果把词向量w_i,w_j,w_k 输入进一个函数F,得到的值和我们在文集所统计的Ratio值相等,我们就可以认为这些词向量准确的表达词的含义。

那么就会有F(w_i,w_j,w_k)=P_{i,k}/P_{j,k}=Ratio

Ratio的含义就是i,j之间在k特征上的差异,向量相减代表的就是差异,所以我们可以简化函数为F(w_i-w_j,w_k)=P_{i,k}/P_{j,k}

我们发现等式右侧是标量,左边是向量。为了在神经网络里面计算方便,我们把等式简化为F((w_i-w_j)^T,w_k)=P_{i,k}/P_{j,k}

目前等式左边是差右边是商,对左边取exp,得到

exp({w_i}^Tw_k)/exp({w_j}^Tw_k)=P_{i,k}/P_{j,k}

接下来我们只需考虑分子

exp({w_i}^Tw_k)=P_{i,k}=X_{ik}/X_i

{w_i}^Tw_k=log(P_{i,k})=log(X_{ik})-log(X_i)

公式中如果没有log(X_i)就是会体现出对称性,就是可以交换i和k。所以我们把它收进biasb_i里面,为了体现对称性再加入b_k.
这时又出现了新的问题,logX_{ik}如果等于零怎么办?老方法是logX_{ik}=log(1+X_{ik}),这么做的弊端就是共现矩阵中那些从未出现的或者出现次数很少的词都获得了相同的值,这就产生了很大的偏差。我们的做法就是加入一个weight函数f(x):

logX_{ik}={w_i}^Tw_k+b_i+b_k

  1. f(0)=0对没有出现过的组合,权重就是0 。
  2. f(x)是非减函。
  3. f(x)对于较大值的x,函数值要相对小。

于是我们有了损失函数:

损失函数

weight函数

image.png

作者认为x_{max}=100,\alpha=3/4是比较好的

你可能感兴趣的:(GloVe: Global Vectors for Word Representation 阅读笔记)