神经网络语言建模系列之六:字符级模型

51字数 3033阅读 1382


语言建模一直均以分词为最小单位,即词级语言模型。后来研究者尝试在字符级别进行语言建模,提出了数种字符级的语言模型,其中最为成功是Y. Kim and et. al. (2015)提出的模型。字符级语言模型的优势在于能够解决未登录词的问题,并且能够将词语的形态信息引入语言模型,从而提升模型的性能。


1. 前言

       最初,语言建模的研究主要集中在词级别的语言模型,而后研究者发现词级别的语言模型存在诸多缺点。在词级别的语言建模中,词典通常较大,一般在几万至几十万,导致语言模型的输出层计算量巨大;尽管字典如此巨大,但不管如何扩展字典,词级别的语言模型在应用中还是会遇到未登录词(Words Out of Vocabulary)的问题,一方面由于单词的数量本就巨大,又存在不同的变种,还有不断出现的新词,而未登录词是导致语言模型性能下降到重要因素之一;词级别的语言建模还忽略了词本身所包含的形态信息,比如在英文中的前后缀、词根等信息。针对词级别语言模型存在的诸多问题,研究者开始探索字符级的语言模型,并提出了多种字符级语言模型的方案,部分方案的结果并不理想,但也有些方案取得

2. 字符级模型

       字符级语言模型的研究也曾是深度学习语言建模的研究热点之一,也产生了许多研究成果,提出许多字符级的语言模型方案,本文着重分析其中的两种,然后简要地介绍其他的模型方案。

2.1 纯粹字符级模型

       建立字符级语言模型的直接想法就是将文本作为字符序列来处理,即将词级别的语言模型中的词替换为字符,而模型的输入序列由词序列换为字符序列,这也是字符级模型研究的最初构思,其模型结构如图1所示。

图1 字符级语言模型

       研究结果显示,直接采用上述方案进行字符级语言模型的构建并不成功,训练异常的困难。I. Sutskever, J. Martens, G. Hinton (2011)首先尝试通过神经网络实现字符级的语言模型,采用的是改进的循环神经网络(Recurrent Neural Network, RNN),并且提出了新训练策略,即Hessian-Free (HF)优化方法,该研究的主要目的也是验证该优化方法 。至于字符级语言模型的效果并不理想,字符级语言模型生成的文本虽然看起来似乎遵循一定的语法,但并不是很有说服力。A. Graves (2013)则是探索了循环神经网络在序列生成中的应用,其中包括利用字符级语言模型生成文本。A. Graves (2013)的研究结果指出字符级语言模型的训练比较困难,并且其性能也无法达到词级别模型的水平。A. Graves (2013)利用宾州树库(Penn Tree Bank, PTB)对比了词级别的语言模型与字符级语言模型的性能,并引入 K. Jim, C. Giles, and B. Horne (1996)提出的权重噪声的泛化方法,实验结果如下表所示:

序号 模型 正则方法 PPL
01 Word-Model - 138
02 Word-Model 权重噪声 126
03 Char-Model - 167
04 Char-Model 权重噪声 140

       理论上,由于字符向量无论在数量上还是大小上都远小于词向量,输出层也存在相同的情况。如果两类模型的隐层采用相同的尺寸,那么字符级模型的容量将远小于词级别的模型。使得两者达到相同的容量,那么字符级模型的隐层应该远大于词级别模型。在A. Graves (2013)的实验中,两类模型采用了相同大小的隐层,此甚至似乎不太合理。但是由于隐层尺寸较大,并且训练数据量较小,该因素的影响可能并不太大。

       另外,相对于词序列,当将文本作为字符序列处理的时候,序列的长度将显著的增加,一方面,时序上的计算次数将极大地增加;另一方面,对于十分长的序列,目前已有的神经网络并无法学习长的序列依赖关系,即使采用改进的循环神经网络,如长短期记忆(Long Short Term Memory, LSTM)循环神经网络或者门限单元(Gated Recurrent Unit, GRU)循环神经网络。

2.2 字符级输入模型 (Character-aware)

       针对纯粹的字符级语言模型的研究结果并不理想,研究者就改变了思路,放弃了字符级语言模型的部分优点,选择了折中的方案。Y. Kim and et. al. (2015)提出了Character-aware的字符级语言模型,即只在模型的输入端采用字符级输入,而输出输出端仍然沿用词级模型,整个模型的结构如图2所示。

