神经网络语言建模系列之五:层级输出


除了基于采样的神经网络语言模型的加速方法,另一个重要的加速神经网络语言模型的研究方向是层级输出(Hierarchical Outputs)。与基于采样的方法不同,层级输出方法是对神经网络语言模型的输出层进行分层,即对词典中的词进行分类,从而减少神经网络语言模型的计算量。层次输出不仅能够加速神经网络语言模型的训练,在预测阶段仍然有效,并且加速效果显著,但通常以增加模型的PPL为代价。


1. 前言

       神经网络语言模型的加速是神经网络语言建模(Language Modeling, LM)研究中的热点,除了前面提到的基于采样的方法外,如重要性采样(Important Sampling, IS)和噪声对比评估(Noise-Contrastive Estimation, NCE),另一个重要的神经网络语言模型加速方法是基于词类的方法,将词典中的词划分为多个类别,从而将神经网络语言模型输出的条件概率分解成多个条件概率的乘积,减少每次训练或者预测时涉及的单词数量,进而减少了神经网络语言模型的计算量。F. Morin and Y. Bengio (2005)首先提出利用层级Softmax (Hierarchical Softmax)对神经网络语言模型进行加速。而后T. Mikolov and et. al. (2011)将N-gram语言模型中的词类(Word Class)思想引入到神经网络语言模型中,减少神经网络语言模型的计算量。H. S. Le and et. al. (2011),W. Chen, D. Grangier and M. Auli (2015)等提出结构化输出(Structured Ouputs),或者称为差异Softmax (Differentiated Softmax),对输出层进行更加精细的分层,以减少神经网络语言模型的计算量。

2. 基本原理

       虽然这类研究所提出的概念不同,但其背后的基本思想都是类似的,都是延续了J. Goodman (2001)提出的基于词类的加速思想。基于词类的加速方法最初被用于加速最大熵语言模型,但是可以直接应用到其他类型的语言模型中,包括N-gram语言模型以及神经网络语言模型。

       通常语言模型的评估的是给定上文的条件下,单词为下一个单词的概率。基于词类的加速方法的基本思想是将词典中的单词划分为多个类别,即词类,而后条件概率就转换为两个条件概率的乘积:给定上文的条件下,下一个单词属于类别的条件概率,以及给定上文及词类的条件下,下一个单词为的条件概率,即

       正如前面文章提到的,神经网络语言模型的计算量主要来源于输出层。由于需要计算正则项,所有的输出都必须计算,一般在几万到几百万,从而导致较大的计算量。引入词类后,只需要计算词类的对应的输出以及该词类下单词对应的输出,可以极大地减少计算量。比如词典的大小为10000,将单词划分为100类别,则每个类别的单词数为100。由于正则项计算的需要,正常语言模型需要计算全部输出,即10000个输出。如果采用词类的话,那么只需要计算100个类别对应的输出以及该类别下100个单词对应的输出,共计算200输出,理论上可提速50倍。

       基于词类的方法可以有效地提升神经网络语言模型的计算速度,并且在训练和预测阶段都有效果。围绕基于词类的加速方法的研究,主要集中在两个方面。一方面是如何使加速效果最大化,另一方面是使得引入词类后。模型的PPL上升地更少。采用词类后,相当于在模型中引入了一个刚性的约束,导致模型的PPL上升。如何划分合理的词类,是件困难的事。虽然很多研究提出了多种词类的划分方法,在一定程度上改善了模型的性能,但终究不能使得模型达到引入词类前的PPL水平。究其原因,神经网络语言模型所学习到的词之间相似性是复杂的,多维度的,很难通过人为设计出相同的相似性。

3. 层级Softmax

       神经网络语言模型加速方面的最早研究是重要性采样方法,其次便是层级Softmax。J. Goodman (2001)曾指出词类的划分可以不局限于单层的词类,可以对词类进一步划分。F. Morin and Y. Bengio (2005)根据这个想法,提出了层级Softmax (Hierarchical Softmax),对词典中的单词进行多层分类,从而最后形成了平衡二叉树。词典中的每个词被表示为位向量,其中的值取决于词典的大小,向量的每个元素非0即1。表示词属于根类别的1类分类,而表示该词属于根类别下的子分类中的0类分类。那么,下一个词条件概率变换为:

       采用层级Softmax进行加速的具体实现并不复杂,其难点在于二叉树的构建。F. Morin and Y. Bengio (2005)利用WordNet中同义词信息,采用K-means算法完成了平衡二叉树的构建。F. Morin and Y. Bengio (2005)的实验结果如下:

