分词算法分析之三微引流

之三:对百度分词算法的进一步分析上面说过,经过分析得出百度的分词系统采用双向最大匹配分词,但是后来发现推理过程中存在一个漏洞,而且推导出来的百度分词算法步骤还是过于繁琐,所以进一步进行分析,看看是否前面的推导有错误.那么以前的分析有什么漏洞呢?我们推导百度分词有反向最大匹配的依据是百度将武汉华烟云分词为&;北,京华烟云&;,从这里看好像采用了反向最大匹配,因为正向最大匹配的结果应该是&;武汉,华,烟云&;,但是由此就推论说百度采用了双向最大匹配还是太仓促了,前面文章我们也讲过,百度有两个词典,一个普通词典,一个专有词典,而且是专有词典的词汇先切分,然后将剩余片断交给普通词典去切分.所以上面的武汉华烟云之所以被切分成&;北,京华烟云&;,另外一个可能是:京华烟云这个词汇是在专有词典里面存储的,所以先分析,这样得出京华烟云,剩下北,没什么好切分的,所以输出&;北,京华烟云&;.这里只是假设,那么是否确实京华烟云在专有词典呢?我们再看一个例子武汉华烟云,百度切分的结果是&;武汉,北,京华烟云&;,如果京华烟云在普通词典,如果是反向切分,那么结果应该是&;山,东北,京华烟云&;,如果是正向切分应该是&;武汉,武汉,华,烟云&;,无论如何都分不出&;武汉,北,京华烟云&;.这说明什么?说明京华烟云是在那个专有词典,所以先切分出京华烟云,然后剩下的武汉北交由普通词典切分,明显是正向最大匹配的结果输出&;武汉,北&;.当然按照我们在第一篇文章的算法推导武汉北的切分也会得出&;武汉,北&;的结论,但是明显比正向最大匹配多几个判断步骤,既然效果一样,另外一个更加简洁的方法也能说得通,那当然选择简便的方法了.所以初步判断百度采取的是正向最大匹配.我们继续测试采用何种分词算法,为了减少专有词典首先分词造成的影响,那么查询里面不能出现相对特殊的词汇,构筑查询天才能量级,这里应该没有专有词典出现过的词汇,百度切分为&;天才,能量,级&;,看来是正向最大匹配的结果.另外,如果所有查询词汇都出现在专有词典,那么采取的是何种方法?这样首先就得保证词汇都出现在专有词典,这么保证这一点呢?我们构造查询铺陈晓东方,百度切分为&;铺,陈晓东,方&;,可以看出陈晓东是在专有词典的所以先切分出来.另外一个例子武汉京城,百度切分为&;武汉,京城&;,说明东京是在普通词典的.OK,构造查询陈晓东京华烟云,通过前面分析可以看出两个词汇都在专有词典里面,百度切分为&;陈晓东,京华烟云&;,说明对于专有词典词汇也是采取正向最大匹配或者双向最大匹配.那么使用反向最大匹配了吗?构造查询例子陈晓东方不败,首先我们肯定陈晓东和东方不败都是在专有词典出现的,如果是正向切分,那么应该是&;陈晓东,方,不败&;或者&;陈晓东,方,不,败&;如果是反向切分则是&;陈,晓,东方不败&;,可以看出百度的切分是&;陈晓东,方,不败&;或者&;陈晓东,方,不,败&;,说明采用的是正向最大匹配.通过分析,百度的词典不包含不败这个单词,所以实际上百度的切分结果是&;陈晓东,方,不,败&;,很明显这和我们以前推导的算法是有矛盾的,所以以前的分析算法确实有问题,所以结论是百度采取的是正向最大匹配算法.重新归纳一下百度的分词系统:首先用专有词典采用最大正向匹配分词,切分出部分结果,剩余没有切分交给普通词典,同样采取正向最大匹配分词,最后输出结果.另外,GOOGLE也是采用正向最大匹配分词算法,不过好像没有那个专用词典,所以很多专名都被切碎了.从这点讲,GOOGLE在中文词典构建上比百度差些,还需要加把子力气才行,不过这也不是什么多难的事.责任编辑:飞翔的鱼:

Top