srilm语言模型中的平滑算法——Good-Turing平滑算法

本文对比了自写语言模型与SRILM,并详细介绍了SRILM中的回退和平滑算法,特别是Good-Turing平滑算法的工作原理及实现过程。

最近使用使用python自己写的语言模型和srilm得到的语言模型做对比,srilm里还是有很多trick的,尤其是平滑算法,集成了很多数据平滑算法,研究的时候,记录一下。

在srilm中有回退和差值两类平滑算法,简单来说,回退就是将出现过的ngram的概率打个折扣,将那部分折扣下来的概率均摊为未出现的ngram作为他们的概率,而插值呢,一样是对出现过的ngram打折扣,但是折扣下来的概率值均摊到所有的ngram上。对于那些出现的ngram来说,他们使用最大似然得到的真正概率(频率)A大于使用插值得到的概率B大于使用回退得到的概率C,即

A>B>C

 

主要使用的平滑算法

Good-Turing平滑算法

Good-Turing算法的思想是,对于出现次数大于某一阈值的ngram使最大似然用频率计算是比较准确的,但是如果小于这个阈值,最大似然估计就不准了。这时候,算法的处理就是利用出现次数较多的N阶元组去调整出现比他少的N阶元组的估计量。算法的

对于中产(那些发生次数小于阈值的元组)发生了r次,假设它发生了r*次:

                                                                              \boldsymbol{r}*=\boldsymbol{(r+1)}\frac{N_{r+1}}{N_{r}}

\boldsymbol{N_{r}}是所有发生次数为r的元组个数,同样\boldsymbol{N_{r+1}}是所有发生次数为r+1的元组个数,一般来说,发生次数为r的元组个数多余发生次数为r+1的元组个数,这里不要弄混发生次数和元组个数,如果做个比喻的话,那元组就是字典的key,元组个数是字典的value,元组个数是key的个数,不太严谨,但是好理解。

这样的话,对于发生个数为0的元组的计数就不为0了,每个中产的概率都比以前要小了,小的那部分,分给了穷人。这里的发生个数为0指的是在训练集中发生次数为0,即在训练集中没有出现,在测试集中第一次出现,然后用的是在训练集中出现1次的元组来估计,这样那些第一次出现的次数为不为0,实现了平滑。

证明所有元组概率之和为1的推到如下:

nr是所有发生次数为r的元组个数,同样nr+1是所有发生次数为r+1的元组个数,一般来说,发生次数为r的元组个数多余发生次数为r+1的元组个数,这里不要弄混发生次数和元组个数,如果做个比喻的话,那元组就是字典的key,元组个数是字典的value,元组个数是key的个数,不太严谨,但是好理解。

这样的话,对于发生个数为0的元组的计数就不为0了,每个中产的概率都比以前要小了,小的那部分,分给了穷人。这里的发生个数为0指的是在训练集中发生次数为0,即在训练集中没有出现,在测试集中第一次出现,然后用的是在训练集中出现1次的元组来估计,这样那些第一次出现的次数为不为0,实现了平滑。

证明所有元组概率之和为1的推到如下:

nr是所有发生次数为r的元组个数,同样nr+1是所有发生次数为r+1的元组个数,一般来说,发生次数为r的元组个数多余发生次数为r+1的元组个数,这里不要弄混发生次数和元组个数,如果做个比喻的话,那元组就是字典的key,元组个数是字典的value,元组个数是key的个数,不太严谨,但是好理解。

这样的话,对于发生个数为0的元组的计数就不为0了,每个中产的概率都比以前要小了,小的那部分,分给了穷人。这里的发生个数为0指的是在训练集中发生次数为0,即在训练集中没有出现,在测试集中第一次出现,然后用的是在训练集中出现1次的元组来估计,这样那些第一次出现的次数为不为0,实现了平滑。

证明所有元组概率之和为1的推到如下:

                                                   

nr是所有发生次数为r的元组个数,同样nr+1是所有发生次数为r+1的元组个数,一般来说,发生次数为r的元组个数多余发生次数为r+1的元组个数,这里不要弄混发生次数和元组个数,如果做个比喻的话,那元组就是字典的key,元组个数是字典的value,元组个数是key的个数,不太严谨,但是好理解。

这样的话,对于发生个数为0的元组的计数就不为0了,每个中产的概率都比以前要小了,小的那部分,分给了穷人。这里的发生个数为0指的是在训练集中发生次数为0,即在训练集中没有出现,在测试集中第一次出现,然后用的是在训练集中出现1次的元组来估计,这样那些第一次出现的次数为不为0,实现了平滑。

证明所有元组概率之和为1的推到如下:

                                              

         

上式是对于次数为r概率重新估计的元组,概率为θ

保证概率的总和为1,出现同样次数的元组具有相同的概率,所以总的概率就是出现在不同次数的概率与这个次数的元组总数的乘积之和,即θ(r)N的总和:

                                       

  其中

                                              \sum (r+1) N_{r+1}=\sum rN_{r}

因此最后保证了概率之和为1:

                                         

参考:

https://blog.youkuaiyun.com/hx14301009/article/details/80341095

https://blog.youkuaiyun.com/u010189459/article/details/38236657

http://www.52nlp.cn/mit-nlp-third-lesson-probabilistic-language-modeling-fifth-part#more-729

例子: http://blog.sina.com.cn/s/blog_8267db980102wqgc.html

推导: http://www.cs.cornell.edu/courses/cs6740/2010sp/guides/lec11.pdf

https://blog.youkuaiyun.com/xmdxcsj/article/details/50373554

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值