zoukankan      html  css  js  c++  java
  • 中科院分词系统的平滑处理

    根据2元统计语言模型,最优可能的一种划分s1,s2,..sn 满足下面的值最大:
    P(s) = max(p(s1) * p(s2|s1) * ... * p(sn|sn-1);
    一般两边取对数
    lnp(s) = max(ln(p(s1)) + ln(p(s2|s1)) + ... + ln(p(sn|sn-1)))
    那么一条路径的长度为:
    wi = ln(p(si|si-1))

    但是,在中科院分词系统的源代码中却发现,
    wi = -log{a*P(si-1)+(1-a)P(si|si-1)} (0<a<1)
    这是为什么呢?
    实际上,他做了一个所谓的平滑处理。为什么要做平滑处理呢?
    语料是有限的,不可能覆盖所有的词汇。做过物理实验的都知道,我们一般测量了几个点后,就可以画出一条大致的曲线,这叫做回归分析。
    利用这条曲线,就可以修正测量的一些误差,并且还可以估计一些没有测量过的值。
    统计语言里面也一样,如果 p(si|si-1) = 0, 我们就要估计一下它的大小。
    在免费版本里面的这个估计非常的粗糙,实际上会引起很多的分词不准确性,特别是对那些 P(si-1) 比较大,同时 P(si|si-1) 又比较小的词。
    这个a 值,默认是 0.1 , 对于字典比较全的情况下,可以把这个值设置小一点。这样可以提高准确性。
    如果,要进一步改进这个回归算法,可以看下面的论文:

    Katz平滑算法在中文分词系统中的应用 , 版权关系,不提供下载了。
  • 相关阅读:
    第八周课程总结&实验报告(六)
    第七周课程总结&实验报告(五)
    第六周&java实验报告四
    第五周课程总结&试验报告(三)
    第四周作业
    2019春总结作业
    第二周基础作业
    第三周作业
    2019期末总结
    第十四周课程总结 & 实验报告
  • 原文地址:https://www.cnblogs.com/niniwzw/p/1538780.html
Copyright © 2011-2022 走看看