自然语言处理 (让机器更懂你)神经网络与深度学习自然语言处理(NLP)

【论文笔记】Glove: Global Vectors for

2018-12-19  本文已影响1人  蘑菇轰炸机

本文主要用于记录斯坦福nlp组发表于2014年的一篇论文(引用量直破5k)。该论文提出的Glove词向量也是自Word2vec推出后另一个比较有影响力的词向量生成方法。本笔记主要为方便初学者快速入门,以及自我回顾。

论文链接:https://www.aclweb.org/anthology/D14-1162
Github: https://github.com/stanfordnlp/GloVe
课程链接:http://cs224d.stanford.edu
(由于是斯坦福nlp实验组提出的,自然也上了斯坦福的cs224n的课程。)

基本目录如下:

  1. 摘要
  2. 核心思想
  3. 总结

------------------第一菇 - 摘要------------------

1.1 论文摘要

现有词向量模型(2013年,word2vec大热)都对细粒度的语义和句法都有较好的表达,但论文作者们对其背后的机制仍有诟病。他们经过仔细的分析,在当前词向量模型的基础上又提出了一种新的清晰可解释的语言模型来构成词向量。其实该模型的本质就是融合了当时最新的全局矩阵分解方法(Matrix Factorization)和局部文本框捕捉方法(代表word2vec),美其名曰全局词向量表达。顾名思义,该模型利用了全局词词共现矩阵中的非0数据来训练,而不是只用了某词的局部窗口信息。实验表明,这种新的词向量表达方法提高了很多NLP基础任务的准确率。

------------------第二菇 - 核心思想------------------

2.1 论文模型核心思想

论文在介绍部分就吐槽了现今的两种词向量模型的弊端,第一种就是全局的词-文本矩阵分解(本文不展开,详情可见LSA算法解析),该方法能有效收集的每一个词的统计信息,但他们却不能捕捉到词的上下文信息(语义的表达能力不够);第二种就是基于局部窗口信息以word2vec为代表的,这种方法虽然能在词的语义上有更丰富的表达,但是他们却不能很好的捕捉词的全局统计信息。那当然本文肯定是要集两者之精华,去两者之弊端,提出了一种全新的结合两种方式的Glove词向量模型。在具体深入公式推导之前(其实我也没打(neng)算(li)详细铺开模型细节推导orz...),还是先跟着论文一起聊一聊模型的核心思想。

直接引用文章中的例子了~作者认为词与词之间共现的统计数据是作为词向量的重要依据,因此Glove词向量的本质也是意图利用这种共现的次数来构造。先学一波文章中的符号表达如下:

X - 词词共现矩阵
X_{ij} - 词j在词i的窗口中出现的次数
X_{i} - 词i的所有窗口词出现的次数总和(\sum_{k}(X_{ik})
P_{ij} - 词j在词i的窗口词中出现的概率(X_{ij}/X_{i}

然后核心的思想就是,对于任意的词i和词j,假如有第三个词k,如果词k与词i相比于词k与词j有更深的关联,则我们从常理上来说,可以非常轻易的得出一个结论,即,

P_{ik} > P_{jk}

且这个比值较大,反之亦然。若词k与他们俩者的关系都不大,则我们应该不难想象,

P_{ik} \approx P_{jk}

文章中也举了真实语料中的例子,如下图,

sample.png

可以看出,固体与冰的共现率就会大于固体与水蒸气(其他以此类推)。因此,根据刚才提出的核心思想,论文中所有接下来的公式推导就可以用一个公式来推导得出,该公式如下,

F(w_i, w_j, \widetilde{w_k}) = \frac{P_{ik}}{P_{jk}}

其中w_iw_j就是我们拿来作比较的词向量,w_k可以理解为额外的词向量(这里学论文先留个扣哈哈)。至此,论文的核心思想算是介绍完了,下一节将进一步推导模型的细节,不喜欢推导细节的小伙伴可以直接跳过下一章啦~

2.2 论文模型推导

首先,向量空间本质都是线性的,所以最普通的做法就是,俩个词向量做差,来求解其关系,因此,上式可变为,

F(w_i - w_j, \widetilde{w_k}) = \frac{P_{ik}}{P_{jk}}

然后我们发现,左边是向量的计算,而右边得出的值是一个标量,因此我们做一套点积运算,

F((w_i - w_j)^T \widetilde{w_k}) = \frac{P_{ik}}{P_{jk}}

再之后,作者又在外面套了一层指数运算(将差形式转换为商形式),因此,使得,

\frac{F(w_{i}^{T}\widetilde{w_k})}{F(w_{j}^{T}\widetilde{w_k})} = \frac{P_{ik}}{P_{jk}}

因此,为了使上式成立,我们可以得到,

F(w_{i}^{T}\widetilde{w_k}) = P_{ik} = \frac{X_{ik}}{X_i}

然后两边取对数,我们得到,

w_{i}^{T}\widetilde{w_k} =log(P_{ik}) = log(X_{ik}) - log(X_{i})

这个时候仔细观察上式,会发现一个对称性的问题,即,

w_{i}^{T}\widetilde{w_k} = w_{k}^{T}\widetilde{w_i}

但是右边的式子交换并不相等,而此时我们也发现log(X_i)也独立于k,因此我们将其吸纳进w_{i}的偏置项b_{i},然后同时引入w_k的偏置项\widetilde{b_k},最终得到,

w_{i}^{T}\widetilde{w_k} + b_i + \widetilde{b_k} = log(X_{ik})

然后作者认为这样的处理存在一个弊端,即对于一个词,他的每一个共现词都享有相同的权重来决定该词的词向量,而这在常理上的理解是不合理的,因此,作者引入了一种带权的最小二乘法来解决这种问题,最终的损失函数就为,

J = \sum_{i,j=1}^{V}f(X_{ij})(w_{i}^{T}\widetilde{w_j} + b_i + \widetilde{b_j} - logX_{ij})^2

其中,权重方程的定义与图像如下,

weight_function.png

作者经过实验得出,\alpha取值为0.75能得到最好的模型效果。至此,整一个模型已经介绍完成了。接下来的论文部分还讨论了一波Glove词向量与其他词向量的关系以及复杂度,这边我就不展开了,会在另一篇对词向量的探索中进行更加细致的对比,有兴趣的读者可以仔细阅读一下原论文。

2.3 论文模型分析

论文作者把自己提出的这一套词向量构建方法进行了一系列的实验,包括但不限于语义相似度,近义词,NER等传统NLP基线任务。具体的任务指标数据我这里就不一一展现了,有兴趣的读者可以看原论文。值得一提的是,作者对模型的训练提出了许多细节的优化点,并且给出了实验结论,主要包括:1)词向量纬度。2)窗口大小。3)语料数据大小。与我们传统调节词向量模型的超参数是一致的,作者也强调了该模型训练的高效性,且在语料库较小时,也能取得不错的效果。

论文的最后,作者还特地与word2vec进行了一番对比,那当然作者的实验结论是Glove模型是优于word2vec哈哈(outperform)。

------------------第三菇 - 总结------------------
到这里,整篇论文的核心思想及其创新点已经说清楚了。本论文主要集中在于阐述Glove模型的核心思想及推导,并在之后进行了一系列模型的调参实验并且呈现了该词向量模型与其他模型的效果验证对比。最终证明了该模型的实用性及稳定性。

简单总结一下本文就是先罗列了一下该论文的摘要,再具体介绍了一下Glove模型的核心思想及推导。希望大家读完本文后能进一步加深对该论文的理解。有说的不对的地方也请大家指出,多多交流,大家一起进步~😁

上一篇下一篇

猜你喜欢

热点阅读