赞
踩
当前,学习词向量表示的方法主要有两种类型:一种是基于全局矩阵分解的方法,如LSA,另一种是局部上下文窗口的方法,如Mikolov在2013年提出来的CBOW和skip-gram方法。但是这两种方法都有各自的缺陷,其中,LSA虽然有效利用了统计信息,但是在词汇类比方面却很差,而CBOW和skip-gram虽然可以很好地进行词汇类比,但是因为这两种方法是基于一个个局部的上下文窗口方法,因此,没有有效地利用全局的词汇共现统计信息。
为了克服全局矩阵分解和局部上下文窗口的缺陷,在2014年,Jeffrey Pennington等人提出了一种新的GloVe方法,该方法基于全局词汇共现的统计信息来学习词向量,从而将统计信息与局部上下文窗口方法的优点都结合起来,并发现其效果确实得到了提升。
首先,记词汇的共现矩阵为 X X X,其中,每一个元素 X i j X_{i j} Xij表示词汇 j j j出现在词汇 i i i上下文中的次数总和,令 X i = ∑ k X i k X_{i}=\sum_{k} X_{i k} Xi=∑kXik表示所有出现在词汇 i i i上下文中的词汇的次数总和,令 P i j = P ( j ∣ i ) = X i j / X i P_{i j}=P(j | i)=X_{i j} / X_{i} Pij=P(j∣i)=Xij/Xi表示词汇 j j j出现在词汇 i i i上下文的概率。
在介绍GloVe的原理之前,先来看论文中的一个案例,假设
i
=
i
c
e
,
j
=
s
t
e
a
m
i=ice, j=steam
i=ice,j=steam,并对
k
k
k取不同的词汇,如“solid”,“gas”,“water”,“fashion”,根据上面的定义,我们分别计算他们的概率
P
(
k
∣
i
c
e
)
P(k | i c e)
P(k∣ice)、
P
(
k
∣
steam
)
P(k | \text {steam})
P(k∣steam),并计算两者的比率
P
(
k
∣
i
c
e
)
/
P
(
k
∣
s
t
e
a
m
)
P(k | i c e) / P(k | s t e a m)
P(k∣ice)/P(k∣steam),可以发现,对于“solid”,其出现在“ice”上下文的概率应该比较大,出现在“steam”上下文的概率应该比较小,因此,他们的比值应该是一个比较大的数,在下表中是8.9,而对于“gas”,出现在“ice”上下文的概率应该比较小,而出现在“steam”上下文的概率应该比较大,因此,两者的比值应该是一个比较小的数,在下表中是
8.5
×
1
0
−
2
8.5 \times 10^{-2}
8.5×10−2,而对于“water、fashion”这两个词汇,他们与“ice”和steam“的相关性应该比较小,因此,他们的比值应该都是接近1。因此,这样来看可以发现,比值
P
(
k
∣
i
c
e
)
/
P
(
k
∣
s
t
e
a
m
)
P(k | i c e) / P(k | s t e a m)
P(k∣ice)/P(k∣steam)在一定程度上可以反映词汇之间的相关性,当相关性比较低时,其值应该在1附件,当相关性比较高时,比值应该偏离1比较远。
基于这样的思想,作者提出了这样一种猜想,能不能通过训练词向量,使得词向量经过某种函数计算之后可以得到上面的比值,具体如下:
F
(
w
i
,
w
j
,
w
~
k
)
=
P
i
k
P
j
k
F\left(w_{i}, w_{j}, \tilde{w}_{k}\right)=\frac{P_{i k}}{P_{j k}}
F(wi,wj,w~k)=PjkPik
其中,
w
i
,
w
j
,
w
~
k
w_{i}, w_{j}, \tilde{w}_{k}
wi,wj,w~k为词汇
i
,
j
,
k
i, j, k
i,j,k对应的词向量,其维度都为
d
d
d,而
P
i
k
P
j
k
\frac{P_{i k}}{P_{j k}}
PjkPik则可以直接通过语料计算得到,这里
F
F
F为一个未知的函数。由于词向量都是在一个线性向量空间,因此,可以对
w
i
,
w
j
w_{i}, w_{j}
wi,wj进行差分,将上式转变为如下:
F
(
w
i
−
w
j
,
w
~
k
)
=
P
i
k
P
j
k
F\left(w_{i}-w_{j}, \tilde{w}_{k}\right)=\frac{P_{i k}}{P_{j k}}
F(wi−wj,w~k)=PjkPik
由于上式中左侧括号中是两个维度为
d
d
d的词向量,而右侧是一个标量,因此,很容易会想到向量的内积,因此,上式可以进一步改变为:
F
(
(
w
i
−
w
j
)
T
w
~
k
)
=
F
(
w
i
T
w
k
−
w
j
T
w
k
)
=
P
i
k
P
j
k
F\left(\left(w_{i}-w_{j}\right)^{T} \tilde{w}_{k}\right)=F\left(w_{i}^{T} w_{k}-w_{j}^{T} w_{k}\right)=\frac{P_{i k}}{P_{j k}}
F((wi−wj)Tw~k)=F(wiTwk−wjTwk)=PjkPik
由于上式中左侧是一种减法,而右侧是一种除法,很容易联想到指数计算,因此,可以把
F
F
F限定为指数函数,此时有:
exp
(
w
i
T
w
k
−
w
j
T
w
k
)
=
exp
(
w
i
T
w
k
)
exp
(
w
j
T
w
k
)
=
P
i
k
P
j
k
\exp \left(w_{i}^{T} w_{k}-w_{j}^{T} w_{k}\right)=\frac{\exp \left(w_{i}^{T} w_{k}\right)}{\exp \left(w_{j}^{T} w_{k}\right)}=\frac{P_{i k}}{P_{j k}}
exp(wiTwk−wjTwk)=exp(wjTwk)exp(wiTwk)=PjkPik
因此,此时只要确保等式两边分子分母相等即可,即:
exp
(
w
i
T
w
k
)
=
P
i
k
,
exp
(
w
j
T
w
k
)
=
P
j
k
\exp \left(w_{i}^{T} w_{k}\right)=P_{i k}, \exp \left(w_{j}^{T} w_{k}\right)=P_{j k}
exp(wiTwk)=Pik,exp(wjTwk)=Pjk
进一步的,可以转化为对语料中的所有词汇,考察
exp
(
w
i
T
w
k
)
=
P
i
k
=
X
i
k
X
i
\exp \left(w_{i}^{T} w_{k}\right)=P_{i k}=\frac{X_{i k}}{X_{i}}
exp(wiTwk)=Pik=XiXik,即:
w
i
T
w
k
=
log
(
X
i
k
X
i
)
=
log
X
i
k
−
log
X
i
w_{i}^{T} w_{k}=\log \left(\frac{X_{i k}}{X_{i}}\right)=\log X_{i k}-\log X_{i}
wiTwk=log(XiXik)=logXik−logXi
由于上式左侧
w
i
T
w
k
w_{i}^{T} w_{k}
wiTwk中,调换
i
i
i和
k
k
k的值不会改变其结果,即具有对称性,因此,为了确保等式右侧也具备对称性,引入了两个偏置项,即
w
i
T
w
k
=
log
X
i
k
−
b
i
−
b
k
w_{i}^{T} w_{k}=\log X_{i k}-b_{i}-b_{k}
wiTwk=logXik−bi−bk此时,
log
X
i
\log X_{i}
logXi已经包含在
b
i
b_{i}
bi当中。因此,此时模型的目标就转化为通过学习词向量的表示,使得上式两边尽量接近,因此,可以通过计算两者之间的平方差来作为目标函数,即:
J
=
∑
i
,
k
=
1
V
(
w
i
T
w
~
k
+
b
i
+
b
k
−
log
X
i
k
)
2
J = \sum_{i, k=1}^{V}\left(w_{i}^{T} \tilde{w}_{k}+b_{i}+ b_{k}-\log X_{i k}\right)^{2}
J=i,k=1∑V(wiTw~k+bi+bk−logXik)2
但是这样的目标函数有一个缺点,就是对所有的共现词汇都是采用同样的权重,因此,作者对目标函数进行了进一步的修正,通过语料中的词汇共现统计信息来改变他们在目标函数中的权重,具体如下:
J
=
∑
i
,
k
=
1
V
f
(
X
i
k
)
(
w
i
T
w
~
k
+
b
i
+
b
k
−
log
X
i
k
)
2
J=\sum_{i, k=1}^{V} f\left(X_{i k}\right)\left(w_{i}^{T} \tilde{w}_{k}+b_{i}+b_{k}-\log X_{i k}\right)^{2}
J=i,k=1∑Vf(Xik)(wiTw~k+bi+bk−logXik)2
这里
V
V
V表示词汇的数量,并且权重函数
f
f
f必须具备以下的特性:
综合以上三点特性,作者提出了下面的权重函数:
f
(
x
)
=
{
(
x
/
x
max
)
α
if
x
<
x
max
1
otherwise
f(x)=\left\{
作者在实验中设定
x
max
=
100
x_{\max }=100
xmax=100,并且发现
α
=
3
/
4
\alpha=3 / 4
α=3/4时效果比较好。函数的图像如下图所示:
以上就是有关GloVe原理的介绍,作者其实也是基于最开始的猜想一步一步简化模型的计算目标,最后看GloVe的目标函数时发现其实不难计算,但是要从最开始就想到这样一个目标函数其实还是很难的。最后做一下总结:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。