GloVe: Global Vectors for Word Representation
论文:GloVe: Global Vectors for Word Representation
作者:Jeffrey Pennington, Richard Socher, Christopher D. Manning
时间:2014
一、完整代码
稍后补充
二、论文解读
2.1 当前存在的两种word2vec模型
word2vec的两个主要处理方法:
1) Matrix Factorization Methods,如潜在语义分析(LSA)
2) Shallow Window-Based Methods,如CBOW和Skip-gram
目前,这两个模型方法都存在明显的缺陷。虽然像LSA这样的方法很有效地利用了统计信息,但它们在单词类比任务上做得相对较差,这表明了一个次优的向量空间结构。像skip-gram这样的方法可能在类比任务上做得更好,但它们很少利用语料库的统计数据,因为它们训练的是单独的局部上下文窗口,而不是全局共现计数。
而GloVe能结合两种优点,通过只训练词共现矩阵中的非零元素,而不是训练整个稀疏矩阵或大型语料库中的单个上下文窗口,有效地利用了统计信息。产生了一个具有有意义的子结构的向量空间;
2.2 GloVe的原理
2.2.1 构建词共现矩阵
与LSA利用word和top构建词共现矩阵不同的是,GloVe利用的是word和word构建的词共现矩阵,实现原理很简单,利用Shallow Window-Based Methods 即n-gram构建词共现矩阵,接下来我们开始下一步的推导;
2.2.2 定义和推导
首先我们定义词共现矩阵为 X X X,其 X i j X_{ij} Xij表示为 w o r d i word_i wordi和 w o r d j word_j wordj在n-gram中出现的次数;定义 X i = ∑ k X i k X_{i}=\sum_{k}X_{ik} Xi=∑kXik即所有词包含 w o r d i word_{i} wordi出现的次数之和;最后定义 P i j = P ( j ∣ i ) = X i j X i P_{ij}=P(j|i)=\frac{X_{ij}}{X_{i}} Pij=P(j∣i)=XiXij,表示 w o r d j word_j wordj出现在包含 w o r d i word_i wordi的上下文出现次数的可能性;
从图中我们可以看出,虽然k在ice和steam出现的概率不高,但是两者的概率的比值根据k值都有一定的变化,再根据k为solid或者gas的结果中我们可以看出,solid大于1对应分子,gas小于1对应分母;再从water和fashion两个与solid和gas几乎无相关的词的值在1附近可以看出,该比率能更好地区分相关单词和不相关单词;
在这里我们定义
w
o
r
d
i
word_i
wordi和
w
o
r
d
j
word_j
wordj这两个词的词向量为
w
i
w_i
wi和
w
j
w_j
wj,随便定义一个映射函数,包含
w
i
,
w
j
,
w
~
k
w_i,w_j,\widetilde w_k
wi,wj,w
k,不需要在意是怎么映射的;
F
(
w
i
,
w
j
,
w
~
k
)
=
P
i
k
P
j
k
F(w_i,w_j,\widetilde w_k)=\frac{P_{ik}}{P_{jk}}
F(wi,wj,w
k)=PjkPik然后由于向量空间本质上是线性结构,所以最自然的方法是利用向量差。即可以把
F
(
w
i
,
w
j
,
w
~
k
)
F(w_i,w_j,\widetilde w_k)
F(wi,wj,w
k)转化为
F
(
w
i
−
w
j
,
w
~
k
)
F(w_i-w_j,\widetilde w_k)
F(wi−wj,w
k),即
F
(
w
i
−
w
j
,
w
~
k
)
=
P
i
k
P
j
k
F(w_i-w_j,\widetilde w_k)=\frac{P_{ik}}{P_{jk}}
F(wi−wj,w
k)=PjkPik再可以看到减数和被减数分别代表着分子和分母,然而分子和分母之间又有一个k与他们联系起来,这里我们可以再进行转化一下,把
F
(
w
i
−
w
j
,
w
~
k
)
F(w_i-w_j,\widetilde w_k)
F(wi−wj,w
k)转化为
F
(
(
w
i
−
w
j
)
T
w
~
k
)
F((w_i-w_j)^T\widetilde w_k)
F((wi−wj)Tw
k),即
F
(
(
w
i
−
w
j
)
T
w
~
k
)
=
P
i
k
P
j
k
F((w_i-w_j)^T\widetilde w_k)=\frac{P_{ik}}{P_{jk}}
F((wi−wj)Tw
k)=PjkPik在这里就结束了吗?不!我们还给这个函数添加一个新的功能
F
(
(
w
i
−
w
j
)
T
w
~
k
)
=
F
(
w
i
T
w
~
k
)
F
(
w
j
T
w
~
k
)
=
P
i
k
P
i
k
F((w_i-w_j)^T\widetilde w_k)=\frac{F(w_i^T\widetilde w_k)}{F(w_j^T\widetilde w_k)}=\frac{P_{ik}}{P_{ik}}
F((wi−wj)Tw
k)=F(wjTw
k)F(wiTw
k)=PikPik得到
F
(
w
i
T
w
~
k
)
=
P
i
k
=
X
i
k
X
i
F(w_i^T\widetilde w_k)=P_{ik}=\frac{X_{ik}}{X_i}
F(wiTw
k)=Pik=XiXik由于需要满足这个新功能的函数只有指数函数则定义
F
(
x
)
=
e
x
F(x)=e^x
F(x)=ex,则有
w
i
T
w
~
k
=
l
n
(
X
i
k
X
i
)
=
l
n
(
X
i
k
)
−
l
n
(
X
i
)
w_i^T\widetilde w_k=ln(\frac{X_{ik}}{X_i})=ln(X_{ik}) - ln(X_i)
wiTw
k=ln(XiXik)=ln(Xik)−ln(Xi)从自由度的角度来解释由于公式
X
i
=
∑
k
X
i
k
X_{i}=\sum_{k}X_{ik}
Xi=∑kXik其中
X
i
X_{i}
Xi的值是否固定不影响
X
i
k
X_{ik}
Xik的关系,我们可以把其看作一个常数,通过对称性,我们可以把其值表示为
w
i
T
w
~
k
+
b
i
+
b
~
k
=
l
n
(
X
i
k
)
w_i^T\widetilde w_k + b_i + \widetilde b_k = ln(X_{ik})
wiTw
k+bi+b
k=ln(Xik)同时要注意到词共现矩阵肯定会出现0元素,所以我们需要进行一下优化,有
w
i
T
w
~
k
+
b
i
+
b
~
k
=
l
n
(
X
i
k
+
1
)
o
r
X
i
k
=
X
i
k
+
1
w_i^T\widetilde w_k + b_i + \widetilde b_k = ln(X_{ik}+1) \quad or \quad X_{ik}=X_{ik}+1
wiTw
k+bi+b
k=ln(Xik+1)orXik=Xik+1 到这一步其实还有一个缺陷:会出现一些无意义的词共现程度非常大,所以我们需要加强一下出现词少的权重,减弱一下出现词多的权重;定义函数如下
f
(
x
)
=
{
(
x
/
x
m
a
x
)
α
x
<
x
m
a
x
1
e
l
s
e
f(x)=\begin{cases} (x/x_{max})^\alpha \quad & x<x_{max} \\ 1 \quad & else\end{cases}
f(x)={(x/xmax)α1x<xmaxelse 在这里我们需要定义两个参数
x
m
a
x
x_{max}
xmax和
α
\alpha
α;
最后我们定义损失函数如下:
J
=
∑
i
,
j
=
1
V
f
(
X
i
j
)
(
w
i
T
w
~
j
+
b
i
+
b
~
k
−
l
n
(
X
i
j
)
)
2
J=\sum_{i,j=1}^Vf(X_{ij})(w_i^T\widetilde w_j + b_i + \widetilde b_k - ln(X_{ij}))^2
J=i,j=1∑Vf(Xij)(wiTw
j+bi+b
k−ln(Xij))2
一般来说我们把
x
m
a
x
x_{max}
xmax,
α
\alpha
α分别固定为100和0.75;
2.2.3 与其他模型的关系
其他模型一般是使用softmax进行分类,即要求 Q i j = e x p ( w i T w ~ j ) ∑ k = 1 V e x p ( w i T w ~ k ) Q_{ij}=\frac{exp(w_i^T\widetilde w_j)}{\sum_{k=1}^{V}exp(w_i^T\widetilde w_k)} Qij=∑k=1Vexp(wiTw k)exp(wiTw j)达到最大;这样我们就可以定义其损失函数为 J = − ∑ i ∈ c o r p u s , j ∈ c o n t e x t ( i ) l o g ( Q i j ) = − ∑ i V ∑ j V X i j l o g ( Q i j ) J=-\sum_{i \in corpus, j \in context(i)}log(Q_{ij})=-\sum_{i}^V\sum_{j}^VX_{ij}log(Q_{ij}) J=−i∈corpus,j∈context(i)∑log(Qij)=−i∑Vj∑VXijlog(Qij)
不懂可以考虑一下: ∑ i ∈ c o r p u s , j ∈ c o n t e x t ( i ) = ∑ i ∑ j X i j \sum_{i \in corpus, j \in context(i)} =\sum_{i} \sum_{j}X_{ij} ∑i∈corpus,j∈context(i)=∑i∑jXij ,在这里又可以通过 P i j = P ( j ∣ i ) = X i j X i P_{ij}=P(j|i)=\frac{X_{ij}}{X_{i}} Pij=P(j∣i)=XiXij转化为 J = − ∑ i V ∑ j V X i j l o g ( Q i j ) = − ∑ i V X i ∑ j V P i j l o g ( Q i j ) J=-\sum_{i}^V\sum_{j}^VX_{ij}log(Q_{ij})=-\sum_{i}^VX_i\sum_{j}^VP_{ij}log(Q_{ij}) J=−i∑Vj∑VXijlog(Qij)=−i∑VXij∑VPijlog(Qij) 其中 P i j P_{ij} Pij表示 w o r d j word_j wordj出现在包含 w o r d i word_i wordi的上下文出现次数的可能性; ∑ j P i j l o g ( Q i j ) \sum_{j}P_{ij}log(Q_{ij}) ∑jPijlog(Qij)可以写为 H ( P i , Q i ) H(P_i,Q_i) H(Pi,Qi),不同的模型主要差别显示在了这里, P i j P_{ij} Pij和 l o g ( Q i j ) log(Q_{ij}) log(Qij)都有 w o r d j word_j wordj出现在包含 w o r d i word_i wordi的上下文出现次数的可能性的意思,则应该输出一个平方项,于此同时 l o g ( Q i j ) log(Q_{ij}) log(Qij)是负数,可以把负号给去掉,则应该使其平方和尽可能的小,则可以表示为 J ^ = ∑ i , j V X i ( X i j − e x p ( w i T w ~ j ) ) 2 \hat{J}=\sum_{i,j}^VX_i(X_{ij}-exp(w_i^T\widetilde w_j))^2 J^=i,j∑VXi(Xij−exp(wiTw j))2为了简化计算有 J ^ = ∑ i , j V X i ( l o g X i j − w i T w ~ j ) 2 \hat{J}=\sum_{i,j}^VX_i(logX_{ij}-w_i^T\widetilde w_j)^2 J^=i,j∑VXi(logXij−wiTw j)2再根据优化,减弱出现次数多的权重,加强出现次数少的权重,最后我们可以得到 J = ∑ i , j = 1 V f ( X i j ) ( w i T w ~ j − l n ( X i j ) ) 2 J=\sum_{i,j=1}^Vf(X_{ij})(w_i^T\widetilde w_j - ln(X_{ij}))^2 J=i,j=1∑Vf(Xij)(wiTw j−ln(Xij))2
三、过程实现
稍后补充
四、整体总结
GloVe是一种新的全局对数双线性回归模型的无监督学习,在单词类比、单词相似度和命名实体识别任务上优于其他模型(2014年之前)。