训练语言模型,零概率和平滑问题

2,058 阅读2分钟

当我们训练语言模型时候,就算使用一个相当大量的语料,如果直接用比值计算概率,大部分条件概率依然是零,这种模型称之为“不平滑”。在实际应用中,这种现象不可避免。 古德提出了在统计中相信可靠的统计数据,而对于不可行的统计数据打折扣的一种概率估计方法,同时将折扣出来的那一小部分概率分给未看见的事件(Unseen Events)。称为古德-图灵估计(Good-Turing Estimate)。

math.png-38kB

这种思想如上图所示,对于未出现的事件,我们应该认为它们是有概率出现的,因此需要从概率总和,也就是1,折扣出来一部分给他们,并且要根据“越是不可信的统计折扣越多”的方法来进行。 即: 假定在语料库中,出现r次的词有NrN_r个,特别的,未出现的词数量为N0N_0,语料库的大小为N,则有:

N=r=1rNrN = \sum_{r=1}^{\infty}{rN_r}

出现r此在整个语料中的相对频度则是 rNr/NrN_r/N 现在假定,当r比较小时,他的统计可能不可靠,因此在计算那些出现r词的词的概率是,要使用一个更小一点的次数,即 drd_r,古德-图灵估计按照下面的公式计算:

dr=(r+1).Nr+1/Nrd_r = (r+1).N_{r+1}/N_r

我们容易得到:

rdr.Nr=N\sum_{r}{d_r.N_r=N}

一般来说,出现一次的词的数量比出现两次的词的数量多,出现两次的词的数量比出现三次的多,这种规律称之为Zipf定律。所以,当r越大,词的数量NrN_r就越少,即 Nr+1<NrN_{r+1} < N_r。因此,一般情况下,dr<rd_r < r,而d0>0d_0 > 0。这样就给未出现的词赋予了一个很小的值,从而解决了零概率的问题,同时下调了出现频率很低的词的概率。 在实际应用中,一般对出现次数超过某个阈值的词,频率不下调,低于这个阈值的,频率才下调,下调的频率分给未出现的词。这样出现r此的词的频率估计为dr/Nd_r/N。 对于二元组(wi1,wi)(w_{i-1},w_i)的条件概率估计 P(wi1,wi)P(w_{i-1},w_i) 可以同样的处理。我们知道,通过前一个词wi1预测后一个词w_{i-1}预测后一个词w_i$,所有的条件概率总和应该为1,即:

P(wiwi1)=1\sum{P(w_i|w_{i-1})} = 1

对于出现频数非常少的二元组,需要按照Good-Turing来打折扣。 公式如下:

屏幕快照 2021-09-27 下午4.56.14.png

其中 T 是上面提到的阈值,一般是8-10左右,fgt()f_{gt}()表示经过古德-图灵估计后的相对频度,而:

Q(wi1)=1wiseenP(wi1wi)wiunseenP(wi)Q(w_{i-1}) = \frac{1- \sum_{w_i seen}{P(w_{i-1}|w_i)}}{\sum_{w_i unseen}{P(w_i)}}

这样可以保证上面概率和为1的公式。这种平滑的方法称为Katz backoff。