论文阅读笔记:GloVe: Global Vectors for Word Representation

摘要 1.引言 2.相关工作 3.The GloVe Model 4.实验 4.1评估方法 4.2语料库和训练细节

摘要

本文提出了一种全局对数双线性回归模型,这种模型能够结合其他两种主要模型的特点:全局矩阵分解(global matrix factorization)和局部上下文窗口(local context window)。这种模型能在词语类比任务的准确率能够达到75%,并且在词相似度计算和命名实体识别(named entity recognition)中的表现也能比其他模型要好。

1.引言

目前主流的两种模型都存在一些显著的不足。对于一些global matrix factorization方法(如LSA),在词类比任务的表现不好,表明这种方法得到的是向量空间的次优解;对于一些local context window方法(如skip-gram)可能在词类比任务上表现比较好,但这种方法没有很好得利用语料库的统计信息因为它们只在局部上下文中进行训练。

因此提出一种基于统计共现矩阵的具体的加权最小二乘模型。模型源码和训练好的词向量都放在网址:https://nlp.stanford.edu/projects/glove/

2.相关工作

这一部分简要介绍了Matrix Factorization Methods和Shallow Window-Based Methods两种方法,这里略过直接进入正题。

3.The GloVe Model

用非监督学习方法来创建词向量时,词语出现次数的统计信息是原始的信息源。尽管这方面已经有一些模型,但还是存在一些问题比如如何从这些统计信息中产生词义和这些词向量如何表达这些意义。在这里,文章介绍了一种新的模型GloVe(Global Vectors)能够利用语料库的统计信息。

一些符号的介绍:

X:统计共现矩阵

X_{ij}:单词j在单词i的上下文出现的次数

X_i = \sum_kX_{ik}:表示任何单词出现在单词i的上下文次数

P_{ij}=P(j|i)=X_{ij}/X_i:表示单词j出现在单词i的上下文的概率

通过一个简单的例子来介绍从共现概率中如何得到单词特定方面的意义:

考虑两个在某些方面比较类似的词:i代表ice,j代表steam。这两个词的关系可以通过研究它们与某个词k的共现概率之比来得到。例如,k是某个和ice相关但是和steam无关的词,比如k = solid,那么P_{ik}/P_{jk}​将会很大;而当k和steam相关但是和ice无关时,比如k = gas,这个比值将会很小。还有k和两个词都相关(k=water)或者和两个词都不相关(k=fashion),这个比值将接近于1。

可以看出表格中的数据正好符合上述猜想。

综上,词向量的学习应该从共现概率的比值开始而不是概率本身。由于P_{ik}/P_{jk}依赖于三个单词i,j和k,因此模型的一般形式如下:

F(w_i,w_j,\widetilde{w}_k) = \frac{P_{ik}}{P_{jk}} \tag{1}

其中w∈R^d表示词向量,\widetilde{w}∈R^d表示上下文词向量

我们希望F能在向量空间中编码P_{ik}/P_{jk}这个信息。由于向量空间是线性的,最自然的方法就是对向量做差。因此F变成如下形式:

F(w_i-w_j,\widetilde{w}_k) = \frac{P_{ik}}{P_{jk}} \tag{2}

在(2)中,由于公式右边是一个实数,而左边的参数是向量,尽管F可以代表像神经网络一样的复杂结构,但这样的结构会打乱我们希望获得的线性结构,因此为了避免这种情况,首先对参数做点积:

F((w_i-w_j)^T\widetilde{w}_k) = \frac{P_{ik}}{P_{jk}} \tag{3}

在统计共现矩阵中,由于单词和上下文的单词是任意选择的,因此我们可以自由交换二者的角色。为了保持一致性,在进行交换时不仅仅需要交换w−\widetilde{w}也需要交换X−X^T。最终的模型需要在这样的变换中保持不变性,但是方程(3)并不直接满足这个条件。

要满足条件,我们需要有:

F(w_i^T\widetilde{w}_k) = P_{ik} = \frac{X_{ik}}{X_i} \tag{4}

将(4)带入(3)可以解出:

F((w_i-w_j)^T\widetilde{w}_k) = \frac{F(w_i^T\widetilde{w}_k)}{F(w_j^T\widetilde{w}_k)} \tag{5}

而对于(5)可以解得F=exp或者说:

w_i^T\widetilde{w}_k = log(P_{ik}) = log(X_{ik}) - log(X_{i}) \tag{6}

这个变化过程过于复杂,私以为可以理解成为了解方程(3),我们需要嵌套一层exp,这样会有:

\frac{P_{ik}}{P_{jk}} = F(w_i, w_j, \widetilde{w}_k) = exp((w_i - w_j)^T\widetilde{w}_k) \tag{7}

即:

{P_{ik}}/{P_{jk}} = {exp(w_i^T\widetilde{w}_k)}/{exp(w_j^T\widetilde{w}_k)} \tag{8}

只要令P_{ik}=exp(w_i^T\widetilde{w}_k)P_{jk}=exp(w_j^T\widetilde{w}_k)即可,而后也可以推导出方程(6)

对于方程(6)如果要满足轮换对称性,右边必须没有log(X_i)这一项,由于这一项不依赖于k,因此可以用一个对于w_i的偏置项b_i来吸收,最后再加上对于w_k的偏置项b_k 得到如下方程:

