上一节课讲解了word2vec,并且朴素的实现了一个word2vec和tensorflow的basic版。这节课趁热打铁,讲解了以下这些内容:
- 回顾word2vec的过程
- 优化word2vec的训练过程(负采样)
- 另外两种产生词向量的算法:
- 基于计数统计的共现矩阵分解
- 基于统计计数类方法 VS 直接预测
- Count based 结合 direct prediction (GloVe) - 如何评价我们所得到的词向量?
- Intrinsic(内部评价方法)
- extrinsic(外部评价方法)
1. 回顾word2vec的过程
在上节课中我们得到了word2vec的目标函数是:
其中其中t为中心词,θ是模型参数,m为窗口大小。
我们需要优化的是当中心词c确定的情况下,上下文词o出现的概率。即p(o|c):
从上节课我们推到的公式可知,对log p(o|c)中v_c和u_o进行求偏导后,公式中都出现了上式中的分母,即
因此,每次梯度的计算,都需要计算一遍中心词向量和其他词向量的内积;但是事实上,中心词与自身周围常常出现的词才会有较大的概率,其他的太小或者为0,都可以忽略不计。so,就出现了负采样来优化词向量的训练过程。那么什么是负采样呢,请看下一部分。
2. 优化word2vec的训练过程(负采样)
由第一部分回顾我们知道,每次梯度更新都需要计算一遍中心词向量和其他词向量的内积,这是一个不小的计算量,但是事实很多词根本就不会出现在中心词附近,因此负采样的策略产生了,他随机抽取一定数目的随机词(尽量在中心词上下文中没出现过的词),然后最小化中心词和他们出现的概率,最大化中心词和上下文词出现的概率。采用负采样策略后的目标函数变为:
k就是我们采用的负采样的个数;下标t代表的就是某个窗口;σ为sigmod函数,将两个向量的内积映射到0~1之间(概率);Ew_i∼Pn(w)是具体的采样方法。
这个目标函数中心思想就是训练一个逻辑回归模型,要最大化中心词与上下文词的相关概率,最小化与负采样词语的概率。因此,每次的梯度更新只需要更新对应向量即可,不需要对所有向量进行计算,以此大大减少了计算量。
3. 另外两种产生词向量的算法
- 3.1基于计数统计的共现矩阵分解
由于word2vec采用的是词袋模型,并且他的模型捕捉的是单词的共现概率。那么如果直接采用单词之间的共现矩阵来刻画词向量会怎样?
如上图,构建出来语料库简单的单词间的共现矩阵。
那么,以这种方式构造出来的简单向量会面临什么问题呢?
~新单词的增加会改变矩阵维度
~语料库太大时,共现矩阵内存开销太大
~稀疏性使其训练出来的模型不可靠
如何解决以上通过共现矩阵构造词向量的问题呢?
~采用SVD对共现矩阵进行降维
SVD的一些问题:
~对于一个n x m的矩阵,其复杂度是O(mn^2),处理百万级的文本效果很差
~很难处理新词或新文档
其他的处理X的trick
~限制高频单词的频次,例如共现超过100次,就算100次。或者直接不用这些词
~根据和中心词的距离,对权重进行衰减
~使用皮尔逊系数代替词频
经过以上处理共现矩阵也表现出了不错的效果
An Improved Model of Semantic Similarity Based on Lexical Co-Occurrence
Rohde et al. 2005
语义上效果:
语法上效果:
- 3.2基于统计计数类方法 VS 直接预测
基于计数统计的共现矩阵方式:训练速度快,能够很有效的应用统计信息;但是仅仅能捕捉到词语的相似度,而且不能应用到大型的语料。
预测模型:能够应用到大型语料库,能够捕捉到各种复杂的模式相似度,而不仅仅是单词相似度,能够提高基于此向量的其他任务效果;但是它是基于窗口进行训练,这样也就无法利用单词的全局统计信息。 - 3.2 Count based 结合 direct prediction (GloVe)
结合Count based和direct prediction 产生了Glove模型。它的目标函数是:
上式中u、v分别为最后想要的词向量;P_ij是为词 j 出现在词 i 的context里面的概率;f是一个max函数,使高频出现的词被平滑处理。
GloVe的优点是,训练快,可以应用到大规模的语料,甚至小规模的语料和向量也试用。
将U和V相加得到最终词向量
更多Glove参数:Global Vectors for Word Representation, Pennington et al. (2014)
GloVe的效果还是不错的:
4. 如何评价我们所得到的词向量?
经过了前面一系列的训练词向量过程,我们最终得到了每个单词的词向量,那么我们怎么评价得到的词向量好坏?如何验证训练得到的词向量就是我们想要的?接下来就是介绍内部评测法和外部评测法。
- Intrinsic(内部评价方法)
必须由实验人员针对特定的任务进行统计标注单词的相似性,来评判训练得到的词向量,好处是计算快,但是不知道对实际任务有没有帮助。 - extrinsic(外部评价方法)
通过实际任务效果提升来体现词向量好坏,由于没有标准,所以必须通过两个任务来交叉检验。但是计算准确率的时间会比较长。
个人理解评价词向量的好坏有两方面:语义和语法,还有一些表达式(应该也算语义)。
语义关系: (Woman,Queen)=(Man,King)
语法关系: (short,shorter,shortest)=(slow,slower,slowest)
GloVe词向量的效果:
以上三个图代表了Glove训练过程中,超参数是如何通过实验数据确定的。