GloVe词分布式表示
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) = \begin{cases}
(x/xmax)^0.75 & x < xmax\
1 & x \ge xmax
\end{cases}
\[其作用是某些词频率过高,通常没有多大的意义,比如停用词,所以不能给过高的权重,此处的xmax是一个超参数。
## 如何理解Global
GloVe 即Global Vectors,如word2vec一样,都有滑动窗口,那么Global体现在哪里?
从上面的推导过程中,我们不难发现,GloVe在参数的训练前,就已经统计好了一个共现矩阵,而这个共现矩阵是全局的,是整个语料的,然后再基于此进行参数学习,而word2vec在参数学习的时候,是局部的,每次只在一个窗口内的学习,只利用到了该窗口内的信息,比如cbow,每次都是基于单个窗口内的上下文词预测中心词。\]
夜空中最亮的星,照亮我前行