神经概率语言模型

摘要

  • 统计语言建模的目标是学习语言中单词序列的联合概率函数。由于 the curse of dimensionality,这本质上是困难的:测试模型的单词序列可能与训练期间看到的所有单词序列不同。一种基于n-gram的传统的但非常成功的方法是,通过连接训练集中看到的非常短的重叠序列来获得泛化。我们建议通过学习词的分布式表示来对抗 the curse of dimensionality,这允许每个训练 sentence 告诉模型关于语义相邻句子的指数个数(inform the model about an exponential number of semantically neighboring sentences.)。该模型同时学习每个单词的分布式表示以及单词序列的概率函数,用这些表示来表达。如果单词序列是由已经见过的单词(在具有附近表示的意义上)的相似单词构成的,那么获得泛化是因为之前从未见过的单词序列具有较高的概率。在合理的时间内训练这样的大型模型(具有数百万个参数)本身就是一个重大挑战。我们阐述了使用神经网络进行概率函数的实验,展示了在在两个文本语料库中所提出的方法显着改进了最先进的n-gram模型,并且所提出的方法允许利用更长的上下文。
  • 分布式表示:将庞大的词汇表,从一个高维空间映射到一个低维空间中,而又尽量保存不同词之间差异性的技术。所谓分布式表示,是存在一个分布式假设,即如果两个词的上下文相同,那么这两个词的表示也是相 似的。可以将分布式表示理解为一种用来得到词表示的方法。

Introduction

  • 使语言建模和其他学习问题实现困难的根本问题是维度诅咒。当人们想要模拟许多离散随机变量(例如句子中的单词或数据挖掘任务中的离散属性)之间的联合分布时,更为明显。例如,如果想用大小为100,000的词汇表V的自然语言来模拟10个连续单词的联合分布,则可能有 10000 0 10 1 = 1 0 50 1 100000^{10} - 1 = 10^{50} - 1 个自由参数。在对连续变量建模时,我们更容易获得泛化(例如,使用平滑的函数类,如多层神经网络或高斯混合模型),因为要学习的函数的预期具有一些局部平滑性。对于离散空间,泛化结构并不那么明显:这些离散变量的任何变化都可能对要​​估计的函数的值产生巨大影响,并且当每个离散变量可以采用的数值很大时,在 Hamming 距离中的大多数观测对象几乎彼此远离。
  • 从非参数密度估计的观点出发,想象不同学习算法是如何泛化的,一种有用方法是考虑最初集中在训练点(例如,训练句子)的概率质量(mass)是如何以更大的体积分布,通常在训练点周围的相邻的某种形式。在高维度中,将概率质量分布在重要的地方而不是在每个训练点周围的所有方向上均匀分布是至关重要的。在本文中,我们将展示这里提出的方法的通用方式与以前的最先进的统计语言建模方法一般化的方式是根本不同的。
  • 语言的统计模型可以由给定所有先前的单词的下一个单词的条件概率表示,因为在这里插入图片描述
    其中 w t w_{t} 是第 t 个字,并且将子序列写为 w i j = w i w i + 1 . . . w j 1 w j w^{j}_{i} =(w_{i},w_{i + 1},...,w_{j-1},wj) 。这种统计语言模型在涉及自然语言的许多技术应用中是有用的,例如语音识别,语言翻译和信息检索等。因此,统计语言模型的改进可能对此类应用产生重大影响。
  • 在构建自然语言的统计模型时,通过利用单词顺序大大降低了这种建模问题的难度,并且在单词序列中时间上更接近的单词在统计上更加依赖。因此,对于大量上下文中的每一个,即最后n-1个单词的组合,n-gram模型构造出了下一个单词的条件概率表:在这里插入图片描述
    我们只考虑实际出现在训练语料库中的那些连续单词组合,或者那些足够频繁发生的组合。当出现n个词的新组合但在训练语料库中没有发现时会发生什么?我们不希望为这种情况分配零概率,因为这样的新组合可能会发生,并且对于更大的上下文 size,它们将更频繁地发生。一个简单的答案是使用较小的上下文 size 来观察预测的概率,例如后退三元模型或平滑三元模型。那么,在这样的模型中,从训练语料库看到的单词序列到新的单词序列中,泛化是如何获得的?理解这种情况的方法是考虑相应的 interpolated 或back-off n-gram模型的生成模型。
  • 从本质上讲,一个新的单词序列是通过“粘合”非常短且重叠的长度1,2 …或最多n个单词生成的,这些词在训练数据中经常看到。用于获得下一个片段的概率的规则隐含在 back-off或interpolated n-gram算法的细节中。通常研究人员使用n = 3,即三元,可以获得最先进的结果,但Goodman(2001)结合了许多技巧可以产生实质性的改进。显然,序列中有更多信息紧跟在预测词之前,而不仅仅是前两个词的标识。这种方法至少有两个地方需要改进,首先,它没有考虑超过1或2个单词的上下文,第二没有考虑单词之间的“相似性”。例如,在训练语料库中看到“The cat is walking in the bedroom”的句子应该可以帮助我们概括地使句子“A dog was running in a room”的出现成为可能,仅仅因为“dog”和“cat”(“the”和“a”,“room”和“bedroom”等等)具有相似的语义和语法角色。
  • 已经提出了许多方法来解决这两个问题,我们将在1.2节中简要解释这里提出的方法与其中一些早期方法之间的关系。我们将首先讨论提出的方法的基本思想是什么。第2节将更正式的介绍,使用依赖于共享参数的多层神经网络来实现。本文的另一个贡献是考虑如何为非常大的数据集(具有数百万或数千万个示例)训练这种非常大的神经网络(具有数百万个参数)。最后,本文的一个重要贡献是表明:训练这种 large-scale 模型虽然昂贵但是可行的,可扩展到 large contexts,并能产生良好的比较结果。
  • 本文中的许多操作都是矩阵表示法,小写字母 v 表示列向量, v v^{'} 表示其转置, A j A_{j} 表示矩阵A的第j行,并且 x . y x.y = x y x^{'}y

