摘要
统计语言建模的一个目标是学习单词序列的联合概率函数。由于维度的诅咒,这在本质上是困难的:我们建议用它自己的武器来对抗它。在提出的方法中,人们同时学习(1)每个单词的分布式表示(词向量)(即单词之间的相似性)以及(2)表示单词序列的概率函数。泛化是由于一个以前从未见过的单词序列,如果它由与一个已经见过的句子相似的单词组成,那么它就有很高的概率。我们报告了使用神经网络进行概率函数的实验,在两个文本语料库上显示,所提出的方法在最先进的3-gram上得到了非常显著的改进。
1 介绍
使语言建模和其他学习问题变得困难的一个基本问题是维度的诅咒。当想要对许多离散随机变量(例如句子中的单词或数据挖掘任务中的离散属性)之间的联合分布进行建模时,这一点尤为明显。例如,如果想要对一种自然语言中10个连续单词的联合分布进行建模,其词汇表V的大小为100,000,则可能存在100000^10 - 1 = 10^50 - 1个自由参数。根据给定的前t−1个词,统计语言模型可以由第t个词的条件概率表示:
Wt是第t个单词,子序列为
在构建自然语言的统计模型时,可以通过利用词序来降低难度,而事实上,在单词序列中时间上更接近的单词在统计上更依赖。因此,n-gram模型为大量上下文中的每一个构建下一个单词的条件概率表,即最后n- 1个单词的组合:只考虑那些在训练语料库中实际出现的连续单词的组合(或经常出现的组合)。当训练语料库中没有出现的n个单词的新组合出现时会发生什么?一个简单的答案是使用较小的上下文大小来查看预测的概率,如后退三元模型[7](回退:如果p(wn|wn-1,wn-2)找不到就找p(wn|wn-1))或平滑(或插值)三元模型[6](插值:p(wn|wn-1,wn-2)= alpha1*p(wn|wn-1,wn-2)+alpha2*p(wn-1|wn,wn-2)+alpha3*p(wn-2))所做的那样。那么,在这样的模型中,如何从训练语料库中看到的单词序列到新的单词序列进行泛化呢?简单地通过查看足够短的上下文,即,通过“粘合”在训练数据中频繁出现的长度为1、2或3的非常短的单词来获得长单词序列的概率。显然,在单词之前的序列中有更多的信息可以预测,而不仅仅是前几个单词的身份。这种方法至少有两个明显的缺陷(但事实证明很难克服):首先,它没有考虑到1或2个单词以外的上下文,其次,它没有考虑到单词之间的“相似性”。例如,在训练语料库中看到“猫在房间里跑”这句话,可以帮助我们进行概括,使“狗在房间里跑”这句话的可能性几乎一样大,因为“狗”和“猫”(见图2)。“the”和“a”,“room”和“bedroom”等等……)具有相似的语义和语法角色。
1.1 用它自己的武器对抗维度灾难
简而言之,建议的方法的思想可以概括如下:
1.与词汇表中的每个单词关联一个分布式“特征向量”(向量属于m维的向量空间),从而创建单词之间的相似性概念。
2.用序列中这些词的特征向量表示词序列的联合概率函数。
3.同时学习单词特征向量和联合概率函数的参数
特征向量表示单词的不同方面:每个单词与向量空间中的一个点相关联。特征的数量(例如,实验中的m = 30,60或100)远远小于词汇表的大小。概率函数表示为给定前一个词的下一个词的条件概率的乘积,(例如在实验中使用多层神经网络)。这个函数的参数可以迭代调整,以最大化训练数据的对数似然或正则化标准,例如通过添加权重衰减惩罚。与每个词相关的特征向量被学习,但它们可以使用先验知识初始化。
为什么它会起作用?在前面的例子中,如果我们知道狗和猫扮演着相似的角色(语义和语法上),对于(the,a), (bedroom,room), (is,was),(running,walking),我们可以很自然地从the cat is walking in the room)推广到a dog was running in a room,以及类似的许多其他组合。在提出的模型中,它会如此泛化,因为“相似”的词应该具有相似的特征向量,并且因为概率函数是这些特征值的光滑函数,所以特征的微小变化(以获得相似的词)会导致概率的微小变化:只看到上面一个句子不仅会增加这个句子的概率,而且会增加它在句子中“邻居”的组合数量(用特征向量序列表示)。
1.2 与以往工作的关系
使用神经网络对高维离散分布建模的想法在[3]中已经被发现是有用的,其中Z1到Zn的联合概率被分解为条件概率的乘积:
,其中g(.)是由神经网络的一部分表示的函数,并给出了表示Zi分布的参数。在四个UCI数据集上的实验表明,这种方法相对来说工作得非常好[3,2]。符号的分布式表示的想法可以追溯到联结主义的早期[5]。基于字符的文本压缩使用神经网络[11]。学习单词聚类[10,1]也是发现单词之间相似性的一种方法。在本文提出的模型中,我们不是使用离散的随机或确定性变量(对应于词集的软或硬划分)来表征相似度,而是使用每个词的连续实向量,即分布式特征向量来间接表示词之间的相似度。使用向量空间表示单词的想法已经在信息检索领域得到了很好的利用(例如参见[12]),其中单词的向量特征向量是根据它们在同一文档中共同出现的概率来学习的(潜在语义索引[4])。一个重要的区别是,这里我们寻找的是一种有助于紧凑地表示自然语言文本中单词序列概率分布的单词表示。实验表明,联合学习表征(词特征)和模型在性能上有很大的不同。
2 建议的模型:两个体系结构
训练集是序列W1…wT,wt属于V,其中词汇表V是一个大而有限的集合,目标是学习一个好的模型,因为它给出了很高的样本外似然。我们将报告l/P的几何平均值,也称为困惑度,它也是平均负对数似然的指数。该模型的唯一约束是,对于任意选择。通过这些条件概率的乘积,可以得到任意单词序列的联合概率模型。这里描述了模型的基本形式。下面几节将描述加速和扩展它的改进。我们分解这个函数为两个步骤:
(1)一个映射C从V的任意元素到实向量C属于m维向量空间 。它表示与词汇表中每个单词相关联的“分布式特征向量”。在实践中,C由一个(自由参数的)I V I x m矩阵表示。
(2)单词的概率函数,用c表示。我们考虑了两种可选的公式:
(a)直接架构:函数g将上下文中单词的特征向量序列映射到V中单词的概率分布。它是一个向量函数,其第i个元素估计概率,如图1所示。我们在神经网络的输出层中使用了“softmax”;其中hi是单词i的神经网络输出分数。(由当前单词前n个单词的embedding获得当前单词)
(b)循环架构:函数h将一系列特征向量(C(Wt-n),···,C(Wt-i), C(i))(即包括上下文词和候选下一个词i)映射到标量hi,并再次使用softmax;f (Wt、Wt-i···,Wt-n) = g (C (Wt), C (wt-d···C (Wt-n))。我们称这种架构为“循环”,因为一个人反复运行h(例如神经网络),每次输入下一个候选单词i的特征向量C(i)。(由当前单词前n个单词的embedding获得当前单词的embedding)
函数f是这两个映射(C和g)的组合,其中C被上下文中的所有单词共享。这两个部分各有一些参数。映射C的参数仅仅是特征向量本身(由IVI x m矩阵C表示,其第i行是单词i的特征向量C(i))(第i个单词的embedding)。函数g可以通过前馈或循环神经网络或另一个参数化函数实现。
训练语料库惩罚对数似然最大化,其中R是一个正则化项(例如权重衰减),它稍微惩罚了参数的范数。
3 加速和其他技巧
Short list。其主要思想是将神经网络的工作集中在概率最高的单词的“短列表”上。这可以节省大量计算,因为在这两种提出的体系结构中,计算观察到的下一个单词的概率的时间几乎与词汇表中的单词数量成线性关系(因为必须计算词汇表中与每个单词i相关的分数hi,以便使用softmax正确地规范化概率)。加速技巧的思想如下:不是计算下一个单词的实际概率,而是使用神经网络来计算短列表中下一个单词的相对概率。短列表的选择取决于当前上下文(前n个单词)。我们已经使用我们的平滑三元图模型来预先计算一个短列表,其中包含与前两个单词关联的最可能的下一个单词。因此,条件概率P的估计计算如下,其中ht表示Wt之前的历史文本,Lt表示用于预测Wt对应单词的短单词列表。(这个没想明白在推理时怎么判断当前预测词属于short list)
Table look-up for recognition。为了加速训练模型的应用,可以在哈希表中预先计算神经网络的输出,至少对于最频繁的输入上下文。在这种情况下,神经网络将很少被调用,并且平均计算时间将非常小。请注意,在语音识别系统中,只需要计算每个上下文中声音不明确的单词的相对概率,这也大大减少了计算量。
随机梯度下降。由于我们有数百万个示例,因此在数据的几次传递中收敛是很重要的。对于非常大的数据集,随机梯度下降收敛时间似乎随着数据集的大小呈次线性增长(参见下面Brown vs Hansard的实验)。我们发现将语料库分成段落并随机排列是很有用的。通过这种方式,单词流中的一些非平稳性被消除,从而产生更快的收敛速度。
Capacity control.。对于“较小的语料库”,如Brown(120万个样本),我们发现早期停止和权值衰减有助于避免过度拟合。对于更大的语料库,我们的网络仍然不适合。对于较大的语料库,我们发现双精度计算对于获得好的结果是非常重要的。
混合模型。我们发现,通过将神经网络的概率预测与平滑三元图的概率预测相结合,以及以上下文频率为条件的权重(与在平滑三元图中组合三元图、双元图和单元图的过程相同),性能得到了提高。
初始化词特征向量。我们已经尝试了随机初始化(均匀分布,-0.01-0.01),以及一种“更智能”的方法,该方法基于一个非常大的“上下文特征”矩阵的奇异值分解(SVD)。这些上下文特征是通过计算语料库中每个最常见的上下文(词序列)中每个单词的出现频率来形成的。这个想法是“相似”的词应该在相同的上下文中以相似的频率出现。我们使用了大约9000个最常见的上下文,并使用SVD将它们压缩为30个特征。
词汇表之外的词汇(未登录词)。对于一个词汇表外的单词Wt,我们需要想出一个特征向量来预测后面的单词,或者预测它的概率(这只有在循环架构下才有可能)。我们使用短列表中所有单词的加权平均特征向量作为特征向量,权重为这些单词的相对概率:
4 实验结果
在Brown语料库和Hansard语料库上进行了对比实验。布朗语料库包含1181041个单词(来自各种各样的英语文本和书籍)。前80万个单词用于训练,接下来的20万个用于验证(模型选择、权重衰减、提前停止),剩下的181,041个用于测试。不同单词的数量为47,578(包括标点符号,区分大小写,以及用于分隔文本和段落的语法标记)。频次:::;3个被合并成一个标记,将词汇表大小减少到IVI = 16,383。
Hansard语料库(加拿大议会会议记录,法语版本)是一个大约3400万单词的流,其中3200万(集a)用于训练,110万(集B)用于验证,120万(集C)用于样本外测试。原始数据有106,936个不同的单词,频率为:::;10个被合并成一个标记,产生IVI = 30,959个不同的单词。
比较神经网络的基准是插值或平滑的三元模型[6]。令qt = l(Jreq(wt - 1,Wt-2))表示上下文出现的离散频率(wt - 1,Wt-2)(我们使用l(x) = r -log((l x)/T)l,其中x是上下文出现的频率,T是训练语料库的大小)。在验证集上学习到三格、双格、单格和零格的条件混合,混合权值以离散频率为条件。下图是不同模型p的测试集困惑度(几何平均值为1/ p(Wt Iwi-1))。Hansard和Brown分别在大约10次和50次之后得到了明显的收敛性,学习率从大约10-3逐渐下降到10-5。所有实验均采用10-4或10-5的权重衰减(基于在验证集上比较的几个实验)。
主要结果是神经网络的性能比平滑trigram网络好得多。在Brown上,根据验证困惑度(在尝试过的不同架构中,见下文),最好的神经网络系统产生了258的困惑度,而平滑的三元组产生了348的困惑度,差了大约35%。这是使用直接架构与三元组(条件混合)混合的网络获得的,其中有30个单词特征用SVD方法初始化,40个隐藏单元和n = 5个上下文单词。在Hansard上,神经网络的对应数据为44.8,平滑三元图的对应数据为54.1,差20.7%。这是通过具有直接架构、100个随机初始化单词特征、120个隐藏单元和n = 8个上下文单词的网络获得的。
更多的背景是有用的。在Brown上使用循环结构进行实验,使用30个单词特征和30个隐藏单元,改变上下文单词的数量:n = 1(如双元图)产生302的测试困惑度,n = 3产生291,n = 5产生281,n = 8产生279(注意,平滑三元图产生348)。
隐藏的单位有帮助。在Brown上使用直接架构进行实验(直接输入输出连接),使用30个单词特征,5个上下文单词,改变隐藏单元的数量:0表示测试困惑度为275,10表示267,20表示266,40表示265,80表示265。
共同学习单词特征是很重要的。在Brown(40个隐藏单元,5个上下文词)上的直接结构实验中,在训练过程中保持SVD方法初始化的词特征固定不变,得到的测试困惑度为345.8,而如果将词特征与其他参数联合训练,则得到的测试困惑度为265。
初始化不是很有用。两种体系结构在Brown上的实验表明,相对于随机初始化,单词特征的SVD初始化并没有带来太大的改进:它加速了初始收敛(节省了大约2个epoch),并且产生了小于0.3%的困惑度改进。
直接架构工作得更好一些。结果发现,直接式结构比循环式结构好2%左右。条件混合有帮助,但即使没有它,神经网络也更好。在Brown上,没有混合的最佳神经网络的测试困惑度为265,平滑三元组的测试困惑度为348,而它们的条件混合的测试困惑度为258(即比两者都好)。在Hansard上,改进较少:一个神经网络的困惑度为46.7,与三元组合(54.1)混合,得到的困惑度为45.1。
5 讨论
在两个语料库上的实验,一个中等语料库(120万单词)和一个大型语料库(3400万单词)表明,所提出的方法比最先进的方法平滑三格表(smooth triram)产生更好的困惑度,差异在20%到35%之间。
我们认为,这些改进的主要原因是所提出的方法允许利用学习到的分布式表示来用自己的武器来对抗维度的诅咒:每个训练句子告诉模型关于其他句子的组合数量。请注意,如果我们对每个“上下文”(短单词序列)都有一个单独的特征向量,那么模型将具有更大的容量(可以像n-grams那样增长),但它不会自然地在许多不同的使用单词的方式之间进行推广。一个更合理的选择是探索单词以外的语言单位(例如一些短单词序列,或者一些子单词语素单位)。
在架构、计算效率和利用先验知识的层面上,改进模型可能还有很多工作要做。未来研究的一个重要优先事项应该是评估和改进这里提出的加速技巧,并找到在不增加太多训练时间的情况下增加容量的方法(处理数以亿计单词的语料库)。利用时间结构并扩展输入窗口的大小以包括可能的整个段落,而不增加太多参数数量的一个简单想法是使用时间延迟和可能的循环神经网络。在这样的多层网络中,当网络输入窗口被移动时,已经为小组连续单词执行的计算不需要重做。类似地,人们可以使用循环网络来捕获关于文本主题的潜在更长期的信息。
所提出的模型可以改进的一个非常重要的领域是使用先前的语言知识:语义(例如Word Net),句法(例如标记器)和形态学(基数和语素)。查看模型学习到的单词特征应该有助于理解和改进它。最后,未来的研究应该确定所提出的方法在语音识别、语言翻译和信息检索中的应用。
n-gram:自然语言处理NLP中的N-gram模型_nlp ngam-CSDN博客
综述 词向量与分布式表示:综述 词向量与分布式表示_分布式词向量-CSDN博客
论文阅读:论文阅读:A Neural Probabilistic Language Model 一种神经概率语言模型-CSDN博客
谷歌学术:https://scholar.dosf.top/