目录
一、传统语言模型
1.1 稀疏性
1.2泛化能力差
二、神经网络语言模型
2.1 前馈神经网络模型(FFLM)
2.2 循环神经网络模型(RNNLM)
2.2.1循环神经网络模型示例
2.2.2RNN语言模型训练过程
2.2.3RNN语言模型反向传播
2.2.4语言模型评估
语言模型的构建目的是为了对语言中的各要素的分布进行估计,具有较长的研究历史和广泛的应用。传统的离散计数类语言模型,比如bi-gram,n-gram模型等在很多应用领域的结果得到了广泛认可。
其基本假设通常是单词的分布服从n阶马尔可夫链。通过对连续n个单词出现频率进行计数并平滑来估计单词出现的概率。
但是由于是离散模型,因此有稀疏性和泛化能力低的缺点。
随着深度学习被广泛接纳,近年来神经网络语言模型(NLM)收到了广泛关注。相比传统的语言模型,神经网络语言模型属于连续模型,主要着力解决离散模型的两个主要痛点:
通过将离散的n-gram单词组投影到致密的空间词嵌入技术,采用循环神经网络来解决传统语言模型稀疏性和泛化能力低的问题。
一、传统语言模型
传统的离散模型主要是统计语言模型,比如bigram或者n-gram语言模型,是对n个连续的单词出现概率进行建模。
传统的语言模型基于马尔可夫假设,假设我们对于一个单词在某个位置出现概率的估计可以通过计算该单词与前面m个单词同时出现频率相对于前面的m个单词同时出现的频率的比获得。这是朴素贝叶斯的思路。
如果m为0,我们的估计只基于该单词在全部文本中相对于其他所有单词的频率,这个模型就是unigram模型;如果m为1,那么这个模型就是常见的bigram模型,如果m为2,那么这个模型就是trigram模型,其计算公式如下:
如果把文本视为一个状态机,每一个出现的单词即是状态,上述公式也可以视为是一个m阶的马尔可夫链模型。
传统n-gram模型简单实用,但是却有两大致命缺点:稀疏性和泛化能力差。
1.1 稀疏性
因为n-gram模型只能对文本中出现的单词或者单词组进行建模,当新的文本中出现意义相近但是没有在训练文本中出现的单词或者单词组的时候,传统离散模型无法正确计算这些训练样本中未出现的单词的应有概率,他们都会被赋予0概率预测值。这是非常不符合语言规律的事情。
举个例来讲,在一组汽车新闻中,“SUV”和“吉普”是同义词,可以交替出现,但是假设整个训练集中没有出现过“吉普”这个单词,那么在传统模型中对于“吉普”这个词的出现概率会输出接近于0的结果。
但是上述相似例子在实际生活中却是非常比比皆是,由于计算资源与数据的限制,我们经常会发现模型在使用中遇见在整个训练集中从未出现的单词组的情况。
为了解决这种矛盾,传统方法是引入一些平滑【 J .Goodman. A bit of progress in language modeling. Technical Report MSR-TR-2001–72, Microsoft Research, 2001. 】或者back-off的技巧【R. Kneser and H. Ney. Improved backing-off for n-gram language modeling. In International Conference on Acoustics, Speech and Signal Processing, pages 181–184, 1995.】整体上,效果并没有预想的好。
1.2泛化能力差
除了对未出现的单词本身进行预测非常困难之外,离散模型还依赖于固定单词组合,需要完全的模式匹配,否则也无法正确输出单词组出现的概率。
继续前述例子,假设新闻中一段话是“作为翻山越岭常用的SUV”,这句话和“作为越野用途的吉普”本身意思相近,一个好的语言模型是应该能够识别出后面这句话与前面那句无论从语法还是语义上都是非常近似,应该有近似的概率分布,但是离散模型是无法达到这个要求的。这就使得此类模型的泛化能力不足。
Bengio等人在发布其神经网络语言模型的时候就专门指出了传统离散模型的这个弱点。
此外,对于n-gram模型来说,第一个公式的马尔可夫假设太强。人在对文字进行处理的时候,是能够将很长一段上下文纳入考虑,但是n-gram的离散模型只考虑待预测单词前面的n-1个单词,这个马尔可夫假设与实际情况并不相符。
离散模型在计算上还存在“维度诅咒”的困难。当我们将更多单词组合挑出来之后才能更精准地预测特定单词组出现的概率,但是这种组合的量是非常大的。假设我们的词库有一万个独立单词,对于一个包含4个单词的词组模式,潜在的单词组合多达10的20次方。这使得突破一定的预测精度非常困难。
二、神经网络语言模型
传统语言模型的上述几个内在缺陷使得人们开始把目光转向神经网络模型,期望深度学习技术能够自动化地学习代表语法和语义的特征,解决稀疏性问题,并提高泛化能力。
我们这里主要介绍两类神经网络模型:
前馈神经网络模型(FFLM)【主要设计来解决稀疏性问题】循环神经网络模型(RNNLM)【主要设计来解决泛化能力,尤其是对长上下文信息的处理】
在实际工作中,基于循环神经网络及其变种的模型已经实现了非常好的效果。
我们前面提到,语言模型的一个主要任务就是要解决给定到当前的上下文的文字信息,如何估计现在每一个单词出现的概率。
2.1 前馈神经网络模型(FFLM)
Bengio等人提出的第一个前馈神经网络模型利用一个三层,包含一个嵌入层、一个全连接层、一个输出层,的全连接神经网络模型来估计给定n-1个上文的情况下,第n个单词出现的概率。其架构如下图所示:
这个模型首先将词典中的单词映射到一个给定维度的致密空间,这个映射就是图中的参数矩阵C。该矩阵行数等于词典中的单词数量,列数等于给定的致密空间的维度。单词在致密空间的映射就是单词的词向量表达,这点我们在第一节课里已经学到了。在该模型中,上下文不再由原始的??−1,⋯,??−?+1wn−1,⋯,wn−m+1表示,而是由(?(??−1),⋯,?(??−?+1))(C(wn−1),⋯,C(wn−m+1))表示。
其次模型使用一个激活函数将每个单词对应的上下文映射到词典全部单词对应的条件概率分布空间中。
最后,该模型在训练过程中同时学习词向量的映射关系参数和上下文到单词出现的条件概率参数。
通过使用词向量的映射,前馈神经网络模型能解决稀疏性的问题。
一些在训练集中没有遇到过单词由于其与上下文同时出现的关系,在词向量的空间中会与相类似的单词处于相近的位置,从而降低出现接近于0的条件概率的问题。
该模型在实际应用过程中表现出了一定的泛化能力,但是该模型没有明确地对超出观察窗口的上下文信息进行处理。
2.2 循环神经网络模型(RNNLM)
第二类的循环神经网络模型就是为了解决上述固定窗口问题而出现的。
前馈神经网络模型假设每个输入都是独立的,但是这个假设并不合理。
经常一起出现的单词以后也经常出现的概率会更高,并且当前应该出现的词通常是由前面一段文字决定的,利用这个相关性能提高模型的预测能力。
循环神经网络的结构能利用文字的这种上下文序列关系,从而有利于对文字建模。这一点相比前馈神经网络模型更接近人脑对文字的处理模型。
比如一个人说:"我最近要去美国出差,想顺便买点东西,因此需要兑换_ "。 对于在__”中需要填写的内容,通过前文的“兑换”和“买”知道需要是一种货币,通过“美国”知道这个货币需要是“美元”。通过RNNLM能回溯到前两个分句的内容,形成对“美元”,“买”,“兑换”等上下文的记忆。
RNNLM理论上可以保留无限长度的记忆,但是由于梯度消失(Gradient Vanishing)问题,记忆能力不长。对于一些语言模型来说,问题不大,毕竟一般通过前十几个单词当前应该出现的单词可以猜个八九不离十。
2.2.1循环神经网络模型示例
2.2.2RNN语言模型训练过程
2.2.3RNN语言模型反向传播
2.2.4语言模型评估
迷惑度/困惑度/混乱度(perplexity),其基本思想是给测试集的句子赋予较高概率值的语言模型较好,当语言模型训练完之后,测试集中的句子都是正常的句子,那么训练好的模型就是在测试集上的概率越高越好。迷惑度越小,句子概率越大,语言模型越好。