近些年随着深度神经网络(Deep Neural Network, DNN)的兴起,学者们开始尝试使用循环神经网络(Recurrent Neural Networks,RNNs)处理自然语言生成任务。在传统的神经网络模型中,是从输入层到隐含层再到输出层,层与层之间是全连接的,假设所有的输入是相互独立的,所以每层之间的节点是无连接的,但这对于许多NLP任务来说并不是一个好的假设,例如,预测句子的下一个单词是什么,一般需要用到前面的单词,因为一个句子中前后单词并不是独立的。RNNs可以对前面的信息进行记忆并应用于当前输出的计算中,这样隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出,RNNs已经被证明对NLP是非常成功的,如词向量表达、语句合法性检查、词性标注等。
文本生成本身是一个序列输出问题,RNN可以很好地刻画词汇与词汇之间的前后关联关系,本节介绍基本的RNN模型以及常见RNNs的拓展和改进模型。
2.2.1 Vanilla RNN
理论上,RNN能够对任何长度的序列数据进行处理。但是在实践中,它能记忆的长度是有限的,简单的RNN模型存在梯度消减以及梯度爆炸的问题,往往难以训练,这个问题的本质是由BP误差反向传播算法引起的,反向传播算法使用链式法则,在求导的链上梯度会连乘,当输入有轻微变化时,训练出的梯度有时会有剧烈变化,通常情况下大于 1 的数连乘会变大,极端时会引起梯度爆炸;小于1 的数连乘会变小,极端时会引起梯度消失。梯度消失也会令在循环神经网络中,后面时间步的信息会覆盖前面时间步的信息。
(责编:温静、赵光霞)