Paper Reading-1-Recurrent neural network based language model

目录

说明

引用文献

摘要

绪论

模型描述

优化

WSJ实验

NIST RT05实验


Recurrent neural network based language model

说明

这篇文章引自Mikolov 等人2010年经典论文,主要介绍了基于语言模型的RNN模型,详细描述了模型的训练及优化过程,并在WSJ和NIST RT05测试集上进行了论证,得到了较好的效果。本人在Tensorflow上实现了该模型,首先需要制作词表,词表的大小即为V;one-hot编码可通过词在词表中的位置表示,例如狗/在/室内/跑可以表示为:[509,128,812,373]。一般而言,该词在词表中的数字越小表示其出现的频率越高。在模型的训练过程中,当遇到语料过少时,特别是当语料规模远远小于模型参数大小时,应当减小embedding-size和hiding-size。总之,本文提出的RNNLM相比较Ngram模型,具有更强的上下文能力,使得模型可以做的很长(Ngram最长一般做到6Gram)。同时,动态模型也使得模型的训练和更新能够得以实时进行。本文比较基础,可以作为NNLM入门文献阅读。

引用文献

kolovT, Karafiát M, Burget L, et al. Recurrent neural network based language model[C]// INTERSPEECH 2010, Conference of the International Speech Communication Association, Makuhari, Chiba, Japan, September. DBLP, 2010:1045-1048.

摘要

当前,一种新的基于语言模型的循环神经网络(RNNLM)被应用于语音识别中。其结果表明,采用几种混合RNNLM的方式,相比较最先进的基于回退的语言模型,可以大约降低50%的PPL(困惑度)。语音识别实验表明,在WSJT语料集上,相比较其他模型处理同等规模的数据,RNNLM可以降低近18%的词错率。而在更困难的NIST RT05语料集上,在基于回退的语言模型训练更多的数据条件下,RNNLM仍然降低了近5%的词错率。我们提供了充分的实验证据来表明,这种联结者语言模型,除了它计算复杂性较高以外,其相比较标准N-Gram模型更好。

绪论

序列类数据的预测一直被许多人认为是机器学习和人工智能的重要问题。统计语言模型的目标是在文本数据中,给定上文来预测下一个单词是什么。因此,当我们对语言模型进行建模时,可以将其处理为对于序列数据的预测问题。尽管如此,许多对于这种统计模型建模的尝试都涉及到语言领域非常具体的方法。例如,假设自然语言句子被描述为解析树,或者需要考虑语言的形态学,语法或者语义。甚至最广泛使用和通用的模型—基于N-Gram的统计语言模型,也假定语言是由各个基本符号--单词组成的序列组成。单词组成了句子,而句子结束的符号位置则扮演着重要或者特殊的角色。

值得怀疑的是,能否在简单的N-Gram模型上有任何显著的重大进展。如果我们通过模型更好地预测时序数据的能力来衡量这一进步,那么答案就是已经取得了相当大的进步——即通过引入cache模型和class-based的模型。与此同时,还有许多其他的技术也被提出,其效果几乎等同于cache模型和class-based模型。

如果我们通过实际应用来衡量高级语言建模技术的成功,我们就会有更多的怀疑。真实世界的语言模型,包括语言识别和机器翻译系统都建立在大量的数据基础上,流行的说法是,我们需要更多的数据。研究的模型趋于复杂,并且建立的系统能否较好的工作常常受限于大量的训练数据。事实上,大多数提出的先进的语言模型技术仅仅比简单的baselines有一点点的提升,以至于在实际中很少使用。

模型描述

我们决定研究RNN对于序列数据的建模。使用人工神经网络来对统计语言模型进行建模已经被Bengio(2003年A neural probabilistic language model)所提出,其采用一种前馈神经网络来处理固定长度的上下文数据。该方法非常成功,Goodman进一步的研究表明,该模型比基于其他技术的混合模型更好,包括class-based模型。随后,Schwenk表明,基于神经网络的模型在语音识别的多个项目中,相比baselines具有显著的提高。

Bengio方法的一个主要缺陷是前馈网络必须使用固定长度的上下文,并且需要在训练前特别指定。使用这种方法意味着该神经网络只能根据先前的5-10个词来预测下一个词。众所周知的是,人类可以成功开发出更长的文本数据。同时,cache模型提供了神经网络互补的信息,因此,很自然的考虑到一种可以对任意长度的上下文隐式地编码时间信息的模型。

RNN模型不使用长度受限的文本。通过使用循环连接的方式,信息可以在网络中任意地循环很长时间。然而,在通过SGD训练时,会遇到长期依赖的问题。

在我们工作中,我们采用一种被称为SRNN(simple recurrent neural network)或者Elman网络的结构。这大概是最简单的RNN版本,非常易于处理和训练。神经网络包括:

