1、N-gram存在的问题

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

2、平滑算法

2.1 加法平滑

2.1.1 Laplace平滑

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

2.1.2 Lidstone平滑

针对Laplace平滑存在的过估计问题,Lidstone不加1,而加一个通常较小的正值λ\lambdaλ
PLid(w1,...,wn)=C(w1,...,wn)+λ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)的方法而提出来的。其基本思想是:利用频率的类别信息来平滑频率。对于任何出现 rrr 次的nnn元组,都假设它出现了 r∗r^*r​ 次。
r∗=(r+1)nr+1nr r^∗=(r+1)\frac{n_{r+1}}{n_r} r=(r+1)nrnr+1
其中,nrn_rnr是训练语料中正好出现rrr次的nnn元组的个数,也就是说,发生rrr次的nnn元组的调整由发生rrr次的nnn元组与发生r+1r+1r+1次的nnn元组两个类别共同决定。假设m-gram的w1mw_1^mw1m出现了c(w1m)c(w_1^m)c(w1m)​​次,Good_Turing给出其出现的概率为:
PGT(w1m)=c∗(w1m)N P_{GT}(w_1^m)=\frac{c^*(w_1^m)}{N} PGT(w1m)=Nc(w1m)
那么对于c=0c=0c=0​(训练样本中未出现)的样本有:
p0=1−∑c>0Nc∗pc=1−1N∑c>0Nc∗c∗=N1N 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
因此仍然有N1N\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(wt)=λPML(wt)+(1−λ)1NPML(wt)=c(wt)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(wt∣wt−1)=λPML(wt∣wt−1)+(1−λ)P(wt)PML(wt∣wt−1)=c(wt−1,wt)∑wtc(wt−1,wt) 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)

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