图2 字符级输入语言模型

       在Y. Kim and et. al. (2015)提出模型中,输入端将每个词当作字符序列进行处理,而后采用卷积网络 (Convolutional Neural Network, CNN) 在字符序列上进行一维卷积,从而得到分词的词向量。值得一提的是在每个分词的字符序列前后都需要添加标志字符序列开始和结束的字符,如分词language转化为字符序列为{,l,a,n,g,u,a,g,e,},其中{分别}表示分词的字符序列的开始和结束,如果去除这样的起始和结束标识,模型的性能将会有大幅的下降,甚至无法训练出有用的语言模型。获取了词向量之后的模型与词级别的模型基本相同,只是因为卷积层的引入(有时卷积层可能有多层),模型的层次变深,会导致模型的训练变得困难。于是,便引入了高速网络层,来改善网络的训练。高速网络由R. Srivastava, K. Greff and J. Schmidhuber提出用于训练深层网络,主要是通过引入了门机制,使得信息在网络层之间传输更为通畅。

       Character-aware语言模型的PPL指标相对于词级别的语言模型有了显著的改善,也是最成功的字符级语言模型。Y. Kim and et. al. (2015)在宾州树库(Penn Tree Bank, PTB)对模型进行了测试,实验结果如下表所示:

序号 模型 PPL 模型大小
01 LSTM-Word-Small 97.6 5M
02 LSTM-CharCNN-Small 92.3 5M
03 LSTM-Word-Large 85.4 20M
04 LSTM-CharCNN-Large 78.9 19M

从实验结果上不难看出,相对词级别的语言模型,Character-aware语言模型的PPL指标有了显著的改善,尤其是当模型的规模较大时,Character-aware语言模型的参数也有所减少。Character-aware语言模型的PPL之所以能够有所改善,一方面解决了未登录词的问题,另一方面将词的形态信息也引入了模型,是的模型学习到更多的模式。因此,Character-aware语言模型实现了研究者对字符级语言模型的两点期待,但是对于第三点期待,Character-aware语言模型不仅没有实现,还使得语言模型的计算有所增加。相对于词向量,字符向量不仅数量更少,尺寸也小的多,一般为15(词向量的尺寸在100~500)。而模型的参数的数量是相当的,就意味着很多部分参数转移到了卷积网络层和高速网络层,而这两部分是每次训练或者预测都需要参与计算的。但由于卷积网络的高并行的特性,其计算时间并没有过多的增加。Character-aware语言模型之所没有完全取代词级别的语言模型,主要在于其模型比较复杂,而且计算时间有所增加,尤其在预测阶段。

2.3 其他字符级模型

       相对前面讨论的两种字符级的语言模型,其他类型的字符级语言模型似乎并没有太多值得讨论的价值,此处将对其进行简要的介绍。R. Jozefowicz and et. al. (2016)对神经网络语言模型的局限性进行了研究,但是其研究的深度并不令人满意,此处不做深入的讨论,仅仅介绍一下研究中提出的两类字符级语言模型,如图3所示。

图3 其他类型的字符级语言模型

       图3中左边所示的模型基本结构与Y. Kim and et. al. (2015)所设计的字符级语言模型类似,只是将输出层的权重矩阵替换为卷积网络输出的对应特征向量,称为CNN Softmax。右侧的模型则是对Y. Kim and et. al. (2015)的模型的输出层进行了修改,将原先的输出层替换为字符级的预测模型,即将原有隐层的输出,作为字符预测模型的输入,依次预测目标词的每个字符。在百万级词语料库(One Billion Word Bench, OBWB)的实验结果如下表所示:

序号 模型 PPL
01 LSTM-Word 30.6
02 LSTM-CharCNN 30.0
03 LSTM-CharCNN + CNN softmax 39.8
04 LSTM-CharCNN + Char-prediction 47.9

这两类字符级语言模型不仅结构更为复杂,其PPL指标也远不如词级别的语言模型以及Y. Kim and et. al. (2015)提出的字符级语言模型。

3. 总结

       理想的字符级语言模型,即模型的输入与输出均为字符级,能够解决词级别语言模型的三大问题,分别是巨大的计算量、未登录词以及词形态的模式,但是由于诸多限制并不能完全实现,主要是目前的神经网络在长依赖的学习上还有许多不足。目前,效果比较好并且最受关注的字符级语言模型就是Y. Kim and et. al. (2015)所提出的模型,如图2所示,然而由于计算量以及模型复杂度的问题,并没有完全取代词级别的语言模型,往往是其其他应用中,将字符级别的特征与词向量合并,作为模型的输入以提高模型在该任务中的性能。

       以上针对字符级语言模型的讨论还是主要针对英文、德语、西班牙等字母为主的语言,而对于中文、韩文、日文等方块字为主的语言,字符级语言模型的研究比较少。直观上来看,输入和输出层均为字符的字符级语言模型似乎更适合这类语言,并且字符的数量远小于词的数量,并且能够有效地解决未登录词问题。但是词边界在语言模型中是非常重要的特征,能够帮助语言模型更好地学习到目标语言的模式。从Y. Kim and et. al. (2015)处理词的字符序列时,在字符序列两端添加起始与终止标识符就可以看出。

推荐阅读更多精彩内容