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

2018-08-12 19:06:12 浏览数 (1)

摘要 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)^Twidetilde{w}_k) = frac{P_{ik}}{P_{jk}} tag{3}

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

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

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

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

F((w_i-w_j)^Twidetilde{w}_k) = frac{F(w_i^Twidetilde{w}_k)}{F(w_j^Twidetilde{w}_k)} tag{5}

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

w_i^Twidetilde{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)^Twidetilde{w}_k) tag{7}

即:

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

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

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

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

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

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

J = displaystylesum_{i,j=1}^V(w_i^Twidetilde{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^Twidetilde{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 & otherwiseend{cases} tag{12}

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

f(X)的图像f(X)的图像

得到了代价函数J之后要做的就是:J rightarrow minlimits_{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次(非监督学习,没有用神经网络)

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

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

0 人点赞