N-gram的平滑算法简介

1、N-gram存在的问题

N-gram作为统计语言模型的重要部分,是学习统计自然语言的重要基石,了解N-gram十分重要。N-gram会因为数据稀疏而导致效果变差,也就是某些n元组在训练样本中未出现,则其样本概率为0,这是一个很差的概率估计,会导致模型估计效果变差,可以通过数据平滑来解决数据稀疏问题。

2、平滑算法

2.1 加法平滑

2.1.1 Laplace平滑

通过给每个n元组都加1,实现将一小部分概率转移到未知事件上,公式如下:
P L a p ( w 1 , . . . , w n ) = C ( w 1 , . . . , w n ) + 1 N + B P_{Lap}(w_1,...,w_n)=\frac{C(w_1,...,w_n)+1}{N+B} PLap(w1,...,wn)=N+BC(w1,...,wn)+1
其中, N N N为总样本数, B B B n n n元组的总数。这样做其实是假设每个 n n n元组都存在相同的先验概率。但是对于一个大词表的稀疏数据集,Laplace平滑就会将太多的概率转移到了未知事件上。

2.1.2 Lidstone平滑

针对Laplace平滑存在的过估计问题,Lidstone不加1,而加一个通常较小的正值 λ \lambda λ
P L i d ( w 1 , . . . , w n ) = C ( w 1 , . . . , w n ) + λ N + B λ P_{Lid}(w_1,...,w_n)=\frac{C(w_1,...,w_n)+\lambda}{N+B\lambda} PLid(w1,...,wn)=N+BλC(w1,...,wn)+λ
它可以看作是在MLE估计和统一的先验概率之间的线性插值,这样可以解决太多的概率空间被转移到未知时间上的缺点。但是这种方法依然存在着两个缺点:1)需要预先猜测一个合适的 λ \lambda λ;2)使用Lidstone法则的折扣总是在MLE频率上给出一个线性的概率估计,但是这和低频情况下的经验分布不能很好地吻合。

2.2 Good-Turing估计

Good-Turing估计是很多平滑技术的核心,于1953年古德(I.J.Good)引用图灵(Turing)的方法而提出来的。其基本思想是:利用频率的类别信息来平滑频率。对于任何出现 r r r 次的 n n n元组,都假设它出现了 r ∗ r^* r​ 次。
r ∗ = ( r + 1 ) n r + 1 n r r^∗=(r+1)\frac{n_{r+1}}{n_r} r=(r+1)nrnr+1
其中, n r n_r nr是训练语料中正好出现 r r r次的 n n n元组的个数,也就是说,发生 r r r次的 n n n元组的调整由发生 r r r次的 n n n元组与发生 r + 1 r+1 r+1次的 n n n元组两个类别共同决定。假设m-gram的 w 1 m w_1^m w1m出现了 c ( w 1 m ) c(w_1^m) c(w1m)​​次,Good_Turing给出其出现的概率为:
P G T ( w 1 m ) = c ∗ ( w 1 m ) N P_{GT}(w_1^m)=\frac{c^*(w_1^m)}{N} PGT(w1m)=Nc(w1m)
那么对于 c = 0 c=0 c=0​(训练样本中未出现)的样本有:
p 0 = 1 − ∑ c > 0 N c ∗ p c = 1 − 1 N ∑ c > 0 N c ∗ c ∗ = N 1 N p0=1-\sum\limits_{c>0}N_c*p_c=1-\frac{1}{N}\sum\limits_{c>0}N_c*c^*=\frac{N_1}{N} p0=1c>0Ncpc=1N1c>0Ncc=NN1
因此仍然有 N 1 N \frac{N_1}{N} NN1的概率余量分配给未出现的元组。

2.3 Katz回退

n-gram允许回退(back off)到越来越短的历史上,它的思路就是如果一个n-gram的条件概率为0,则用(n-1)-gram的条件概率取代,如果(n-1)-gram的条件概率依然为0,继续回退,直到1-gram概率,如果1-gram依然为0,就直接忽略掉该词。

2.4 线性插值

unigram的插值:
P ( w t ) = λ P M L ( w t ) + ( 1 − λ ) 1 N P M L ( w t ) = c ( w t ) N P(w_t)=\lambda P_{ML}(w_t)+(1-\lambda)\frac{1}{N}\\ P_{ML}(w_t)=\frac{c(w_t)}{N} P(wt)=λPML(wt)+(1λ)N1PML(wt)=Nc(wt)
bigram的插值:
P ( w t ∣ w t − 1 ) = λ P M L ( w t ∣ w t − 1 ) + ( 1 − λ ) P ( w t ) P M L ( w t ∣ w t − 1 ) = c ( w t − 1 , w t ) ∑ w t c ( w t − 1 , w t ) P(w_t|w_{t-1})=\lambda P_{ML}(w_t|w_{t-1})+(1-\lambda)P(w_t)\\ P_{ML}(w_t|w_{t-1})=\frac{c(w_{t-1},w_t)}{\sum_{w_t}c(w_{t-1},w_t)} P(wtwt1)=λPML(wtwt1)+(1λ)P(wt)PML(wtwt1)=wtc(wt1,wt)c(wt1,wt)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值