Paper Reading-1-Recurrent neural network based language model

图1 simple recurrent neural network

  1. 输入层:x
  2. 隐层:s
  3. 输出层:y
  4. t时刻的输入为:Paper Reading-1-Recurrent neural network based language model
  5. t时刻的隐层为:Paper Reading-1-Recurrent neural network based language model
  6. t时刻的输出为:Paper Reading-1-Recurrent neural network based language model

其中,输入向量xt由串联的向量w表示当前的词,输出则来源于第t-1步的隐层s,公式如下所示

Paper Reading-1-Recurrent neural network based language model

这里的Paper Reading-1-Recurrent neural network based language model为sigmoid**函数:

Paper Reading-1-Recurrent neural network based language model

Paper Reading-1-Recurrent neural network based language model为softmax**函数:

Paper Reading-1-Recurrent neural network based language model

对于模型的初始化,Paper Reading-1-Recurrent neural network based language model可以设置为简单的向量值,例如0.1-当处理大量数据时,初始化不是非常重要。在下一个时间步,Paper Reading-1-Recurrent neural network based language model是对Paper Reading-1-Recurrent neural network based language model的一次拷贝。输入向量Paper Reading-1-Recurrent neural network based language model表示词语在 t时刻编译为one-hot方式,其中向量的长度为词表的长度V(可达30k-200k)。隐层s通常选择30到500个神经元。从我们的经验上来看,隐层的大小通常与训练集的数据规模有关,即越大的数据,其隐层的神经元个数需要更多。

神经网络通常训练若干轮,在训练的过程中,所有的数据被顺序的放入。通常情况下,权重Weight被初始化一个很小的值(可以通过采用均值为0,方差为0.1高斯噪声)。为了训练网络,我们采用SGD反向传播的方式。起始学习率设置为α=0.1。在接下来的每一轮训练过程中,网络都会在验证集上进行测试。如果观测到验证集的log-likelihood增加,那么在新的一轮训练中,学习率α将会进行减半处理。如果基本没有什么显著的提升,那么将会结束训练。模型通常会在10~20轮训练后收敛。

在我们的实验中,网络不会过度训练,即使采用非常大的隐藏层,采用正则化的方式来惩罚大权值并不会对结果有任何显著提升。输出层Paper Reading-1-Recurrent neural network based language model通过给定前面的单词Paper Reading-1-Recurrent neural network based language model以及隐层Paper Reading-1-Recurrent neural network based language model来表示下一个单词的概率分布。通过采用softmax函数来确保概率分布的有效性,即满足对于任意的单词mPaper Reading-1-Recurrent neural network based language model并且Paper Reading-1-Recurrent neural network based language model

在每一轮训练过程中,误差向量按照交叉熵准则进行计算,权重Weight通过标准的反向传播方式进行更新:

Paper Reading-1-Recurrent neural network based language model

这里的Paper Reading-1-Recurrent neural network based language model表示使用one-hot编码后的文本应当被预测的值,Paper Reading-1-Recurrent neural network based language model表示模型实际输出值。

值得注意的是,在传统的统计语言模型中,训练组和测试组的区别在于,当测试数据被处理时,模型不会被更新。因此,当一个新的人名在测试集重复发生时,那么,它将同样得到一个重复的很小的概率。即使它是由已知的词汇组成。可以假设,这种长期记忆不应该存在于**的上下文单元中(因为这些变化非常迅速),而是在突触本身,即使在测试阶段,网络也应该继续训练。我们称这样的模型为动态模型。对于这种动态模型,我们可以设置学习率α=0.1。这样,在训练阶段,所有的数据都会在网络上出现数次,动态模型在处理测试数据时只需更新一次。这虽然不是最佳的解决方案,但正如我们所看到的,相比较静态模型能够大大降低困惑度(PPL)。注意,这种修改方式非常像基于cache技术的回退模型。所不同的是,神经网络可以在连续空间进行学习,因此,如果dog和cat是相关的,有关联的,那么在测试集中,dog发生的频率提升应当也会相应的增加cat的概率。

自动更新模型也会自适应新的领域。然而,在语音识别实验中,历史是由识别器给出的假设来表示的,并且包含识别错误。这通常会导致在ASR中基于cache的n-gram模型糟糕的性能。

这里的训练结构是指采用截止的误差反向传播,其时间步为Paper Reading-1-Recurrent neural network based language model。这通常不是最优的,因为基于误差向量的权重更新计算不应仅仅只与上一步时间步有关。为了解决这种简化的模型的局限性,我们通常采用BPTT的方式更新权值。

