文章目录
Distributed Representations of Words and Phrases and their Compositionality
简要信息
序号 | 属性 | 值 |
---|---|---|
1 | 模型名称 | Word2Vec |
2 | 所属领域 | 自然语言处理 |
3 | 研究内容 | 词嵌入 |
4 | 核心内容 | Word2Vec优化 |
5 | GitHub源码 | Word2Vec |
6 | 论文PDF | Distributed Representations of Words and Phrases and their Compositionality |
重点内容概括
替代分层softmax方案–负采样
词表示固有的限制:不关心次序,无法表示习惯用于
本文提出在文本中查找短语的方法
用向量表示整个短语会使skip-gram更具表现力
高频词二次取样,因为in,the,a没什么信息,可以加速训练,提高算法精度
摘要
最近引入的连续跳过图模型是一种学习高质量分布式向量表示的有效方法,它捕获了大量精确的句法和语义词关系。在本文中,我们提出了几个扩展,以提高向量的质量和训练速度。通过对频繁出现的单词进行子采样,我们获得了显著的加速,并学习了更规则的单词表征。我们还描述了分层softmax的一个简单替代方案,称为负采样。
词语表征的一个内在限制是它们对词序的漠不关心以及它们不能表示习惯短语。例如,“Canada”和“Air”的含义不能轻易结合起来得到“Air Canada”。受这个例子的启发,我们提出了一个在文本中寻找短语的简单方法,并表明学习数百万短语的良好向量表示是可能的。
1 介绍
通过分组相似的单词,在向量空间中的分布式向量表示可以帮助学习算法在NLP任务中获得更好的表现。最早使用单词表示可以追溯到1986年(Rumelhart,Hinton和Williams)。这个想法已经被应用于统计语言建模且取得了相当大的成功。后续工作包括应用于自动语音识别和机器翻译,以及大范围的NLP任务。
最近,Mikolov等人引入了Skip-gram模型,这是一种从大量非结构化文本数据中学习高质量向量表示的有效方法。与过去大部分用于学习word vectors的神经网络架构不同,Skip-gram模型的训练(参见图1)不涉及密集矩阵的乘法。这使得训练非常高效:一个优化过的单机实现可以在一天内训练超过1000亿字。
使用神经网络计算的word representation非常有趣,因为已训练的向量明确地编码了许多语言规律和模式。有点令人惊讶的是,许多这些模式可以表示为线性翻译。例如,向量计算vec("Madrid")-vec("Spain")+vec("France")
的结果比任何其他word vector更接近于vec("Paris")
。
图1:Skip-gram模型架构。训练目标是学习善于预测附近单词的词向量表示
在本文中,我们提出了原始Skip-gram模型的几个扩展。在训练过程中,对frequent words进行二次采样会导致显着的加速(大约2-10倍),并提高频率较低的此表示的准确性。此外,我们提出了一种用于训练Skip-gram模型的简化NCE(噪声对比估计)。结果表明,与更复杂的分层softmax相比,它有更快的训练速度,而且常用词的词表示也更好。
词表示天生受限于常用短语的表示。例如,“Boston Globe/波士顿环球报”是报纸,它不是“Boston/波士顿”和“Globe/地球”的含义的自然组合。因此,用向量来表示整个短语会使Skip-gram模型更具表现力。其他旨在通过组合单词向量(例如递归自动编码器/recursive autoencoders)来表示句子意义的技术也将受益于使用phrase vectors而不是word vectors。
模型从基于单词扩展到基于短语模型相对简单。首先,我们使用data-driven的方法识别大量的短语,然后在训练过程中将短语视为单独的tokens(标记)。为了评估短语向量的质量,我们开发了一个包含单词和短语的类比推理任务测试集。测试集中一个典型类比对是"Montreal":"Montreal Canadiens" :: "Toronto":"TorontoMaple Leafs"
如果最靠近vec("Montreal Canadiens") - vec("Montreal") + vec("Toronto")
的表达是 vec("TorontoMaple Leafs")
,则被认为回答正确。
最后,我们描述了Skip-gram模型的另一个有趣属性。我们发现简单的向量加法通常可以产生有意义的结果。例如,vec("Russia")+vec("river")
接近 vec("Volga River")
,而vec("Germany")+vec("capital")
接近 vec("Berlin")
。这种组合性表明,通过对词向量表示使用基本的数学运算,可以获得非明显程度的语言理解。
2 Skip-gram模型
Skip-gram模型的训练目标是找到可用于预测句子或文档中surrounding words的word representation。更正式地,给出训练词W1, w2, w3…、wT,Skip-gram模型的目标是最大化平均对数概率(1),其中c是训练上下文的大小(可以是中心词wt的函数)。较大的c会产生更多的训练示例,从而可以以牺牲训练时间为代价获得更高的精度。基本的Skip-gram公式使用softmax函数定义为,其中vw和v 'w分别为w的“输入”和“输出”向量表示,w为词汇量。这个公式是不切实际的,因为计算∇ log p(wO|wI)的花费与W成正比,通常会达到105-107的数量级。
2.1 分层Softmax
分层softmax是完全softmax的计算效率近似。它首先由Morin和Bengio在神经网络语言模型的上下文中引入。它的主要优点是,不需要评估神经网络中的W WW个输出节点以获得概率分布,仅需要评估约l o g 2 ( W ) 个节点。
分层softmax使用二叉树表示输出层,其中W WW个字作为其叶,并且对于每个节点,显式地表示其子节点的相对概率。这些定义了一个可将概率分配给单词的random walk(随机游走)。
更准确地说,可以从树的根通过适当的路径到达每个单词w。设n(w, j)是从根到w的路径上的第j个节点,设L(w)是这条路径的长度,因此n(w, 1) =根,n(w, L(w)) = w。另外,对于任意内部节点n,设ch(n)是n的任意固定子节点,设[[x]]为1,如果x为真,则为-1。分层softmax对p(wO|wI)的定义如下:
式中,σ(x) = 1/(1 + exp(−x))。可以验证 p(w|wI) =1。这意味着计算log p(wO|wI)和∇log p(wO|wI)的开销与L(wO)成正比,L(wO)平均不大于log W。此外,不同于标准的softmax Skip-gram公式,后者为每个单词w分配两个表示vw和v 'w,分层softmax公式对每个单词w有一个表示vw,对二叉树的每个内部节点n有一个表示v 'n。
分层softmax使用的树结构对性能有相当大的影响。Mnih和Hinton探索了构建树结构的一些方法以及训练时间和结果模型精度的影响。在我们的工作中,我们使用一个哈夫曼树(binary Huffman tree),因为它将短codes分配给高频词,从而加快了训练速度。之前已经观察到,根据出现频率组合单词可以很好的作为基于神经网络的语言模型的一种简单加速技术。
2.2 负采样Negative Sampling
分层softmax的替代方案是噪声对比估计(NCE),由Gutmann和Hyvarinen引入,并由Mnih和Teh用于语言建模。NCE认为一个好的模型应该能够通过logistic regression来区分数据和噪声。这类似于Collobert和Weston使用的铰链损失/hinge loss,他们通过对噪声上的数据进行排名来训练模型。
虽然NCE可以最大化softmax的对数概率,但是Skipgram模型只关注学习高质量的向量表示,因此只要向量表示保持其质量,我们可以随意简化NCE。我们通过以下公式定义Negative Sampling(NEG):4),用于替代Skip-gram中的每个log P (wO|wI)项。因此,我们的任务是用逻辑回归将目标词w_O从噪声分布P_n(w)里区分开,其中每个数据样本存在k个负样本。我们的实验表明,小型训练数据集里k可以取5-20。而对于大型数据集,k可以小到2-5。Negative Sampling和NCE之间的主要区别在于,NCE需要噪声分布的样本和数值概率,而Negative Sampling仅使用样本。尽管NCE最大化了softmax的对数概率,但这个属性对我们的应用来说并不重要。
NCE和NEG均以噪声分布Pn(w)作为自由参数。我们调查了Pn(w)的许多选择,发现ungram分布U(w)的3/4次方(即U(w)3/4/Z)明显优于ungram分布和均匀分布,对于NCE和NEG,在我们尝试的每个任务中,包括语言建模(这里没有报告)。
2.3 高频词的二次取样
在非常大的语料库中,最常见的单词很容易就出现数亿次(例如,"in", "the"``和``"a"
)。这样的单词通常比其他低频词提供的信息值还要少。例如,对于Skip-gram来说,观察"French"
和"Paris"
的同时出现(co-occurrences)是有益的,但观察"French"
和"the"
同时出现的频率并没有什么用,因为在一个句子里几乎每个词都会频繁地和"the"
同时出现。这个想法也可以反向应用: 高频词的vector representation在经过几百万个例子的训练之后并不会显著变化。
为了抵消罕见词和高频词之间的不平衡,我们使用简单的二次抽样:训练集中的每个单词w i w_iw**i将有一定概率被丢弃,概率由以下公式计算:(5)其中f(wi)是单词wi的频率,t是一个选定的阈值,通常在10−5左右。我们选择这个二次抽样公式是因为它主动地对频率大于t的词进行二次抽样,同时保持了频率的ranking。虽然这个二次抽样公式是启发式选择的,但我们发现它在实践中运作良好。它加快了训练速度,甚至显着提高了罕见词所学向量的准确性,如以下几节所示。
3 实证结果
在本节中,我们评估了分层Softmax,NCE,NEG和训练词的二次取样。我们使用了Mikolov等人介绍的类比推理任务。这个任务包含Germany" : "Berlin" :: "France": ?
这样的类比,根据余弦距离,想解决这个问题,需要找到一个向量x使得vec(x)最接近vec("Berlin")-vec("Germany")+vec("France")
(我们丢弃搜索中的输入单词)。对于这个具体的案例来说,如果x是"Paris"
,我们可以认为它是正确答案。该任务有两大类:句法类比(如"quick: "quickly" :: "slow":"slowly"
)和语义类比(如国家到首都的关系)。
为了训练Skip-gram模型,我们使用了一个由各种新闻文章组成的大型数据集(内部Google数据集,有十亿字)。我们从词汇表中丢弃了在训练集中出现次数少于5的单词,最终词汇表的大小为692K。表1中列出了词类比测试集中的各种跳码模型的表现。表格显示,负采样优于类比推理任务中的分层Softmax,并且性能略好于NCE。高频词的二次采样使训练速度提高了几倍并且让词表示的准确率显著提高。
表1:类比推理任务的各种300维Skip-gram模型的准确性。NEG-k代表每个positive样本的k个negative样本的负采样; NCE表示噪声对比估计,HS-Huffman代表基于频率的码的分层Softmax。
可以说,skip-gram模型的线性使它的向量更适合这样的线性类比推理。而Mikolov等的结果还表明,由于训练数据量的增长,标准sigmoidal RNN(高度非线性)所学的向量在此类任务上可以显著提高,这表明非线模型也倾向于线性结构的word representations。
4 学习短语
如前所述,许多短语的意思不仅仅是单词含义的简单组合。 要学习短语的vector representation,我们首先要找到经常一同出现但在其他语境中并不常见的单词。 例如,"New York Times"
和"Toronto Maple Leafs"
在训练集中将被独一无二的token所取代,而"this is"
将保持不变。
图2:短语类比推理任务示例(完整测试集有3218个例子)。 目标是使用前三个短语计算第四个。 我们最好的模型在这个数据集上达到了72%的准确度。
这样,我们可以形成许多合理的短语,而不会大大增加词汇量的大小。理论上,我们可以使用所有的n元文法训练Skip-gram模型,但是这太消耗内存。 许多识别文本中短语的技术之前已经被开发出来了, 然而,比较它们超过了我们的工作范围。 我们决定使用一种简单的数据驱动方法,基于unigram和bigram的计数来形成短语:
δ被用作折扣系数,防止形成太多由非常罕见的单词组成的短语。 得分高于所选阈值的bigram将被用作短语。 通常,我们逐渐减少阈值对训练数据进行2-4次传递,从而允许形成更长的短语(由数个单词组成)。 我们用涉及短语的新模拟推理任务来评估phrase representation的质量。 表2显示了本任务中使用的五类类比的例子。 此数据集在网络上公开提供。
4.1 Phrase Skip-Gram实验结果
从前面实验的新闻数据开始,我们首先构建了基于短语的训练语料库,然后我们使用不同的超参数训练了几个Skip-Gram模型。 如前所述,我们使用300维的向量和context size 5。该设置已经在短语数据集上实现了良好的性能,并且允许我们快速比较负采样和分层Softmax,无论是否二次采样高频token。 结果总结在表3中。
表3:短语类比数据集中Skip-gram模型的准确性。 这些模型已经从新闻数据集中接受了大约十亿字的训练。
表4:使用两个不同的模型,给出与给定短语最接近的实体的示例。
表5:使用元素加法的V面组合性。使用最好的Skip-gram模型显示了四个最接近两个向量之和的标记。
结果表明,k = 5时负采样已经达到可靠的精度,而使用k = 15可以实现更好的性能。 令人惊讶的是,我们发现在没有subsampling的情况下训练分层Softmax会得到较低的性能,而我们对频繁的单词进行subsampling时它成为表现最好的方法。 这表明至少在某些情况下,subsampling可以导致更快的训练,而且可以提高精度。
为了最大化短语类比任务的准确性,我们使用约330亿字的数据集来增加训练数据的数量。 我们使用维度为1000的分层softmax和上下文的整个句子。 最终模型的精确度能达到72%。 当我们将训练数据集的大小减小到6B字时,准确度略微降低至66%,这表明大量的训练数据是至关重要的。
为了进一步深入了解不同模型表示的token的不同,我们手动检查了各种模型的低频短语的nearest neighbours。 表4显示了一个这样比较的样例。 与之前的结果一致,似乎使用了分层softmax和subsampling的模型可学到短语的最佳表示。
5 加法合成性
由Skip-gram模型学习的word and phrase representation显示了一个线性结构,从而通过简单地向量计算可以进行精确的模拟推理。 有趣的是,我们发现Skip-gram representations展现了另一种线性结构,使得有可能通过vector representation的元素级加法来有意义地组合单词。 这种现象如表5所示。
向量的加法属性可以通过检查训练目标来解释。 word vector与非线性softmax的输入呈线性关系。 由于 word vector被训练来预测句子中的周围单词,所以可以将向量视为一个单词出现在上下文的分布的表示。 这些值与输出层计算的概率成对数地相关,所以两个word vector的和与两个上下文分布的乘积有关。 该乘积在这里的作用为AND:被分配了两个有高概率word vector的单词将具有很高的概率,其他字将具有较低的概率。 因此,如果“Volga River”与“Russian”和“river”一起出现在同一句话中,这后两个的word vector总和将生成一个接近“Volga River”的vector的feature vector。
6 Comparison to Published Word Representations
许多以前研究基于词汇表示的神经网络的作者已经发表了他们的结果模型,以供进一步使用和比较:其中最著名的作者是Collobert和Weston [2], Turian等人[17],以及Mnih和Hinton[10]。我们从网络上下载了他们的单词向量。Mikolov等人[8]已经在单词类比任务中评估了这些单词表示,其中Skip-gram模型以巨大的优势取得了最佳性能。
表6:给出了各种著名模型和Skip-gram模型中最接近的标记的例子,该模型使用超过300亿个训练单词对短语进行训练。一个空的单元格意味着这个词不在词汇表中。
为了更深入地了解学习向量的质量差异,我们通过在表6中显示不常见单词的最近邻居来提供实证比较。这些例子表明,在大型语料库上训练的大跳过图模型在学习表征的质量方面明显优于所有其他模型。这可以部分归因于这样一个事实,即这个模型是根据大约300亿个单词进行训练的,这比之前工作中使用的典型大小的数据多了大约2到3个数量级。有趣的是,尽管训练集要大得多,但Skip-gram模型的训练时间只是以前模型体系结构所需时间复杂度的一小部分。
7 结论
这项工作有几个关键的贡献。 我们展示如何使用Skip-gram模型来训练单词和短语的分布式表示,并证明这些表示呈现线性结构,使准确的类比推理成为可能。 本文介绍的技术也可用于训练[8]中引入的连续的bag-of-words模型。
得益于计算效率高的模型架构,我们成功地在比之前模型的数据量高了数个数量级的数据集上进行了训练。 这导致了所学的单词和短语表示的质量有了显著的改善,特别是对于稀有的entity。 我们还发现,高频词的二次抽样导致了更快的训练速度,并且使罕见单词的表示得到了显著的提升。 我们文章的另一个贡献是subsampling算法,这是一个非常简单的训练方法,可以学习准确的表示,尤其是对于高频单词。
训练算法和超参数的选择得由具体任务决定,因为我们发现不同的问题具有不同的最优超参数配置。 在我们的实验中,影响性能的最关键的决策是模型架构的选择,向量的大小,二次采样率以及训练窗口的大小。
我们工作的一个非常有趣的结果是,使用简单的向量加法可以有意义地组合单词向量。 本文中提到的另一个表示短语的方法是,简单地用一个single token来表示短语。 这两种方法组合出了一种强大而简单的方法,用来表示更长的文本段同时具有最小的计算复杂度。 因此,我们的工作可以被看作是使用递归矩阵-向量操作来尝试表示短语的现有方法的补充[16]。
我们将实现本文技术的代码发布为了一个开源项目(即word2vec)。