Mathilda_HC 2019-05-04 17:16 采纳率: 0%
浏览 1159

good-turing平滑方法的缺点改进

如果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)又如何计算呢?

  • 写回答

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。这也是无奈之举,不过确实不糊影响到实际的概率分布状况。其实也是无奈之举,毕竟自己短期做个项目,数据不可能都训练到,只能自己根据凭据平滑的原则,“机智地”变更了一下下。
        对此,推荐一本书:宗成庆的《统计自然语言》。里面会有详细系统的讲解。
    
    评论

报告相同问题?

悬赏问题

  • ¥15 matlab生成电测深三层曲线模型代码
  • ¥50 随机森林与房贷信用风险模型
  • ¥50 buildozer打包kivy app失败
  • ¥30 在vs2022里运行python代码
  • ¥15 不同尺寸货物如何寻找合适的包装箱型谱
  • ¥15 求解 yolo算法问题
  • ¥15 虚拟机打包apk出现错误
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 三菱伺服电机按启动按钮有使能但不动作