本文结合cs224n:Natural Language Processing with Deep Learning的Lecture 8、Lecture 9内容,从语言模型(Language Model)讲到N-Gram LM(N-Gram Language Model)再到RNN-LM(RNN-Language Model)。
Language Model
关于语言模型有两种说法,一种认为语言模型是计算某个句子概率的模型(A language model computes a probability for a sequence of words:
,概率计算一般基于马尔科夫假设。
在cs224课程中,语言模型被认为是用来预测下一个单词。
就笔者看来,这两种说法也具有统一性,因为:
日常生活中,我们在如输入法和搜索引擎中,都用到了语言模型。语言模型也作为自然语言理解的基础任务。
N-Gram Language Model
N-gram存在的问题
1. Sparsity Problem(稀疏性问题)——可通过数据平滑技术如线性插值、Discounting Methods或者back-off方法解决:
2. Gigantic RAM requirement(参数空间过大),随着n的增大,存储空间需求也变大。
RNN Language Model
利用RNN对序列建模,复用不同时刻的线性非线性单元和权值。理论上之前所有的单词都会影响到当前的值。
所需内存只与序列长度有关。
x(t) is the word vector at the t time step. h(0) is some initialization vector at time step 0. The size of the output y(t) is |V|,which is the length of the vocabulary(整个词表|V|上的概率分布)。
RNN语言模型的损失函数
平均所有时刻上的损失,每个时刻的损失通过交叉熵损失函数定义。
Perplexity
使用交叉熵损失函数定义困惑度,越小越好。
RNN-LM的优缺点如下,其中RNN难以获取很多时间步之前的信息源自于RNN中的梯度弥散(gradient vanishing),将会在下一篇博客中介绍。
Smoothing
Linear interpolation
这里线性插值(Linear interpolation)通过trigram model介绍,trigram、bigram和unigram的最大似然估计如下:
对上述符号进行介绍,
表示在训练语料库中单词w出现的次数,
表示训练语料库中单词出现的所有次数。
其中trigram、bigram和unigram都有不同的优缺点,unigram不会遇到分子或者分母为零的情况,但是unigram估计完全忽略了上下文信息,因而抛弃了有用的信息,而trigram则会遇到分子或者分母为0的情况,bigram在这两种极端情况之间。
线性插值则是利用这三种估计,通过定义trigram:
其中
、
、
是三个参数,且满足:
,
,
因此是对这三种估计的加权平均。