之前我们已经了解过n-gram语言模型和前馈神经网络语言(NNLM),今天我们简单地看一下循环神经网络语言模型。那么首先看一下为什么要把RNN用到语言模型中呢?
首先循环神经网络语言模型(RNNLM)是想要解决前馈神经网络模型窗口固定的问题。其次,前馈神经网络模型假设每个输入都是独立的,但是这个假设并不合理。循环神经网络的结构能利用文字的这种上下文序列关系,更好地对语句之间的关系进行建模。在某种程度上也能很好地进行上下文的联系,但由于RNN可能有的长距离梯度消失问题,这个上下文的记忆能力也是有限的。在这里只是简单介绍RNNLM,不做过多研究。
RNNLM简单介绍
这个过程基本与之前介绍的RNN类似,贴两张网图,分别展示了RNNLM的结构图和训练过程:
其实可以看出还是由之前我们所了解的RNN演变而来,可以看之前的笔记回顾。RNNLM简化图如下:
思想还是循环应用同一个参数矩阵 W进行训练,也可以有很多变体,比如LSTM、GRU。
在B站上随便点开一个关于RNNLM的视频,我觉得还是很便于理解的,贴图如下:
上图结合传统的语言模型来看更加清晰,也是为了不断地求几个条件概率的乘积。有兴趣的可以去看原视频:循环神经网络语言模型RNN language model。
RNNLM优缺点
优点:
- 可以处理任意长度的输入
- 理论上可以追溯前面时间步的信息
- 模型参数大小固定,与输入长度无关
缺点:
- 计算时间长
- 实际应用中,难以追溯很久远的时间步的信息
语言模型评价指标——困惑度/迷惑度 (Perplexity)
困惑度用来度量一个概率分布或概率模型预测样本的好坏程度,其基本思想是给测试集的句子赋予较高概率值的语言模型较好,当语言模型训练完之后,测试集中的句子都是正常的句子,那么训练好的模型就是在测试集上的概率越高越好。迷惑度越小,句子概率越大,语言模型越好。计算公式如下:
通常在工程中一个好的模型应该将困惑度控制在100以内,最好应该在30左右。