GloVe: Global Vectors for Word Representation

共现矩阵包含了当前词的全局上下文信息。以共现矩阵为训练目标,构建词向量进行训练,使得训练出的词向量蕴含了共现矩阵所蕴含的信息。

模型的提出

尽管word2vector在学习词与词间的关系上有了大进步,但是它有很明显的缺点:只能利用一定窗长的上下文环境,即利用局部信息,没法利用整个语料库的全局信息。鉴于此,GloVe诞生了,它的全称是global vector,很明显它是要改进word2vector,利用语料库的全局信息。

在传统上,实现word embedding有两种方式,Matrix Factorization Methods(矩阵分解方法)和Shallow Window-Based Methods(基于浅窗口的方法)

矩阵分解方法的代表是基于奇异值分解(SVD)的LSA算法,该方法对term-document矩阵(矩阵的每个元素为tf-idf)进行奇异值分解,从而得到term的向量表示和document的向量表示。此处使用的tf-idf主要还是term的全局统计特征

基于浅窗口方法代表是word2vec,该算法可以分为skip-gram 和 continuous bag-of-words(CBOW)两类,但都是基于局部滑动窗口计算的。即,该方法利用了局部的上下文特征(local context)。

GloVe模型就是将这两中特征合并到一起的,既使用了语料库的全局统计(overall statistics)特征,也使用了局部的上下文特征(即滑动窗口)。为了做到这一点GloVe模型引入了Co-occurrence Probabilities Matrix(共现概率矩阵)。

共现概率矩阵

1. 什么是共现?

单词 i i i 出现在单词 j j j 的上下文中(论文给的环境是以为中心的左右10个单词区间)叫共现。

2. 什么是共现矩阵?

共现矩阵是单词对共现次数的统计表。我们可以通过大量的语料文本来构建一个共现统计矩阵。

例如,有如下语料:

I like deep learning.
I like NLP.
I enjoy flying.

以窗半径为1来指定上下文环境,则共现矩阵就应该是:
请添加图片描述

共现矩阵有以下特点:

  • 统计的是单词对在给定环境中的共现次数;所以它在一定程度上能表达词间的关系。
  • 共现频次计数是针对整个语料库而不是一句或一段文档,具有全局统计特征。
  • 共现矩阵它是对称的。

共现矩阵的生成使用中心词 + 滑动窗口进行统计。

3. 共现概率

定义 X X X 为共现矩阵,共现矩阵的元素 X i j X_{ij} Xij 为词 j 出现在词 i 环境的次数,令 X i = ∑ k X i k X_i = \sum_k X_{ik} Xi=kXik,为任意词出现在环境的次数(即,共现矩阵第 i 行/列的和),那么:
P i j = P ( j ∣ i ) = X i j X i P_{ij} = P(j | i) = \frac{X_{ij}}{X_i} Pij=P(ji)=XiXij

为词 j 出现在词环境中的概率(这里以频率计算概率),这一概率被称为词 i 和词 j 的共现概率。共现概率是指在给定的环境下出现(共现)某一个词的概率。注意:在给定语料库的情况下,我们是可以事先计算出任意一对单词的共现概率的。

4. 共现概率比

接下来阐述为啥作者要提共现概率和共现概率比这一概念。下面是论文中给的一组数据:

请添加图片描述

先看一下第一行数据,以ice为中心词的环境中出现solid固体的概率是大于gas、fashion而且小于water的,这是很合理的,对吧,因为现实语言使用习惯就是这样的。同理可以解释第二行数据。我们来重点考虑第三行数据:共现概率比。我们把共现概率相比,我们发现:

1.看第三行第一列:当ice的语境下共现solid的概率应该很大,当stream的语境下共现solid的概率应当很小,那么比值就>1。

2.看第三行第二列:当ice的语境下共现gas的概率应该很小,当stream的语境下共现gas的概率应当很大,那么比值就<1。

3.看第三行第三列:当ice的语境下共现water的概率应该很大,当stream的语境下共现water的概率也应当很大,那么比值就近似=1。

4.看第三行第四列:当ice的语境下共现fashion的概率应该很小,当stream的语境下共现fashion的概率也应当很小,那么比值也是近似=1。

因为作者发现用共现概率比也可以很好的体现3个单词间的关联(因为共现概率比符合常理),所以glove作者就大胆猜想,如果能将3个单词的词向量经过某种计算可以表达共现概率比就好了(glove思想)。如果可以的话,那么这样的词向量就与共现矩阵有着一致性,可以体现词间的关系。

GloVe训练过程

