语言模型中常见的平滑处理技术

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有i=1VP(wi)=1\sum_{i=1}^{V} P\left(w_{i}\right)=1,对于Bigram有j=1VP(wjwi)=1\sum_{j=1}^{V} P\left(w_{j} | w_{i}\right)=1)。
    举例来说,假设使用Bigram模型,V=20,count(我们)=3,count(我们,是)=0。若不使用平滑处理,则P(是|我们)=0;若使用上述处理,则P(是|我们)=(0+1)/(3+20)=1/23

  • Add‐K Smoothing
    对于这种方式,有PL(wiwi1)=count(wiwi1)+Kcount(wi1)+KVP_{L}\left(w_{i} | w_{i-1}\right)=\frac{\operatorname{count}\left(w_{i} w_{i-1}\right)+K}{\operatorname{count}\left(w_{i-1}\right)+KV}。可以看出,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^(wiwi2,wi1)=λ1×PML(wiwi2,wi1)+λ2×PML(wiwi1)+λ3×PML(wi)\begin{aligned} \hat{P}\left(w_{i} | w_{i-2}, w_{i-1}\right)=& \lambda_{1} \times P_{M L}\left(w_{i} | w_{i-2}, w_{i-1}\right) \\ &+\lambda_{2} \times P_{M L}\left(w_{i} | w_{i-1}\right) \\ &+\lambda_{3} \times P_{M L}\left(w_{i}\right) \end{aligned}
    其中,λ1+λ2+λ3=1\lambda_{1}+\lambda_{2}+\lambda_{3}=1
    使用这种方式的理由可以用下面的例子来解释:
    语言模型中常见的平滑处理技术
    假如在上述的某小型语料库中,计算得到的p(kitchen | in the)和p(arboretum | in the)均为0,但实际上,随着语料库的扩充,两者的概率都将不会为0,并且前者的概率会比后者大(因为kitchen和the kitchen的出现概率大于arboretum和the arboretum)。因此,我们有理由借助Unigram和Bigram模型来帮助计算上面的式子,也就引入了interpolation处理方式。