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


除了基于采样的神经网络语言模型的加速方法,另一个重要的加速神经网络语言模型的研究方向是层级输出(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语言模型以及神经网络语言模型。

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

P(w_t|w_{0}^{t-1}) = P(C(w_t)|w_{0}^{t-1}){\cdot}P(w_t|C(w_t), w_{0}^{t-1})

       正如前面文章提到的,神经网络语言模型的计算量主要来源于输出层。由于需要计算正则项,所有的输出都必须计算,一般在几万到几百万,从而导致较大的计算量。引入词类后,只需要计算词类的对应的输出以及该词类下单词对应的输出,可以极大地减少计算量。比如词典的大小为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),对词典中的单词进行多层分类,从而最后形成了平衡二叉树。词典中的每个词w_i被表示为位向量[b_0(w_i), b_1(w_i), \cdots, b_m(w_i)],其中m的值取决于词典的大小,向量的每个元素非0即1。b_0(w_i)=1表示词w_i属于根类别的1类分类,而b_1(w_i)=0表示该词w_i属于根类别下的子分类中的0类分类。那么,下一个词w_t条件概率变换为:

P(w_t|w_{0}^{t-1}) = \Pi_{j=0}^{m}P(b_j(w_t)|b_{0}(w_t), \cdots, b_{j-1}(w_t), w_{0}^{t-1})

       采用层级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,理论上的加速效果为|V|/\log_2{|V|}\approx{750},但实际上的加速效果远没有理论上那么大。实验显示在训练过程中的加速效果为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)则直接将词类方法引入到了神经网络语言建模中,并对比了两种词类划分的方案。两种词类的划分方案的依据都是词频,采用类似轮盘赌的方式。首先将词典中的单词按照词频降序排列,然后计算所有词的总词频,如下:

F = \sum_{i=1}^{|V|}f_i

其中, |V|是词典的大小,f_i (i=1,2,\dots, |V|)是词典中每个词的词频。如果第t个词的累积词频满足如下条件,则就别分配至第i个词类中:

\frac{i}{N}<\sum_{j=1}^{t}\frac{f_j}{F}\leq\frac{i+1}{N}

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

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

dF = \sum_{i=1}^{|V|}\sqrt{\frac{f_i}{F}}

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

\frac{i}{n}<\sum_{j=1}^{t}\frac{\sqrt{f_j/F}}{dF}\leq\frac{i+1}{n}

如此,使得不同词类包含的单词数量差异更大,词频较大的单词所组成的词类更小,进一步减少了神经网络语言模型的训练时间。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上升。

作者:施孙甲由 (原创)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容