1. 构建共现矩阵

假设共现矩阵为 X,每个元素为: X i j X_{ij} Xij其表示的意义是:在整个语料库中,单词 j 和单词 i 共同出现在窗口中的次数。

2. 构建词向量(WOrd Vector)和共现矩阵(Co-ocurrence Matrix)之间的近似关系

论文的作者提出一下的公式可以近似的表达两者之间的关系:
w i T w ~ j + b i + b ~ j = log ⁡ ( X i j ) w_{i}^{T} \tilde{w}_{j}+b_{i}+\tilde{b}_{j}=\log \left(X_{i j}\right) wiTw~j+bi+b~j=log(Xij)
其中, w i T w_{i}^{T} wiT w ~ j \tilde{w}_{j} w~j 是我们最终要求解的词向量, b i b_{i} bi b ~ j \tilde{b}_{j} b~j 分别是两个词向量的 bias term。

为什么要这样做的一个重要假设是:假设我们已经得到了词向量,如果我们使用词向量 v i v_i vi v j v_j vj v k v_k vk 通过某种函数计算得到 r a t i o i , j , k ratio_{i,j,k} ratioi,j,k,能够同样得到这样的规律的话,就意味着我们的词向量具备与共现矩阵很好的一致性,也就是说我们的词向量中蕴含了共现矩阵所蕴含的信息,而共现矩阵中所蕴含的信息就是在一个语料中某两个词语相关性的信息。

3. 构造 loss function

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 \left(X_{i j}\right)\right)^{2} J=i,j=1Vf(Xij)(wiTw~j+bi+b~jlog(Xij))2
这个loss function的基本形式就是最简单的 mean square loss,只不过在此基础上加了一个权重函数 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,那么他们应该不参与到 loss function 的计算当中去,也就是 f ( x ) f(x) f(x) 要满足 f ( 0 ) = 0 f(0) = 0 f(0)=0

满足以上条件的函数有很多,作者采用了如下形式的分段函数:
f ( x ) = { ( x / x max ⁡ ) α  if  x < x max ⁡ 1  otherwise  f(x)= \begin{cases}\left(x / x_{\max }\right)^{\alpha} & \text { if } x<x_{\max } \\ 1 & \text { otherwise }\end{cases} f(x)={(x/xmax)α1 if x<xmax otherwise 

函数图像:
请添加图片描述

这篇glove论文中的所有实验,的取值α都是0.75,而 x m a x x_{max} xmax 为100。

也就是说词对共现次数越多的,有更大的权重将被惩罚得更厉害些;次数少,有更小的惩罚权重,这样就可以使得不常共现的词对对结果的贡献不会太小,而不会过分偏向于常共现的词对。

总结:GloVe的优化目标为

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 \left(X_{i j}\right)\right)^{2} J=i,j=1Vf(Xij)(wiTw~j+bi+b~jlog(Xij))2

4. 训练

虽然很多人声称GloVe是一种无监督的学习方式(因为它确实不需要人工标注label),但其实它还是有label的,这个label就是优化目标中的 l o g ( X i j ) log(X_{ij}) log(Xij)。而优化目标中的 w i w_i wi w ~ j \tilde{w}_{j} w~j就是要不断更新/学习的参数,所以本质上它的训练方式跟监督学习的训练方法没什么不一样,都是基于梯度下降的。

具体地,采用了AdaGrad的梯度下降算法,对矩阵中的所有非零元素进行随机采样,学习率(learning rate)设为0.05,在vector size小于300的情况下迭代了50次,其他大小的vectors上迭代了100次,直至收敛。最终学习得到的是两个vector是 w i w_i wi w ~ j \tilde{w}_{j} w~j,因为X是对称的,所以从原理上讲 w i w_i wi w ~ j \tilde{w}_{j} w~j也是对称的,他们唯一的区别是初始化的值不一样,而导致最终的值不一样。所以这两者其实是等价的,都可以当成最终的结果来使用。但是为了提高鲁棒性,最终会选择两者之和作为最终的vector(两者的初始化不同相当于加了不同的随机噪声,所以能提高鲁棒性)。

根据作者做的实验结论得到:向量维度=300,context windows size在6,10之间是,效果最佳。

参考:
Pennington J, Socher R, Manning C D. Glove: Global vectors for word representation[C]//Proceedings of the 2014 conference on empirical methods in natural language processing (EMNLP). 2014: 1532-1543.
Glove 原理详细解读
GloVe算法原理及简单使用
Glove原理解释以及实战演练
GloVe详解

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值