如果good-turing平滑方法里面,训练的数据不是连续的,比如N1=9;N2=0;N3=100;N4=0;N5=0,;N6=20;这样的情况里,如果需要计算r=3,显然就是0了;如果需要计算r=6时的,那么也没法计算,因为显然r=7的数据不存在,N7=0,得到的结果也是0,这两个问题又怎么办呢?
此外,在我的bigram模型里面,如果说第一个词s1是已收录词典里面没有的,那么,对于出现了的词对:s1 s2,他们的概率 P(s2|s1)又如何计算呢?
good-turing平滑方法的缺点改进
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答
- Mathilda_HC 2019-06-16 17:03关注
这个问题是我做毕设初期的疑惑,但是后面自己就可以解答了。 首先,数据平滑里,Good-Turing确实是一个方法。但是对此,可以视为一种基础思想或者基础手段。而对于实际的问题,还是要综合多个平滑思想手段的。 一般搜索数据平滑,常见的机会出现Good-turing,adding-k,Katz等,但是,实际操作的时候,是多个基本平滑思想综合在一起的。 这里,对平滑方法做一个归类:插值与后备。二者都会对频数为0的数据平滑,但是,对于那些不为0的数据如何平滑,是否要用上更低阶去平滑,就有了二者的区分。那有没有不同低阶,统统只用高阶的呢?如问题所问,仅仅用高阶,比如Good-Turing是根本解决不了问题的。所以,要应付所有的为零的现象,必须用高阶。 那比较实用的数据平滑方法有如下:留存插值法,Jelinek-Mercer 方法,Witten-Bell方法,Kneser-Ney方法,Absolute discounting方法,Modified Kneser-Ney方法以及后备模型下的Katz平滑方法。大多数都是不仅仅用了一种平滑思想。对于这些方法,使用效果说法不一。但是目前我所看到的最多的是 说Kneser-Ney方法最佳, 我在毕设中实际用到的也是 Kneser-Ney方法,但是很不幸,所选数据还是会出现0的现象,但是已经比Good-turing好太多。于是没有别的办法,我把中间过程的数据0改为了0.1。这也是无奈之举,不过确实不糊影响到实际的概率分布状况。其实也是无奈之举,毕竟自己短期做个项目,数据不可能都训练到,只能自己根据凭据平滑的原则,“机智地”变更了一下下。 对此,推荐一本书:宗成庆的《统计自然语言》。里面会有详细系统的讲解。
解决 3无用 2