n-gram 语言模型的平滑技术

1. 统计语言模型

首先一个句子的概率 P(S):
n-gram
但是存在两个问题:

  • 参数空间过大
  • 数据稀疏严重,词同时出现的情况可能没有,组合阶数高时尤其明显。
2. n-gram模型

为了解决第一个问题引入马尔科夫假设(Markov Assumption):一个词的出现仅与它之前的若干个词有关:
n-gram
n-gram

然后利用极大似然估计(Maximum Likelihood Estimation,MLE)计算每一项的频数,例如:
count

3. 数据平滑处理

n-gram最大的问题就是稀疏问题(Sparsity):很多词语组合在语料库中都没有出现,根据极大似然估计得到的组合概率将会是0,从而整个句子的概率就会为0。最后的结果是,我们的模型只能计算零星的几个句子的概率,而大部分的句子算得的概率是0,这显然是不合理的。

因此,我们要进行数据平滑(data Smoothing),数据平滑的目的有两个:

  • 使所有的N-gram概率之和为1
  • 使所有的n-gram概率都不为0。

数据平滑的本质是重新分配整个概率空间,使已经出现过的n-gram的概率降低,补充给未曾出现过的n-gram

主要有如下平滑处理方法:

3.1 拉普拉斯平滑(Laplace Smoothing)

Add-one
拉普拉斯平滑-Add-one,即强制让所有的n-gram至少出现一次,只需要在分子和分母上分别做加法即可(分母上的V是n-gram句子概率的乘积项的个数,相当于加了1的总个数)。这个方法的弊端是,大部分n-gram都是没有出现过的,很容易为他们分配过多的概率空间。
Laplace
Add-K
在Add-one的基础上做了一点小改动,原本是加一,现在加上一个小于1的常数KKK。但是缺点是这个常数仍然需要人工确定,对于不同的语料库KKK可能不同。
laplace

3.2 古德图灵(Good-Turing)估计法

基本思想是:用观察计数较高的N元语法数重新估计概率量的大小,并把它指派给那些具有零计数或者较低计数的N元语法。
c ∗ = ( c + 1 ) N c + 1 N c c^*=(c+1) \frac{N_{c+1}}{N_c} c=(c+1)NcNc+1

c*是Good-Turing平滑计数c是某个N元语法出现的频数Nc是出现次数为c的N-gram词组的个数,是频数的频数,如下所示:
N c = ∑ b : c ( b ) = c 1 N_c=\sum\limits_{b:c(b)=c} 1 Nc=b:c(b)=c1

如何使用古德图灵估计法,举个例子

数据如下所示:

训练集合: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(?) = 1/8=0.125, 
p(what) = p(is) = 2/8=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

现在用古德-图灵算法进行平滑处理,如下:
(1). 计算Nc,依次为

N(0)=6, N(1)=4, N(2)=2, N(i)=0 ,i>2。
也就是说:
首先测试集中的词有(<flying,birds,are,a,bird,.>)这6个不在训练集中的,所以N(0)=6。
测试集中的词有(<s>,it,small,<?>)这4个在训练集出现过1次,所以N(1)=4
测试集中的词有(what,is)这2个在训练集出现过2次,所以N(2)=2
测试集中的词有0个在训练集中出现次数大于2,所以N(i>2)=0。

(2). 重新估计各平滑后的值c*。
对于发生0次的事件:

c*(.)=c*(flying)=c*(birds)=c*(are)=c*(bird)=c*(a)=(0+1)*N(0+1)/N(0)=1*4/6≈0.667                
对于发生1次的事件:
c*(it)=c*(s)=c*(small)=c*(?)=(1+1)*N(1+1)/N(1)=2*2/4=1     
对于发生2次的事件:
c*(what)=c*(is)=(2+1)*N(2+1)/N(2)=3*0/2=0,保持原值c*(what)=c*(is)=N(2)=2

(3). 归一化的概率:

p`(it)=p`(s)=p`(small)=p`(?)=1/12 ≈0.083       
p`(what)=p`(is)= 2/12 ≈0.167      
p`(.)=p`(flying)=p`(birds)=p`(are)=p`(bird)=p`(a) = 0.667/12≈0.056

因此

p`(what is it?) = 0.167 * 0.167 * 0.083 * 0.083 ≈ 0.00001921
p`(it is flying.) = 0.083 * 0.167 * 0.056 * 0.056 ≈ 0.0000434681

古德图灵法属于减值法,还有其他几种减值法:Katz后退法、绝对减值法、线性减值法。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值