论文总结:GloVe - Global Vectors for Word Representation

Published On 2020/04/25 Saturday, Singapore

对于一个给定的词 $k$,根据其在不同语境 $i$ , $j$ 出现的概率的比值$\frac{ P_{ik}}{P_{jk}}$,可以区分其语义。

模型输入:语料库

模型输出:词向量

文章链接GloVe: Global Vectors for Word Representation

一个简单的例子: ice 和 steam 两个词分别表示不同的语境。对任意 \(k\), \(k \in\) {soild, gas, water, fashion}。现在基于一个6,000,000词的语料库,计算

结果如下:

  $k=\text{solid}$ $k=\text{gas}$ $k=\text{water}$ $k=\text{fashion}$
$P(k\mid \text{ice})$ $1.9\times 10^{-4}$ $6.6\times 10^{-5}$ $3.0\times 10^{-3}$ $1.7 \times 10^{-5}$
$P(k\mid \text{steam})$ $2.2\times 10^{-5}$ $7.8\times 10^{-4}$ $2.2\times 10^{-3}$ $1.8 \times 10^{-5}$
$P(k\mid \text{ice}) \mathbin{/} P(k\mid \text{steam})$ $8.9$ $8.5\times 10^{-2}$ $1.36$ $0.96$


已知ice和soild比较相关,steam和gas比较相关,water与两者都有比较相关,fashion与两者的关系都比较弱。观察上述结果发现$P(k\mid \text{ice})\mathbin{/}P(k\mid \text{steam})$ 可以区分这个关系。



GloVe 数学过程

为了表示上述例子中的词在语境出现的概率,比如前文中在ice出现的情况下,$k$ 出现的概率 $P(k\mid \text{ice}) $, 我们定义词与词的共现矩阵$X$, 其元素 $X_{ik}$ 表示词 $k$ 出现在词 $i$ 语境的次数。 假设可能出现在词 $i$ 语境的词共有 $K$ 个,这些词出现在词 $i$ 语境的次数求和为

\[\sum^K_{k=1}X_{ik} = X_i\]

那么,共现概率$P_{i,k}$ 为词 $k$ 出现在词 $i$ 语境的概率,可表示为

\[P_{i,k} =P(k|i)= \frac{ X_{ik}}{X_i }\]

基于前文提到的模型核心思想,作者提出更合理的表达词向量的方式应该是基于词的共现概率的比值而非共现概率本身。这里共现概率的比值表示为

\[F(w_i,w_j,\tilde{w}_k) = \frac{ P_{ik}}{P_{jk}}\tag{1}\]

其中 $w \in \mathbb{R}^d$是词向量,$\tilde{w}$则是单独的语境词向量。

公式(1)的右边可以基于语料库计算得到的。而公式的左边则是一个词向量和语境词向量的函数 $F$。那么就需要找到合适的函数 $F$,才能进一步对词向量参数进行估计。函数 $F$的可能性很多,如何选择函数$F$呢?作者提出如果要求函数 $F$ 满足以下几点条件,合适的函数 $F$ 就是唯一的。

首先,公式(1)本质是用词向量空间去表示共现概率的比值$P_{ik} \mathbin{/} P_{jk} $中所蕴含的信息,考虑到词向量空间为线性结构,可以简化函数 $F$为$w_i$和$w_j$差值的函数 。此时,公式(1)可以转化为:

\[F(w_i-w_j,\tilde{w}_k) = \frac{ P_{ik}}{P_{jk}}\tag{2}\]

其次,公式(2) 的右边是一个标量,而函数里面是一个向量,先通过点积将函数里面的值转换为标量形式。此时公式(2)可以转化为:

\[F\Big((w_i-w_j)^T \tilde{w}_k\Big) = \frac{ P_{ik}}{P_{jk}}\tag{3}\]

再者,根据共现矩阵的定义,主体词和语境词是任意可互换的。基于此,函数 $F$需要满足:如果$w$ 和 $\tilde{w}$互换,\(X\) 和 \(X^T\)互换,函数不变。

\[F((w_i-w_j)^T \tilde{w}_k) = \frac{ F(w_i^T \tilde{w}_k )}{F(w_j^T \tilde{w}_k )}\tag{4}\]

其中,结合公式(3)和公式(4):

\[F(w_i^T \tilde{w}_k) = P_{ik} = \frac{ x_{ik}}{X_i }\tag{5}\]

假设 $F$ 为 exp , 公式(5)两边取对数可以写为

\[w_i^T \tilde{w}_k = log(P_{ik}) = log( X_{ik})- log({X_i })\tag{6}\]

如果$w$ 和 $\tilde{w}$可以互换,则F具有对称性。也就是说我们将公式(6)左边$w$ 和 $\tilde{w}$进行互换, 其公式右边应该相等:

\[\tilde{w_i}^T w_k = w_k^T\tilde{w}_i\]

通过公式(6),我们知道: \(\tilde{w_i}^T w_k = w_k^T\tilde{w}_i = log(P_{ki}) = log( X_{ki})- log({X_k})\)

由于\(X\) 和 \(X^T\)可以互换

\[w_k^T \tilde{w}_i = log(P_{ki}) = log( X_{ik})- log({X_k })\tag{7}\]

对比公式(6)和公式(7),我们发现公式的左边相等,而右边差别为$log({X_i })$ 和 $log({X_k })$。如何解决这个问题呢?将他们变成偏差项带入到放入公式(6)中,得到的新的该函数如下:

\[w_i^T \tilde{w}_k = log( x_{ik}) - b_i-\tilde{b}_k \tag{8}\]

此时调换$w$ 和 $\tilde{w}$, 其公式右边相等,满足对称性。

这时候,使用最小二乘算法,损失函数可以表示为:

\[J = \sum^{V}_{i,j=1}(w_i^T \tilde{w}_k +b_i+\tilde{b}_k -log(X_{ik}))^2\tag{9}\]

其中 $V$ 为语料库的单词总个数。

观察公式(9)发现存在两点问题。首先通常来讲,共现矩阵是个稀疏矩阵,也就是说 $X_{ik}$会存在为0的值,这时候算法无法收敛。为解决这个问题,这里要求$log(X_{ik}) = log(1+X_{ik})$。 其次,没有区分共现次数高的单词对和共现次数高的单词对。为解决这个问题,文章加入权重函数$f(X_{ik})$,

\[J = \sum^{V}_{i,j=1}f(X_{ik})(w_i^T \tilde{w}_k +b_i+\tilde{b}_k -log(X_{ik}))^2\tag{10}\]

而权重函数需要满足以下条件:

  1. $f(0)=0$
  2. $f(x)$为非减函数
  3. 当x非常大时,\(f(x)\)不会太大使得对于共现次数高的单词对加上过大的权重。

作者提出来以下函数。既满足上述条件中,又能很好地参数化:

\[f(x) = \begin{cases} (x/x_{max})^{\alpha}, & \text{if $x< x_{max}$ is even} \\ 1, & \text{otherwise} \end{cases}\]





💚 Back to Home