文章来源:http://www.360doc.com/showWeb/0/0/304650.aspx
Tags: 搜索引擎搜索引擎 | 百度百度
2007-1-18 9:25:05 | 编辑
搜索引擎设计实用教程-以百度为例
2、中文分词
百度对于少于3个字符的串没有切分;百度应该采取了两套索引机制,一种是按照单词索引,一种是按照N-GRAM索引;判断一个分词系统好不好,关键看两点,一个是消除歧义能力;一个是词典未登录词的识别比如人名,地名,机构名等.那么百度用的是什么方法?我的判断是用双向最大匹配算法,在这种情况下,百度采取最短路径方法,也就是切分的片断越少越好,比如< 古巴,比,伦理>和< 古巴比伦,理>相比选择后者,< 北京,华,烟云>和< 北,京华烟云>相比选择后者.还有类似的一些例子,这样基本可以解释这些输出结果.如果正向反向分词不一致,而且最短路径也相同,那怎么办?百度的可能选择是这种情况下选择单字少的那组切分结果.
百度一直宣传自己在中文处理方面的优势,从上面看,分词算法并无特殊之处,消歧效果并不理想,即使百度采取比上述分词算法复杂些的算法也难以说成是优势,如果说百度有优势的话,唯一的优势就是那个很大的专用词典,这个专用词典登录了人名(比如大长今),称谓(比如老太太),部分地名(比如阿联酋等),估计百度采用学术界公布的比较新的命名实体识别算法从语料库里面不断识别出词典未登录词,逐渐扩充这个专门词典.如果这就是优势的话,那么这个优势能够保持多久就是个很明显的问题.
3、拼写检查错误提示:
后台作业:
(1)前面的文章我们说过,百度分词使用的词典至少包含两个词典一个是普通词典,另外一个是专用词典(专名等),百度利用拼音标注程序依次扫描所有词典中的每个词条,然后标注拼音,如果是多音字则把多个音都标上,比如”长大”,会被标注为”zhang da/chang da”两个词条.
(2)通过标注完的词条,建立同音词词典,比如上面的”长大”,会有两个词条: zhang daà长大” , chang daà长大.
(3)利用用户查询LOG频率信息给予每个中文词条一个权重;
(4)OK,同音词词典建立完成了,当然随着分词词典的逐步扩大,同音词词典也跟着同步扩大;
拼写检查:
(1)用户输入查询,如果是多个子字符串,不作拼写检查;
(2)对于用户查询,先查分词词典,如果发现有这个单词词条,OK,不作拼写检查;
(3)如果发现词典里面不包含用户查询,启动拼写检查系统;首先利用拼音标注程序对用户输入进行拼音标注;
(4)对于标注好的拼音在同音词词典里面扫描,如果没有发现则不作任何提示;
(5)如果发现有词条,则按照顺序输出权重比较大的几个提示结果;
拼音提示:
(1)对于用户输入的拼音在同音词词典里面扫描,如果没有发现则不作任何提示;
(2)如果发现有词条,则按照顺序输出权重比较大的几个提示结果;
4、中文分词改进:上面说过,经过分析得出百度的分词系统采用双向最大匹配分词,但是后来发现推理过程中存在一个漏洞,而且推导出来的百度分词算法步骤还是过于繁琐,所以进一步进行分析,看看是否前面的推导有错误.
总结:
重新归纳一下百度的分词系统:首先用专有词典采用最大正向匹配分词,切分出部分结果,剩余没有切分交给普通词典,同样采取正向最大匹配分词,最后输出结果.
另外,GOOGLE也是采用正向最大匹配分词算法,不过好像没有那个专用词典,所以很多专名都被切碎了.