最近使用使用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*次:
是所有发生次数为r的元组个数,同样
是所有发生次数为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的总和:
其中
因此最后保证了概率之和为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