模型 验证集PPL 测试集PPL 加速
原始模型 213.2 195.3 1
重要性采样 209.4 192.6 68.7
层级Softmax 241.6 220.7 258

       实验中,词典的大小为10000,理论上的加速效果为,但实际上的加速效果远没有理论上那么大。实验显示在训练过程中的加速效果为258倍,而预测过程中的加速效果为200左右。即使没有达到理论上的加速效果,层级Softmax的加速效果也远高于基于采样的加速方法。

       虽然F. Morin and Y. Bengio (2005)提出的方案能够极大地减少神经网络语言模型的计算量,但是该方案并不能直接应用于其他语言,因为并不是所有语言都能获取类似WordNet的资源。针对上述情况,A. Mnih, G. Hinton (2009)提出了于语言知识无关的构建词类二叉树的方法,该方法主要通过词向量来实现的。由于那时词袋模型(Bag of Words, BOW)、Skip-Gram模型等用于快速训练词向量的模型还没被提出,所以论文首先采用随机的方法生成词类二叉树,然后训练对数双线性模型(Log-bilinear Model, LBLM),从而获取能够体现单词间相似性的词向量,现在完全可以采用词袋模型或者Skip-Gram模型来训练词向量。获取词向量之后,便可利用词向量可以表示单词间相似性的特点,构建词类二叉树,具体构建逻辑可以参考F. Morin and Y. Bengio (2005)的研究。T. Mikolov and et. al. (2013)则提出采用霍夫曼二叉树来表示词类,并且频率高的词被分配更短的路径,进一步减少模型的训练时间。

4. 单层词类

       层次Softmax是对词类方法的扩展,而T. Mikolov and et. al. (2011)则直接将词类方法引入到了神经网络语言建模中,并对比了两种词类划分的方案。两种词类的划分方案的依据都是词频,采用类似轮盘赌的方式。首先将词典中的单词按照词频降序排列,然后计算所有词的总词频,如下:

其中, 是词典的大小,是词典中每个词的词频。如果第个词的累积词频满足如下条件,则就别分配至第个词类中:

其中,为需要分配的总的词类数量。相对于平均分配词类,该方案使得词频高的词所在的词类包含较少的单词,能够减少训练时的计算量。

       另一种词类的分配方案是对上述方案的改进,用词频的平方根代替词频。首先计算所有词的词频平方根的总和,如下:

而词类分配的规则,更改如下:

如此,使得不同词类包含的单词数量差异更大,词频较大的单词所组成的词类更小,进一步减少了神经网络语言模型的训练时间。T. Mikolov and et. al. (2011)给出了在宾州树库上对第二种方案的测试结果,所用的词典大小为10000,测试结果如下表所示:

模型 词类数量 每次迭代时间/min PPL
RNN - 154 123
RNN 30 12.8 134
RNN 50 9.8 136
RNN 100 9.1 136
RNN 200 9.5 136
RNN 400 10.9 134
RNN 1000 16.1 131

不难看出,直接基于词类的加速方法虽然没有层级Softmax的加速效果,但是实现比较简单,词典大小在10000时,速度能够提升大约17倍。与层级Softmax类似,引入词类后,模型的PPL明显变高了。

5. 结构化输出

       结构化输出最初由H. S. Le and et. al. (2011)提出用于提升神经网络语言模型在语音识别中的性能,即加速语言模型的计算速度的同时又不至于使语音识别的准确率下降。其基本思路就是将高频的词归入单独的词类,称为Short List,其余的的词采用A. Mnih, G. Hinton (2009)提出的方法,利用词向量构建二叉树。相对于只采用Short List的语音识别方案,该方法既提高了语音识别的精度,同时模型计算时间也没有增加太多。单单对语言模型而言,这个方法是在层级Softmax的基础上对速度和PPL上的折中方案。随后,Chen, D. Grangier and M. Auli (2015)提出了差异Softmax,不仅对词典中的词进行分类,同时在输出层针对不同的类别,设定了不同大小的权重矩阵。词频越高则权重矩阵的越大,相反则越小。增加模型少许PPL的同时,进一步提升模型的计算速度。这两种策略完全可以结合在一起,具体如下图所示:

图1 结构化输出

6. 总结

       本文所汇总的神经网络语言模型的加速方法,均是基于词类的加速方法,或者该方法的扩展。这类方法的特点是加速效果很显著,明显高于基于采样的加速方法,但是会导致语言模型的PPL上升。

作者:施孙甲由 (原创)

你可能感兴趣的:(神经网络语言建模系列之五:层级输出)