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,每次都是基于单个窗口内的上下文词预测中心词。\]

posted @ 2018-11-07 12:07  狂徒归来  阅读(555)  评论(0编辑  收藏  举报