歧义问题

这里所指的“歧义”问题,是最大匹配算法中一个非常常见的问题。随着词典库的扩大,最大匹配算法难免就会经常匹配出错。
例如:词典库中大量增加各种人名,那么很多人名就会干扰到最大匹配算法。导致很多字符组合被识别成了人名。如果是使用R或者R+算法,这个情况基本不会出现。主要因为人名的相关系数并不是很高。
当然上述讲的情况可能有些特殊。从综合的情况来看,与其他算法相比,R或者R+算法的“歧义”概率的确降低了很多(但并不等于完全消失)。
产生“歧义”除了取决于算法,还取决于词典库的情况。毕竟数据来源并没有经过仔细“清洗”,难免会有不妥之处。所以至少要从这两个方面着手解决。

采用R+算法后,依然还是会存在一些歧义问题。这里举一些例子:

  • 例1“……美女人后……”
    R+算法:……美|女人|后……
    正确划分:……美女|人后……
    词汇“女人”的相关系数要比“美女”高很多,所以R+算法优先选择将词汇“女人”划分出来。但是这样造成“美”和“后”的孤立。那么这个划分是否合理,还要看“美”的前面是什么词,“后”的后面是什么词。如果前后都没有没有关系,那么这种划分就是不合理的。这种“关系”目前还没有办法去用程序描述。
  • 例2“……运河水道……”
    R+算法:……运|河水|道……
    正确划分:……运河|水道……
    此例的情况与例1一样。解决这种问题的方法有两种:(1)强制指定“运河水道”的划分方式;(2)增加“运河”或者“河道”的相关系数数值。增加相关系数数值的最简单办法,就是提高强制提高相关的统计次数。这就好比老师让学生反复背诵,抄写同一内容一样。不过用这种方法,可能会导致一些的问题。如果下次遇到的是“运河水到”,这就又有问题了。
  • 例3“我省省直属机关单位……”
    R+算法:我|省省|直属机关单位……
    正确划分:我省|省直属|机关单位……
    此例的问题同例1。不过可以通过从词典库中删除“省省”来解决。同样这个也是有副作用的。
  • 例4“……撑起身子……”
    R+算法:……撑|起身|子……
    正确划分:……撑起|身子……
  • 例5“……一张大书桌……”
    R+算法:……一|张大|书桌……
    正确划分:……一张|大书桌……
    此例中,“张大”是一个名字。向词典库中增加数量词“一张”之后,问题得到了解决。
  • 例6“……病床上坐了起来……”
    R+算法:……病床|上坐|了|起来……
    正确划分:……病床上|坐了|起来……
    此例中,上下两种分法,单从语法上看,都是说得通的。但是从实际意义理解上就说不通了。语法对程序是一个难题,更何况理解。
  • 例7“我向光美同志……”
    R+算法:……我|向光|美|同志……
    正确划分:……我|向|光美|同志……
    这个例子就是人来划分也可能出错。其实还可以划分为:……我|向光美|同志……。想要正确划分,就要依赖上下文了。

虽然算法无法完全避免歧义,但是因为其本质是基于概率分析的算法,因此在对分析残句、断句方面效果还是十分不错的。

至于词性标注和汉语语法是否可以有助于解决这个问题,作者目前还没有仔细研究。不过从目前已知的算法来看,词性标注是要依赖分词算法的。汉语语法也不是正则表达式。很多语法说得简单,但是变成程序绝非那么简单。等后面有了研究成果,再来细说吧。