1.1 Fighting the Curse of Dimensionality with Distributed Representations

  • 简而言之,提出的方法的思想可以概括如下:
    1 将词汇表中的每个单词与分布式单词特征向量相关联( R m R^{m} 中的实值向量)
    2 根据序列中单词的特征向量表示单词序列的联合概率函数
    3 同时学习单词特征向量和该概率函数的参数

  • 特征向量表示单词的不同方面:每个词与向量空间中的一点相关联。特征的数量(例如,在实验中m = 30,60或100)远小于词汇的大小(例如17,000)。概率函数表示给定的先前词的下一个单词的条件概率的乘积(例如,在实验中使用多层神经网络来预测给定先前词的下一个单词)。该函数具有可以迭代调整的参数,以便最大化训练数据的对数似然或正则化标准,例如:增加一个 weight decay penalty。学习与每个单词相关联的特征向量,但是可以使用语义特征的先验知识来初始化它们。(The feature vectors associated with each word are learned, but they could be initialized using prior knowledge of semantic features.)

  • 它为什么有效?在前面的例子中,如果我们知道狗和猫扮演类似的角色(语义和语法),并且类似地(the,a)、(bedroom,room)、(is,was)、(running,walking),我们可以自然地推广(即转移概率质量)从

        The cat is walking in the bedroom
到        A dog was running in a room
并且类似的   The cat is running in a room
        A dog is walking in a bedroom
        The dog was walking in the room
              

和许多其他的组合。在所提出的模型中,由于“相似的”单词被期望具有相似的特征向量,并且由于概率函数是这些特征值的平滑函数,因此特征的一些小变化将导致概率的小变化,所以它具有这样的一般性。因此,训练数据中上述句子任意一个的存在不仅会增加该句子的概率,还会增加句子空间(由特征向量序列表示)上的其组合数量的“邻居”的概率。

1.2 与先前工作的关系(Relation to Previous Work)

  • 已经发现使用神经网络建模高维离散分布的想法对于学习Z1···Zn的联合概率是有用的,这是一组随机变量,其中每个变量可能具有不同的性质。
  • 已经发现使用神经网络的思想去模拟高维离散分布对于学习 Z 1 Z n Z_{1}···Z_{n} 的联合概率是有用的。这是一组随机变量,其中每个变量可能具有不同的性质。

猜你喜欢

转载自blog.csdn.net/FK103/article/details/83033086