神经网络语言模型(Neural Network Language Model)
模型介绍
2003年,Bengio首次提出Neural Network Language Model(NNLM), 开创了神经网络运用在语言模型的先河,论文 《A Neural Probabilistic Language Model》
上一章提到传统的统计语言模型的缺点,在高维的情况下,由于N元组的稀疏问题,传统的语言模型需要花大量时间解决平滑,插值等问题;N受限于算力,不大的时候文本的长距离依赖关系无法进行建模;同时N元组共现未必相似等问题。
针对这些传统语言模型的问题,NNLM尝试用三层神经网络进行建模

如图所示,整个模型有三层
第一层是输入层:模型的输入wt−n+1⋯wt−2,wt−1表示n-1个词,目标是预测当前t时刻的wt,模型引入词向量(Word Vector)的概念,将输入的词通过look-up table映射成为一个n-1个向量,这里我们假设词典大小∣V∣, 向量的维度为d, look-up table C的为V⋅d的矩阵,将N-1个向量concat起来,输入层维度为(n−1)⋅d的向量,这里记为x
第二层是隐藏层,通过一个fully connect layer传递,神经元的**函数是tanh,参数Wh为(n−1)⋅d∗h的矩阵,输出为tanh(Wh⋅x+bh),维度大小为h
第三层是输出层,依赖隐藏层的输出和输入层的输出之和U⋅tanh(Wh⋅x+bh)+Wo⋅x+bo, 其中Wo为V∗d⋅(n−1)的矩阵, U为V∗h的矩阵,这里输出的向量维度为V,再通过softmax函数,每个神经元的节点即为t时刻出现第i个词的概率P(wti∣wt−n+1⋯wt−2,wt−1)
模型的参数 θ=(U,Wh,bh,W0,bo), 参数总数为∣V∣(1+nd+h)+h(1+(n−1)d), 其中d为look-up表C的维度, h为隐藏层维度, V为词表大小,n-1为输入层的输入的词的个数
模型的目标是最大化
L=T1t∑logf(wt,wt−1,⋯,wt−n+1;θ)+R(θ)(1)
其中f(wt,wt−1,⋯,wt−n+1;θ)为概率P(wt∣wt−n+1⋯wt−2,wt−1), R(θ)为正则项,其中P(wt∣wt−n+1⋯wt−2,wt−1)=∑iVeyieywt, 即softmax后的概率,通过反向传播公式优化算法即可得到模型参数θ
优点
- 相比传统的统计语言模型,Ngram的N增加只带来线性提升,而非指数复杂的提升
- 通过词向量解决统计语言模型中解决稀疏(sparse)的问题,不用进行平滑等操作
- 另外词向量的引入解决统计语言模型部分相似性的问题,为后续NLP词向量时代的发展做铺垫
- 相比传统的统计语言模型,神经网络的非线性能力获得更好的泛化能力,perplexity(困惑度提升)
困惑度
困惑度(perplexity)的基本思想是:给测试集的句子赋予较高概率值的语言模型较好,当语言模型训练完之后,测试集中的句子都是正常的句子,那么训练好的模型就是在测试集上的概率越高越好,公式如下:
PP(W)=P(w1w2⋯wN)−N1=NP(w1w2⋯wN)1(2)
由公式可知,句子概率越大,语言模型越好,迷惑度越小。
缺点
参数较多,部分计算复杂,在word2vec等后续模型中陆续优化