语言模型中常见的平滑处理技术
1 为什么需要平滑处理技术?
在使用语言模型直接计算某个句子出现的概率时,可能会由于某个单词或单词对出现的概率为0而导致整个句子出现的概率为0。
例如下面这个场景:
在上面的场景中,由于部分单词对出现的概率为0,导致最终两句话出现的概率均为0。但实际上,s1=“今天没有训练营”比s2=“今天训练营没有”更符合语法习惯,我们也更希望计算出来的P(s1)大于P(s2)。
2 常见的平滑处理技术
为了解决上述问题,考虑引入平滑处理的技术,来修正计算过程中的概率值,避免某一项概率为0导致整个句子的概率为0。
一般来说,语言模型的平滑处理可分为以下三类:
- Discounting(折扣):通过给概率不为0的项打折扣,来提高概率为0的项的概率;
- Interpolation(插值):在使用N-gram模型计算某一项的概率时,同时结合低阶的模型所计算出的概率;
- Back‐off:approximate counts of unobserved N‐gram based on the proportion of back‐off events (e.g., N‐1 gram)。
2.1 Discounting:包括Add‐One Smoothing、Add‐K Smoothing、Good-Turing Smoothing等。
-
Add‐One Smoothing
假设N为语料中的单词个数,V为词典中单词的个数,那么对于Unigram和Bigram模型,平滑处理后计算每一项概率的公式为
可以看出,Add‐One Smoothing的处理方式为:在分子分母上分别加1和V(分子加1避免了这一项为0,分母加V让这一项变小也就是discount,同时也保证对于Unigram有,对于Bigram有)。
举例来说,假设使用Bigram模型,V=20,count(我们)=3,count(我们,是)=0。若不使用平滑处理,则P(是|我们)=0;若使用上述处理,则P(是|我们)=(0+1)/(3+20)=1/23。 -
Add‐K Smoothing
对于这种方式,有。可以看出,Add‐One Smoothing就是K=1的情况。
在使用Add‐K Smoothing的时候,可以使用优化的方法来寻找最佳的K。具体来说,先计算文本的perplexity,由于perplexity是关于K的函数,因此通过优化得到最小的perplexity时也同时得到了最佳的K。 -
Good-Turing
Good-Turing技术是在1953年由古德(I.J.Good)引用图灵(Turing)的方法而提出来的,其基本思想是用频率的类别信息来平滑频率。
2.2 Interpolation:包括Linear Interpolation等。
-
Linear Interpolation
这种方式的思路为:在使用N-gram模型计算某一项的概率时,同时结合低阶的模型所计算出的概率。
以Trigram模型来说,使用interpolation方式后,计算每一项的概率公式为:
其中,。
使用这种方式的理由可以用下面的例子来解释:
假如在上述的某小型语料库中,计算得到的p(kitchen | in the)和p(arboretum | in the)均为0,但实际上,随着语料库的扩充,两者的概率都将不会为0,并且前者的概率会比后者大(因为kitchen和the kitchen的出现概率大于arboretum和the arboretum)。因此,我们有理由借助Unigram和Bigram模型来帮助计算上面的式子,也就引入了interpolation处理方式。