w_i^T\widetilde{w}_k + b_i + \widetilde{b}_k = log(X_{ik}) \tag{9}

最终就由方程(1)变换得到方程(9)

利用最小二乘的思想来进行拟合,即:

J = \displaystyle\sum_{i,j=1}^V(w_i^T\widetilde{w}_j+b_i+\widetilde{b}_j-log(X_{ij}))^2 \tag{10}

V代表单词表的大小。

这里还存在一个问题,对于所有的共现次数,这个模型都一视同仁,然而一些共现次数小应该被视为噪声或者或能表达的信息很少,因此需要对模型进行加权,令f(X_{ij})为权重,最终得到模型:

J = \displaystyle \sum_{i,j=1}^Vf(X_{ij})(w_i^T\widetilde{w}_j+b_i+\widetilde{b}_j-log(X_{ij}))^2 \tag{11}

其中应该满足以下三个条件:

f(0)=0,这样可以保证当X_{ij}→0lim_{x \rightarrow 0}f(x)log^2x是有限值

f(x)应该是单调不减函数,这样不会导致共现次数低的值被赋予更多权重

f(x)x值很大时应该相对比较小,这样不会导致共现次数很大的值被赋予过大权重

作者将f(x)的表达式确定为:

f(x) = \begin{cases} (x/x_{max})^\alpha & x<x_{max} \\1 & otherwise\end{cases} \tag{12}

当α=3/4时,f(x)的图像为:

f(X)的图像

得到了代价函数J之后要做的就是:J \rightarrow \min\limits_{w_i,\widetilde{w}_j,b_i,\widetilde{b}_j}

4.实验

4.1评估方法

将GloVe模型得到的词向量分别用于Word analogies, Word similarity, Named entity recognition,在相同的数据集上和CBOW,SVD等方法进行比较。

4.2语料库和训练细节

语料库:略

统计共现矩阵X的创建:

• 语料库中的词汇都符号化和并变为小写,建立一个含有400,000个常用词的词汇表。

• 利用上下文窗口来计数得到共现矩阵X。在利用上下文窗口时需要设定窗口的大小(论文采用了上下文各10个单词的窗口长度)和是否需要区分上文和下文等。

• 乘以一个随距离d递减的权重项,即与单词i距离为d的单词在计数时要乘上权重1/d,表示距离越远的词可能相关性越小。

采用AdaGrad的方法迭代50次(非监督学习,没有用神经网络)

模型产生两个词向量集W\widetilde{W},如果X是对称矩阵,则W\widetilde{W}在除了初始化的不同以外其他部分应该相同,二者表现应该接近。

作者从神经网络的训练中得到的灵感:对于某些神经网络,训练多个网络并把这些网络结合起来有助于减少过拟合和噪声并且能改善性能。受此启发,作者将W+\widetilde{W}作为最终词向量,并且能够使得这些词向量在某些任务上的表现变好。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序生活

文本分类(下)-卷积神经网络(CNN)在文本分类上的应用

原先写过两篇文章,分别介绍了传统机器学习方法在文本分类上的应用以及CNN原理,然后本篇文章结合两篇论文展开,主要讲述下CNN在文本分类上的应用。前面两部分内容主...

14920
来自专栏人工智能LeadAI

零基础入门深度学习 | 第六章:长短时记忆网络(LSTM)

无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learni...

86550
来自专栏机器学习算法工程师

从AlexNet剖析-卷积网络CNN的一般结构

作者:张旭 编辑:王抒伟 算了 想看多久看多久 零 参考目录: 一、卷积层 1.CNN中卷积层的作用 2.卷积层如何...

93850
来自专栏瓜大三哥

matlab GUI基础8

图像处理工具箱 从屋物理和数学角度看,图像时记录物体辐射能量的空间发呢不,这个分布是空间坐标、时间坐标和波长的函数,即i = f(x,y,z,λ,t),这样的图...

29570
来自专栏人工智能LeadAI

零基础入门深度学习 | 第四章:卷积神经网络

无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员,不懂深度学习这个超热的技术,会不会感...

58570
来自专栏杨熹的专栏

TensorFlow-9-词的向量表示

今日资料: https://www.tensorflow.org/tutorials/word2vec 中文版: http://wiki.jikexuey...

40370
来自专栏量化投资与机器学习

Matlab编程之——卷积神经网络CNN代码解析

这这是之前我共享的一个深度学习工具包,这是解释代码的一部分,具体的一些细节还还望大家根据自己的能力去做,慢慢去理解。不急昂! 源代码我公布出来希望大家学习交流,...

523100
来自专栏自学笔记

Neural Network

重新回顾一下一开始学的PLA,preceptron learning Algorithm。PLA适用于二维及高维的线性可分的情况,如果是非线性可分的数据,如果使...

25020
来自专栏专知

神经网络编程 - 前向传播和后向传播(附完整代码)

【导读】本文的目的是深入分析深层神经网络,剖析神经网络的结构,并在此基础上解释重要概念,具体分为两部分:神经网络编程和应用。在神经网络编程部分,讲解了前向传播和...

31570
来自专栏ml

关于BP网络的一些总结

背景      前段时间,用过一些模型如vgg,lexnet,用于做监督学习训练,顺带深入的学习了一下相关模型的结构&原理,对于它的反向传播算法记忆比较深刻, ...

37370

扫码关注云+社区

领取腾讯云代金券