同Bengio的前向神经网络和Schwenk的模型最主要的不同在于,RNN模型需要大量的参数去调整以及在训练前需要特别的选择。而对于RNNLM,仅仅需要选择隐层的大小。对于前馈神经网络,需要调整的参数是词向量的维度(映射到低维空间word2vec),隐层的大小以及上下文句子的长度。

优化

为了提高模型的能力,我们将所有低于阈值的词合并到一个特殊的类中:rare类。词的概率可以由下式进行计算:

Paper Reading-1-Recurrent neural network based language model

这里Paper Reading-1-Recurrent neural network based language model表示词表中出现次数(频率)低于阈值的词的个数。所有的低频词被平等的对待,也即他们之间的概率分布是均等的。

Schwenk描述了一些能够提高模型性能的可能方法。(详情请看论文中提供的参考文献)在使用Brown corpus数据集(800K词汇,100个隐藏节点和阈值设置为5)处理时,相比较Bengio花费了113天基本实现模型,26小时实现重要采样后的模型,我们仅花费了大约6个小时基本实现模型的训练。在此过程中,我们只使用BLAS库加快了计算速度。

WSJ实验

为了评估这种基于语言模型的简单的RNN的性能,我们选择几种标准语音识别项目进行测试。首先,我们在重新筛选出基于DARPA WSJ’92和WSJ’93数据集(该数据集被Xu和Filimonov使用)的100个最佳表现列表后给出我们的结果。其中Oracle WER在DEV验证集中为6.1%,而在EVAL评价集中为9.5%。语言模型的训练数据于Xu使用的一样。

训练语料由37M来自于English Gigaword的NYT机构的词汇组成。由于在大数据上训练RNNLM是非常费时的,所以我们只使用6.4M的词汇来训练RNN模型(300 K句子)。这耗费了几个星期去训练最复杂的模型。PPL的评价工作则建立在保留的230k词汇的数据上。当然,在所有的实验中,我们也会给出组合模型的结果—线性插值的方法,其中RNNLM的权重为0.75,基于回退的LM模型的权重为0.25。在下列实验中,我们将基于Kneser-Ney平滑的5-gram标记为KN5。而NNLM则标记为RNN 90/2,这里,90表示隐层的大小,2表示词频阈值为2。为了正确地使用由识别器使用的数据子集训练的回退模型来重新定义N个最佳列表,我们使用开放的词表(未知的词汇毕竟是低概率的)。为了提高模型的性能,我们采用几种不同结构的RNNLM进行线性插值后输出。(这里的权值同样是随机初始化的)

训练结果如表1和表2所示,它们绝不仅仅是通过改变语言建模技术而获得的关于WSJ任务的最大改进。随着训练数据的增加,这种改进越来越大,这也意味着,通过使用更多的数据,可以简单地实现模型性能地提升。如表2所示,通过采用3种混合的动态RNNLM模型,其WER相比较经KN平滑后的5-Gram降低了18%。与此同时,其PPL也得到了有史以来最大的降低之一,与KN-5-Gram相比降低了将近50%。这里的3种混合动态RNNLM模型,事实上,通过混合静态和动态的RNNLM并通过较大的学习率(0.3),其最好的PPL为112。

表1 WSJ DEV数据集上随数据规模的增大,模型性能变强

Paper Reading-1-Recurrent neural network based language model

表2 在使用6.4M数据集(WSJ DEV)下,几种RNNLM模型与回退模型组合的结果

Paper Reading-1-Recurrent neural network based language model

 

表3 WSJ数据集下不同模型的对比实验结果,其中RNNLM仅仅采用6.4M数据进行训练

Paper Reading-1-Recurrent neural network based language model

NIST RT05实验

虽然上述实验表明,其相对于公平的baseline上有非常大的改进。然而,一个有效的怀疑是,在这些实验中使用的声学模型远不是最先进的,并且也许在这种情况下获得的改进比改进语调系统更容易。甚至更多的怀疑或者批判指出,仅仅使用37M或者70M的数据来训练基于回退模型的baseline说明不了问题,因为它远远低于所要完成的语音识别任务的可能性。

下面的给出一些基于NIST RT05数据集的实验结果。实验通过AMI系统进行。其中4-Gram通过多种数据来源进行训练,整个语言模型的训练数据超过1.3G。如表4所示,RT09则是对RT05的扩展,添加了CHIL和Web数据,此外,我们还降低了门槛。例如将4-Gram的门槛从4变为3。为了训练RNNLM,我们选择了会议抄本和交换机语料方面的数据,共5.4M。这主要是因为RNN的训练用更多的数据会太耗费时间。这意味着RNN的训练可以通过采用较小的数据子集来构建RT05和RT09语言模型。

表4 更对的回退模型对比和RNN模型对比,其中RNNLM仅仅在给定领域的数据下进行训练(5.4M)

Paper Reading-1-Recurrent neural network based language model