1 论文背景
glove模型是基于当时新流行的Word2vec。word2vec是当年轰动一时的模型。用向量表示单词或文档的语义是很多人追求的目标,此前还是笨拙的用tf-idf + cbow向量表示,而word2vec的提出,给大家提供了如何在神经网络的视角下完成单词的向量表示,以及利用上下文来进行训练的手法,可谓是开创了新流派吧。不过有人总觉得不用统计的方式去解释问题,建模问题,就会浪费了统计的优势,提出了glove模型。该模型的训练相比于Word2vec的原始定义有较明显的优势。其他自称的优点比如说“可解释性”,“利用了统计优势”这些我认为都不太显著。
值得一提的是,一般的论文模型的提出,都是非常直接的。说考虑什么因素就直接给出一个计算方式,说用这个方式来衡量该因素就行。而本文的建模思路跟其他论文相比,比较详细,大概就是借用了别人考虑因素的思路,然后稍加改造,再加一个自己考虑的因素,把自己设计函数的思考过程全都写了出来。这一点值得我等菜逼参考学习。
2 模型提出的思路
既然说到了这个论文的特异之处,我们就一起看一下这个模型的具体思考过程
2.1 论文最终模型
先给出最终公式,大家先尝试理解一下:
其中,Xij是在单词i的上下文中,单词j出现的次数,wi是单词i的向量,bi是类似LSI模型中矩阵分解表示的那个偏移量,也有叫误差的。f(Xij)是一个僵硬的权值函数,具体取值如下:
其函数图像如下:
所以,这个模型看起来是很不知所谓的,下面给出具体的思考过程。
2.2 模型设计思路
1.从word2vec出发,谈模型设计与改进
众所周知,word2vec模型的核心是一个单词向量和所有的V个单词向量相乘,得到V个分数,然后选择它的上下文单词去进行反向传导,进而更新整个参数矩阵。当然这里的分数需要转化成概率,所以最后一层套了一个softmax函数来进行概率计算。最后为了方便凸优化,对softmax取负的log,利用极大似然的思想去估计参数,我们就得到了目标函数:
我们仔细想一下这个函数,如果不用skip gram和cbow,而是一个单词对应一个的训练方式,里面是不是有很多bigram的样本啊,难免相同的组合会出现多次。如果我们把这些重复出现的单词加起来,就变成下面这个函数:
这个函数与上面的函数是完全等价的。
定义
其中Xi的含义是在i的上下文中,出现过的单词总量,其实就等价于窗口大小乘以单词i出现的次数。Pij的含义可以理解成在i的上下文中(一般是一个窗口大小),j出现的概率。
公式可以写成:
其中H(Pi,Qi)是Pi和Qi的交叉熵,定义类似于Xi,都是i的上下文单词的加和。那么这个函数跟word2vec的目标函数的完全等价的,但是这个函数有挺多问题,作者提到的的有:
Ø Q必须经过正则化,这会使训练过程中Qi计算代价太高。
Ø 长尾分布,对出现频次较低的事件给予的权重太高。
2. glove模型对word2vec的改进
那么,如何进行优化呢?作者提出一个思路,那就是把交叉熵换成其他的函数---最小二乘函数,并且抛弃正则化的Q和P项。改成如下模型:
其中:Pˆi j = Xi j ,Qˆi j = exp(wiT w˜j ) 这两项是不需要正则化的。不过这样有个问题,Xij一般会很大,会给计算带来麻烦,那么为了纠正这个问题,可以给最小二乘项加上log,就变成了这样:
然后为了平衡频繁项对目标函数的影响,我们给Xi加个权重,再加上两个bias项,就得到了目标函数:
3 检验模型效果
word2vec直接借用了交叉熵的概念,所以不需要解释模型的合理性(交叉熵的理论完备性已经很好了)。本文模型已经做好了,下面用实验数据来支撑模型的合理性。作者做了两个问题的试验,一个是word analogy任务(解释一下什么是word analogy task:The word analogy task is introduced by Mikolov et al. (2013) to quantitatively evaluate the linguistic regularities between pairs of word representations. The task consists of questions like “a is to b as c is to __”, where is missing and must be guessed from the entire vocabulary.)。一个是NER(实体词识别)
3.1 word analogy试验
作者使用了word2vec作者的数据集做同样的。还用数据集CoNLL-03做,结果如下:
可以看到analogy训练的准确率还是挺高的,跟原word2vec模型及其各种变种相比差不太多。
3.2 NER试验
NER问题的效果如下:
可以看到,也达到了state-of-art。
3.3 超参数分析
1. 向量长度和窗口大小
2. 训练样本大小
syntactic问题来说训练样本越多越准,semantic却不完全是这样
3. 训练时长
单线程来说:2.1GHz Intel Xeon E5-2658 的机器, 训练一个窗口大小为10, 40万词汇量, 60亿大小的样本,需要85分钟。
可以看到相同训练时长下,glove的准确率高,就是说glove需要的训练时间短。
4 模型计算效率的解释
既然效果差不多,为什么用glove嘞?glove的模型优势就是解决了word2vec的问题啊,一个是长尾问题,一个是计算效率问题。长尾问题用模型效果来印证,计算效率这个除了用试验证明之外,还以用理论公式推导来证明,下面一起看一下证明过程(这个证明过程我只是直接翻译过来,我自己也没看懂):
作者认为,Xij可以用共现的单词对排名的指数来表示,大概就是如下公式:
其中rij指的是这个单词对出现的频率名次,最多的排第一取值为1,次多的排第二取值为2。而语料的总单词数(注意这不是词汇数,词汇数是去重的,corpus是未去重的)C跟X矩阵所有元素的加和成正比。可以表示成如下形式:
最高的单词对出现的频次记为|X|。Hx,a表示从1到|X|的加和。那么就可以写成如下形式:
然后用一个叫harmonic number的来代替Hx,a
其中ζ (s)是一个叫Riemann zeta的函数。然后|X|可以表示成:
然后用实验数据去拟合这个方程中的参数,可以得到a=1.25,所以:
这就比word2vec的模型O(|C|)要略强一丢丢。
5 自己的想法
从这篇论文来看,模型公式的提出,主要是根据函数的性质进行设计,数学上的推导只是一个思路,需要这个数学推导证明模型的收敛性和计算效率等。
很多模型都是基于统计学基础来进行设计,很多时候模型今年学了明年就用不上了,而基础是不会变的,所以机器学习的统计学基础是必要的。