GloVe 模型介绍
下面的内容主要来自https://blog.csdn.net/u014665013/article/details/79642083
GloVe的推导
GloVe是基于共现信息来获得词的分布表示的,所以需要统计词的共现对信息。在设定的窗口内,统计中心词(k)与其上下文词(i)的共现次数(X_{i,k})。那么有
[P_{i,k} = dfrac{X_{i,k}}{X_i}
]
其中
[X_i = sum_{j}X_{i,j}
]
作者发现对于任意三个词(i,j,k), $$
ratio_{i,j,k} = dfrac{P_{i,k}}{P_{j,k}}
[存在以下关系
| $ratio_{i,j,k}$ | 单词$j,k$相关 | 单词$j,k$不相关 |
| ------ | ------ | ------ |
|单词$i,k$相关| 趋近1 | 很大 |
|单词$i,k$不相关|很小|趋近1|
GloVe模型要做的就是建模上述关系,因此需要寻找一个函数$g$,使得
]
dfrac{P_{i,k}}{P_{j,k}} = g(v_i, v_j, v_k)
[一个较为直观的做法就是
]
g(v_i,v_j,v_k) = exp(v_i^Tv_k - v_j^Tv_k) = dfrac{exp (v_iTv_k)}{exp(v_jTv_k)} = dfrac{P_{i,k}}{P_{j,k}}
[所以,对于任意的词$i,k$,仅需要使得$v_i^Tv_k = log P_{i,k}$即可,便可得到目标函数
]
J= sum_{i,k}N(v_iTv_k - log P_{i,k})^2
[等等,这个方法似乎存在问题,因为$log P_{i,k}$ 不等于$log P_{k,i}$但是$v_i^Tv_j = v_j^Tv_i$,这样需要进行补救一下
]
log P_{i,k} = log(X_{i,k}) - log(X_i) = v_i^Tv_k
[此时引入两个偏置$b_i, b_j$,
使得
]
log(X_{i,k}) = v_i^Tv_k + b_i + b_k
[$log(X_i)$被偏置项吸纳。进而,我们的优化目标变为
]
J = sum_{i,k}f(X_{i,k})(v_i^Tv_j+b_i+b_k - log(X_{i,k}))^2
[其中$f(X_{i,k})$为一个常量,其计算如下
]
f(x) = egin{cases}
(x/xmax)^0.75 & x < xmax
1 & x ge xmax
end{cases}
[其作用是某些词频率过高,通常没有多大的意义,比如停用词,所以不能给过高的权重,此处的xmax是一个超参数。
## 如何理解Global
GloVe 即Global Vectors,如word2vec一样,都有滑动窗口,那么Global体现在哪里?
从上面的推导过程中,我们不难发现,GloVe在参数的训练前,就已经统计好了一个共现矩阵,而这个共现矩阵是全局的,是整个语料的,然后再基于此进行参数学习,而word2vec在参数学习的时候,是局部的,每次只在一个窗口内的学习,只利用到了该窗口内的信息,比如cbow,每次都是基于单个窗口内的上下文词预测中心词。]