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

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
    可以看出,Add‐One Smoothing的处理方式为:在分子分母上分别加1和V(分子加1避免了这一项为0,分母加V让这一项变小也就是discount,同时也保证对于Unigram有 ∑ i = 1 V P ( w i ) = 1 \sum_{i=1}^{V} P\left(w_{i}\right)=1 i=1VP(wi)=1,对于Bigram有 ∑ j = 1 V P ( w j ∣ w i ) = 1 \sum_{j=1}^{V} P\left(w_{j} | w_{i}\right)=1 j=1VP(wjwi)=1)。
    举例来说,假设使用Bigram模型,V=20,count(我们)=3,count(我们,是)=0。若不使用平滑处理,则P(是|我们)=0;若使用上述处理,则P(是|我们)=(0+1)/(3+20)=1/23

  • Add‐K Smoothing
    对于这种方式,有 P L ( w i ∣ w i − 1 ) = count ⁡ ( w i w i − 1 ) + K count ⁡ ( w i − 1 ) + K V P_{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} PL(wiwi1)=count(wi1)+KVcount(wiwi1)+K。可以看出,Add‐One Smoothing就是K=1的情况。
    在使用Add‐K Smoothing的时候,可以使用优化的方法来寻找最佳的K。具体来说,先计算文本的perplexity,由于perplexity是关于K的函数,因此通过优化得到最小的perplexity时也同时得到了最佳的K。

  • Good-Turing
    Good-Turing技术是在1953年由古德(I.J.Good)引用图灵(Turing)的方法而提出来的,其基本思想是,用观察计数较高的N元语法数重新估计概率量的大小,并把它指派给那些具有零计数或者较低计数的N元语法,具体使用公式如下:
    c ∗ = ( c + 1 ) N c + 1 N c c^{*}=(c+1) \frac{N_{c+1}}{N_{c}} c=(c+1)NcNc+1
    其中, c c c代表某个单词出现的频数, N c N_{c} Nc代表出现c次的单词的个数,而 c ∗ c^{*} c是频数为c的单词经过Good-Turing处理后的新的频数。例如,在某个语料库中,单词“love”出现了20次,而出现20次的单词共有100个,经过处理后,这100个出现过20次单词的频数可能变成18.2。(更加具体的例子可参考这里

2.2 Interpolation:包括Linear Interpolation等。
  • Linear Interpolation
    这种方式的思路为:在使用N-gram模型计算某一项的概率时,同时结合低阶的模型所计算出的概率。
    以Trigram模型来说,使用interpolation方式后,计算每一项的概率公式为:
    P ^ ( w i ∣ w i − 2 , w i − 1 ) = λ 1 × P M L ( w i ∣ w i − 2 , w i − 1 ) + λ 2 × P M L ( w i ∣ w i − 1 ) + λ 3 × P M L ( w i ) \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} P^(wiwi2,wi1)=λ1×PML(wiwi2,wi1)+λ2×PML(wiwi1)+λ3×PML(wi)
    其中, λ 1 + λ 2 + λ 3 = 1 \lambda_{1}+\lambda_{2}+\lambda_{3}=1 λ1+λ2+λ3=1
    使用这种方式的理由可以用下面的例子来解释:
    Linear Interpolation
    假如在上述的某小型语料库中,计算得到的p(kitchen | in the)和p(arboretum | in the)均为0,但实际上,随着语料库的扩充,两者的概率都将不会为0,并且前者的概率会比后者大(因为kitchen和the kitchen的出现概率大于arboretum和the arboretum)。因此,我们有理由借助Unigram和Bigram模型来帮助计算上面的式子,也就引入了interpolation处理方式。
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值