一、语言模型简介
语言模型用于对特定序列的一系列词汇的出现概率进行计算。一个长度为m的词汇序列{
其中
上面的P(S)即为语言模型。
1.1 语言模型的应用
①机器翻译:P(high winds tonite) > P(large winds tonite);
②拼写纠错:P(about fifteen minutes from) > P(about fifteen minuets from);
③语音识别:P(I saw a van) >> P(eyes awe of an);
自动文摘、问答系统、etc.!etc.!
二、Markov Assumption与N-gram
假设我们基于上述模型进行计算,那么将会出现指数幂种可能句子,也无法有足够的数据老训练模型,这个时候马尔科夫假设(Markov Assumption)就闪亮登场了,其假设当前出现的单词仅仅与前一个或k个单词有关,即:
Or
理论上k取得越大那么模型的效果就会越好,但是如果取得过大又会出现原来的问题,在实际应用中,k的值一般取2或者3,即分别为2-gram(Bigram model)和3-gram(Trigram model)。
最终每个单词到来的概率计算公式为:
相应的语言模型变为:
三、建立语言模型
一般地,通过最大似然估计(Maximum Likelihood Estimate)来建立语言模型,即:
假设存在训练语料为:
< s> I am Sam < /s>
< s> Sam I am < /s>
< s> I do not like green eggs and ham < /s>
那么通过计算可得:
如果存在一个更大的语料,通过同样的计算方法得到如下信息:
最终句子< s> I want english food < /s>的概率为:
P(< s> I want english food < /s>)
= P(I|< s>)× P(want|I)× P(english|want) × P(food|english) × P(< /s>|food)
=0 .000031
我们可以发现计算得到的数值通常很小,避免数据溢出、提高性能,通常会使用取log后使用加法运算替代乘法运算,即为:
四、平滑技术
数据平滑是对频率为0的n元对进行估计,典型的平滑算法有加法平滑、Good-Turing平滑、Katz平滑、插值平滑,etc.
4.1 Add-one(Laplace) Smoothing
加一平滑法,又称拉普拉斯定律,其保证每个n-gram在训练语料中至少出现1次,以bigram为例子,计算方法如下:
4.2 Good-Turing Smoothing
该方法首先我们假设在统计元组的过程中,发生c次N元组类别的数目为
一个例子:
训练集合:T={< s>what is it what is small?}|T|=8;
验证集合:V={what is it small ? < s> flying birds are a bird.}, |V|=12;
在训练集合上,我们得到:p(< s>)=p(it)=p(small)=p(?)=0.125, p(what)=p(is)=0.25,其他为0;
如果不经过平滑处理,则验证集上两句子的概率分别为:p(what is it?)=(0.25^2)(0.125^2)≈0.001 p(it is flying.)=0.125*0.25(0*2)=0;
现在用古德-图灵算法进行平滑处理,如下:
首先计算,各发生c次N元组类别的数目,依次为N(0)=6,N(1)=4,N(2)=2,N(i)=0 ,i>2:
其次,重新估计各概率值。
①对于发生0次的事件概率:Pr(.)=p(flying)=p(birds)=p(are)=p(bird)=p(a)=(0+1)*N(0+1)/(8*N(0))=1*4/(8*6)≈0.083
②对于发生1次的时间概率:Pr(it)=p(< s>)=p(small)=p(?)=(1+1)*N(1+1)/(8*N(1))=2*2/(8*4)=0.125
③对于发生两次的时间概率:Pr(what)=Pr(is)=(2+1)*N(2+1)/(8*N(2))=3*0/(8*2)=0: 保持原值0.25
归一化处理,6*P0+4*P1+2*P2=1.5。
所以,归一化处理后:
p(it)=p(< s>)=p(small)=p(?)= 0.125/1.5 ≈0.08,
p(what)=p(is)= 0.25/1.5 ≈0.17
p(.)=p(birds)=p(are)=p(bird)=p(a) = 0.083/1.5 ≈0.06
最终计算得到:
p(what is it?)=(0175^2)*(0.08^2)≈0.0002;
p(it is flying.) ≈ 0.08*0.17*(0.06^2)≈0.00004。
4.3 Interpolation Smoothing
前面两种平滑技术,对于未出现的n-gramd都进行了一样的处理,其中肯定存在不合理之处,对于线性插值平滑技术,其基本思想是将高阶模型和低阶模型作线性组合,利用低元n-gram模型对高元n-gram模型进行线性插值。因为在没有足够的数据对高元n-gram模型进行概率估计时,低元n-gram模型通常可以提供有用的信息。
对于三种数据:Training data、Held-out data和Test data;
然后,根据Training data构造初始的语言模型,并确定初始的λs(如均为1);
最后,基于EM算法迭代地优化λs,使得Held-out data概率(如下式)最大化。
4.4 Stupid Backoff
五、评价方法
语言模型的评价方法在理论上可以使用困惑度/混乱度(preplexity),其基本思想是给测试集赋予较高概率值的语言模型较好,计算公式如下:
观察上述公式可得困惑度越小,句子概率越大,则说明训练得到的语言模型越好。以上即为传统中的传统的语言模型做法。