GloVe与论文学习
文章目录
一、介绍
G l o V e GloVe GloVe最早由斯坦福大学的 Jeffrey Pennington 于2014年提出,发表的文章为《GloVe: Global Vectors for Word Representation》,发表在 E M N L P EMNLP EMNLP上
二、论文导读
1、背景知识
文章中提到了学习词向量的两种方法:
- 矩阵分解方法( Matrix Factorization Methods ):所谓的矩阵分解方法,是先构造一个词共现矩阵,例如如果这里有三句话: I enjoy flying. 、 I like NLP. 、 I like deep learning. ,则这词共现矩阵如下图所示(规定 w i n d o w = 1 window=1 window=1,即只有在该词左右的一个词才称之为共同出现);通常来说,词共现矩阵非常大,为 ∣ V ∣ × ∣ V ∣ |V| \times |V| ∣V∣×∣V∣的一个矩阵,因此我们需要使用降维的方法对矩阵降维,得到的降维后的矩阵就是一个一个的词向量
- 基于上下文的向量学习方法( Shallow Window-Based Methods ):所谓的基于上下文的向量学习方法就是
W
o
r
d
2
V
e
c
Word2Vec
Word2Vec中的
C
B
O
W
CBOW
CBOW和
S
k
i
p
−
G
r
a
m
Skip-Gram
Skip−Gram这两种方法:
文章中提到,上述的两种学习词向量的方法都有缺点,矩阵分解方法在词对推理任务上表现特别差,同时解释性较差;而基于上下文的向量学习方法的缺点是无法使用全局的统计信息,因此文章中提出了一种对数双线性回归模型
2、研究成果及意义
- 成果:
- 在词对推理数据集上取得最好的结果
- 公布了一系列基于 G l o V e GloVe GloVe的预训练词向量
- 意义:推动了基于深度学习的自然语言处理的发展,尤其是预训练词向量被广泛引用,在 Google Scholar 上的引用量已破万
三、论文精读
1、GloVe模型
文章中提到,我们可以使用一些词来描述一个词,比如我们使用冰块和蒸汽来描述固体、气体、水和时尚四个词。如果与词语与冰块接近,并且和蒸汽不接近,那么这个词很有可能是固体,并且概率比值很大;如果与蒸汽接近,并且和冰块不接近:那么这个词很有可能是气体并且概率比值很小;如果与冰块和蒸汽都不接近: 那么这个词很有可能是水和时尚并且概率比值不大不小,论文给出的具体的结果如下表所示:
因此,根据这个思路,我们就可以通过共现矩阵的概率比值可以用来区分词,这也是 G l o V e GloVe GloVe模型的核心思想.
既然通过概率比值可以用来区分词语,那么应该如何计算概率比值呢?文章中给出了概率比值的计算公式:
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有关,表示的含义是词
w
~
k
\tilde{w}_{k}
w~k与词
w
i
w_{i}
wi和
w
j
w_{j}
wj这两个词之间的差异,因此,既然是表示
w
i
w_{i}
wi和
w
j
w_{j}
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
同时注意到,最后得到的比值一定是一个数,即标量;而等式坐标的括号中,
w
i
,
w
j
,
w
~
k
w_{i}, w_{j}, \tilde{w}_{k}
wi,wj,w~k均是词向量,如果将向量转化为标量呢?文章中给出的方法是内积的方法,即公式可转换为:
F
(
(
w
i
−
w
j
)
⊤
w
~
k
)
=
P
i
k
P
j
k
F\left(\left(w_{i}-w_{j}\right)^{\top} \tilde{w}_{k}\right)=\frac{P_{i k}}{P_{j k}}
F((wi−wj)⊤w~k)=PjkPik
这里我们就可以认为公式中的
F
F
F表示的是一个标量映射到了另一个标量,而括号中的参数可以通过学习得到
前文提到 F F F表示的是一个标量映射到了另一个标量,那么 F F F具体应该是一个怎样的函数呢?文章中将 F F F函数认为是指数函数 e x p exp exp,那么可以得到:
F
(
(
w
i
−
w
j
)
⊤
w
~
k
)
)
=
F
(
w
i
⊤
w
~
k
−
w
j
⊤
w
~
k
)
=
exp
(
w
i
⊤
w
~
k
−
w
j
⊤
w
~
k
)
=
exp
(
w
i
⊤
w
~
k
)
exp
(
w
j
⊤
w
~
k
)
=
P
i
k
P
j
k
\left.F\left(\left(w_{i}-w_{j}\right)^{\top} \tilde{w}_{k}\right)\right)=F\left(w_{i}^{\top} \tilde{w}_{k}-w_{j}^{\top} \tilde{w}_{k}\right)=\exp \left(w_{i}^{\top} \tilde{w}_{k}-w_{j}^{\top} \tilde{w}_{k}\right)=\frac{\exp \left(w_{i}^{\top} \tilde{w}_{k}\right)}{\exp \left(w_{j}^{\top} \tilde{w}_{k}\right)}=\frac{P_{i k}}{P_{j k}}
F((wi−wj)⊤w~k))=F(wi⊤w~k−wj⊤w~k)=exp(wi⊤w~k−wj⊤w~k)=exp(wj⊤w~k)exp(wi⊤w~k)=PjkPik
我们可以令分子分母分别等于
P
i
k
P_{ik}
Pik和
P
j
k
P_{jk}
Pjk,即:
{
exp
(
w
i
⊤
w
~
k
)
=
P
i
k
exp
(
w
j
⊤
w
~
k
)
=
P
j
k
\left\{ \begin{array}{ll} \exp \left(w_{i}^{\top} \tilde{w}_{k}\right) &= P_{ik}\\ \exp \left(w_{j}^{\top} \tilde{w}_{k}\right) &= P_{jk}\\ \end{array} \right.
{exp(wi⊤w~k)exp(wj⊤w~k)=Pik=Pjk
因此,对于任意的词向量
w
i
w_i
wi,均成立:
exp
(
w
i
⊤
w
~
k
)
=
P
i
k
,
i
∈
(
0
,
∣
V
∣
)
\exp \left(w_{i}^{\top} \tilde{w}_{k}\right) = P_{ik} , \quad i \in (0, |V|)
exp(wi⊤w~k)=Pik,i∈(0,∣V∣).
由于
P
i
k
=
X
i
k
X
i
P_{ik}=\frac{X_{ik}}{X_{i}}
Pik=XiXik,因此
exp
(
w
i
⊤
w
~
k
)
=
P
i
k
=
X
i
k
X
i
\exp \left(w_{i}^{\top} \tilde{w}_{k}\right) = P_{ik} = \frac{X_{ik}}{X_{i}}
exp(wi⊤w~k)=Pik=XiXik,两边同时取对数得:
w
i
⊤
w
~
k
=
log
(
X
i
k
)
−
log
(
X
i
)
w_{i}^{\top} \tilde{w}_{k} = \log(X_{ik}) - \log(X_{i})
wi⊤w~k=log(Xik)−log(Xi);由于
log
(
X
i
)
\log(X_{i})
log(Xi)只与
X
i
X_i
Xi有关而与
w
k
w_k
wk无关,因此可以将将等式变换为:
w
i
⊤
w
~
k
+
log
(
X
i
)
=
log
(
X
i
k
)
w_{i}^{\top}\tilde{w}_{k}+\log(X_{i})=\log(X_{ik})
wi⊤w~k+log(Xi)=log(Xik),由于与
w
k
w_k
wk无关,因此可以将
log
(
X
i
k
)
\log(X_{ik})
log(Xik)视为一个转置
b
i
b_i
bi,即:
w
i
⊤
w
~
k
+
b
i
=
log
(
X
i
k
)
w_{i}^{\top} \tilde{w}_{k} + b_i= \log(X_{ik})
wi⊤w~k+bi=log(Xik)
注意到,如果我们将
w
i
w_i
wi和
w
k
w_k
wk对调,可以发现等式右边
log
(
X
k
i
)
=
log
(
X
i
k
)
\log(X_{ki})=\log(X_{ik})
log(Xki)=log(Xik),但是
w
k
⊤
w
~
i
+
b
k
w_{k}^{\top} \tilde{w}_{i} + b_k
wk⊤w~i+bk并不等于
w
i
⊤
w
~
k
+
b
i
w_{i}^{\top} \tilde{w}_{k} + b_i
wi⊤w~k+bi,因此$\log(X_{ik}) $的形式为:
w
i
⊤
w
~
k
+
b
i
+
b
j
=
log
(
X
i
k
)
w_{i}^{\top} \tilde{w}_{k} + b_i + b_j= \log(X_{ik})
wi⊤w~k+bi+bj=log(Xik)
推导得到
w
i
⊤
w
~
k
+
b
i
+
b
j
=
log
(
X
i
k
)
w_{i}^{\top} \tilde{w}_{k} + b_i + b_j= \log(X_{ik})
wi⊤w~k+bi+bj=log(Xik)后,我们就可以构造损失函数
J
J
J,文章中使用交叉熵损失函数:
J
=
∑
i
,
j
=
1
V
f
(
X
i
j
)
(
w
i
T
w
~
j
+
b
i
+
b
~
j
−
log
X
i
j
)
2
J=\sum_{i, j=1}^{V} f\left(X_{i j}\right)\left(w_{i}^{T} \tilde{w}_{j}+b_{i}+\tilde{b}_{j}-\log X_{i j}\right)^{2}
J=i,j=1∑Vf(Xij)(wiTw~j+bi+b~j−logXij)2
这里的
f
(
X
i
j
)
f(X_{ij})
f(Xij)用于刻画词对出现次数对损失函数的影响,即词对出现次数越多,那么这两个词在损失函数中的影响越大,但是
f
(
X
i
j
)
f(X_{ij})
f(Xij)需要满足一定的条件:
- X i j = 0 X_{ij}=0 Xij=0时, f ( X i j ) = 0 f(X_{ij})=0 f(Xij)=0:表示没有共现过的权重为0,不参加训练
- 非减函数,因为共现次数越多,权重越大
- f ( X i j ) f(X_{ij}) f(Xij)不能无限制的大,防止 is , are , the 这一类词语的影响
论文中构造的
f
(
X
i
j
)
f(X_{ij})
f(Xij)为
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hohanrl6-1598087000349)(./_image/2020-07-22-00-01-28.jpg?r=40)][center]
其中
x
max
x_{\max}
xmax和
α
\alpha
α均为大于0的数,需要自己决定取值,文章中
x
max
=
100
,
α
=
3
4
x_{\max}=100, \ \ \alpha=\frac{3}{4}
xmax=100, α=43,函数图像如下:
推导完 G l o V e GloVe GloVe的核心公式后,我们再回过头看一下如果进行训练:
- 第一步:构建词共现矩阵( term-tern )
- 第二步:去掉矩阵中为零的元素,只对非零元素进行训练
- 第三步:生成训练集(两组词向量)
2、实验结果及分析
(1)GloVe实现的成绩
- 在词对推理数据集上取得最好的结果
- 多个词相似度任务上取得最好的结果
- 命名实体识别实验结果
(2)分析参数影响
- 从上面第一幅图可以看出,向量的长度对准确率有明显的影响,长度越长,准确率越大
- 从上面第二、三幅图可以看出,窗口大小对准确率也有明显的影响,窗口越大,准确率高;并且在非对称的情况下,语意的表现明显好于对称情况下语意的表现
- 从上面这幅图可以看出,训练语料对结果也有非常大的影响:
- 语料越大,对语法的训练越准确
- 语料越大,对语意的训练准确率并不是一个单调递增的趋势, WiKi 上的语意训练准确率显著大于其他语料的训练准确率,文章中解释这是因为 Wiki 有实时更新,并且在训练之前就已经有一些知识蕴含其中
- 上面这幅图分别与 W o r d 2 V e c Word2Vec Word2Vec中的 C B O W CBOW CBOW和 C l o v e Clove Clove进行比较,发现,在同样的训练时间下, G l o V e GloVe GloVe的准确率比 C B O W CBOW CBOW和 S k i p − G r a m Skip-Gram Skip−Gram要好
3、论文总结
- 关键点
- 矩阵分解的词向量学习方法
- 基于上下文的词向量学习方法
- 预训练词向量
- 创新点
- 提出了一种新的词向量训练模型
- G l o v e Glove Glove在多个任务上取得最好的结果
- 公布了一系列预训练的词向量
- 启发点
- 相对于原始的概率,概率的比值更能够区分相关的词和不相关的词,并且能够区分两种相关的词
- 提出了一种新的对数双线性回归模型,这种模型结合全局矩阵分解和局部上下文的优点
四、代码实现
实现 G l o v e Glove Glove,具体代码见我的Github