分词算法分析之二微引流

SC拼写检查错误提示(以及拼音提示功能)拼写检查错误提示是搜索引擎都具备的一个功能,也就是说用户提交查询给搜索引擎,搜索引擎检查看是否用户输入的拼写有错误,对于中文用户来说一般造成的错误是输入法造成的错误.那么我们就来分析看看百度是怎么实现这一功能的.我们分析拼写检查系统关注以下几个问题:()系统如何判断用户的输入是有可能发生错误的查询呢?()如果判断是可能错误的查询输入,如何提示正确的词汇呢?那么百度是如何做的呢?百度判断用户输入是否错误的标准,我觉得应该是查字典,如果发现字典里面不包含这个词汇,那么很有可能是个错误的输入,此时启动错误提示功能,这个很好判断,因为如果是一个正常词汇的话,百度一般不会有错误提示,而你故意输入一个词典不可能包含的所谓词汇,此时百度一般会提示你正确的检索词汇.那么百度是怎么提示正确词汇的呢?很明显是通过拼音的方式,比如我输入查询制才,百度提供的提示词汇为:“:制裁质材纸材,都是同音字.所以百度必然维持着一个同音词词典,里面保留着同音词信息,比如可能包含着下面这条词条:“à制裁,质材,纸材,另外还有一个标注拼音程序,现在能够看到的基本流程是:用户输入制才,查词典,发现没有这个词汇,OK,启动标注拼音程序,将制才标注为拼音,然后查找同音词词典,发现同音词制裁,质材,纸材,那么提示用户可能的正确拼写.整体流程看起来很简单,但是还有一些遗留的小问题,比如是否将词表里面所有同音词都作为用户的提示信息呢?比如某个拼音有个同音词,是否都输出呢?百度并没有将所有同音词都输出而是选择一定筛选标准,选择其中几个输出.怎么证明这一点?我们看看拼音的同音词,紫光输入法提示同音词汇有流丽流离琉璃流利个,我们看看百度返回几个,输入流厉作为查询,这里是故意输入一个词典不包含的词汇,这样百度的拼写检查才开始工作,百度提示:琉璃刘丽刘莉,这说明什么?说明不是所有同音词都输出,而是选择输出,那么选择的标准是什么?我能够猜测到的方法是对于用户查询LOG进行统计,提取用户查询次数多的那些同音词输出,如果是这样的话,上面的例子说明用户搜索琉璃次数比其它的都要高些,次之是刘丽,再次是刘莉,看来大家都喜欢查询自己或者认识的人的名字.另外一个小问题:同音词词典包含字词,字词,那么是否包含字词以及更长的词条?是否包含一字词?这里一字词好回答,不用测试也能知道肯定不包含,因为你输入一个字,谁知道是否是错误的呢?反正只要是汉字就能在词表里面找到,所以没有判断依据.二字词是包含的,上面有例子,三字词也包含,比如查询中城药百度错误提示:中成药,修改查询为重城药,还是提示中成药,再次修改查询重城要,百度依然提示中成药.那么字词汇呢?百度还是会给你提示的,下面是个例子:输入:静华烟云提示京华烟云输入:静话烟云提示京华烟云输入:静话阎晕提示京华烟云那么更长的词汇是否提示呢?也提示,比如我输入:落花世界有风军,这个查询是什么意思,估计读过古诗的都知道,看看百度的提示落花时节又逢君,这说明什么?说明同音词词典包含不同长度的同音词信息,另外也说明了百度的核心中文处理技术,也就是那个词典,还真挺大的.但是,如果用户输入的查询由两个或者两个以上子字符串构成,那么百度的错误提示功能就罢工了,比如输入查询哀体,百度提示艾提挨踢,但是.输入为我哀体,则没有任何错误提示.还有一个比较重要的问题:如果汉字是多音字那么怎么处理?百度呢比较偷懒,它根本就没有对多音字做处理.我们来看看百度的一个标注拼音的错误,在看这个错误前先看看对于多音字百度是怎么提示错误的,我们输入查询俱长,百度提示剧场局长,“俱长的拼音有两个:,可见如果是多音字则几种情况都提示..现在我们来看看错误的情况,我们输入查询剧常,百度提示:剧场局长,提示为剧场当然好解释,因为是同音字,但是为什么局长也会被提示呢?这说明百度的同音字词典有错误,说明在这个词条里面包含局长这个错误的同音词.让我们顺藤摸瓜,这个错误又说明什么问题呢?说明百度的同音词典是自动生成的,而且没有人工校对.还说明在自动生成同音词典的过程中,百度不是根据对一篇文章标注拼音然后在抽取词汇和对应的拼音信息获得的,而是完全按照某个词典的词条来标注音节的,所以对于多音字造成的错误无法识别出来,如果是对篇章进行拼音标注,可能就不会出现这种很容易发现的错误标注.当然还有另外一种解释,就是局长是故意被百度提示出来可能的正确提示词汇,因为考虑到武汉人和等前后鼻音分不清么,那么是这样的么?我们继续测试到底是何种情况.是百度有错误还是这是百度的先进的算法?我们考虑词汇长大,故意错误输入为赃大,如果百度考虑到了前后鼻音的问题,那么应该会提示长大,但是百度提示是藏大.这说明什么?说明百度并没有考虑前后鼻音问题,根本就是系统错误.我们输入查询悬赏,故意将之错误输入为悬桑,没有错误提示,说明确实没有考虑这种情况.前鼻音没有考虑,那么后鼻音考虑了么,我们输入:经常,故意改为后鼻音经缠,百度提示为经产经忏,还是没有考虑后鼻音.这基本可以确定是百度系统的错误导致.根据以上推导,我们可以得出如下结论:百度是将分词词典里面每个词条利用拼音标注程序标注成拼音,然后形成同音词词典,所以两个词典是同样大的,而且这个词典也随着分词词典的增长而在不断增长.至于标注过程中多音字百度没有考虑,如果是多音字就标注成多个发音组合,通过这种方式形成同音词词典.这样的同音词词典显然包含着很多错误.最后一个问题:百度对于英文进行拼写检查么?让我们试试看,输入查询,不错,搜到不少结果,专注中文搜索的百度还能搜索到英文,真是意外的惊喜.变换一下查询,会更加意外惊喜的给我们提示吗?百度提示的是:吃呢持呢,原来是不小心触发了百度的拼音搜索功能了.那么拼音搜索和中文检查错误是否采用同一套同音词词典呢,让我们来实验一下,搜索,百度提示榕基溶剂容积,OK,换个中文查询容机,百度提示榕基溶剂容积,看来使用的是同一套同音词词典.也就是说百度的中文纠错和拼音检索使用的机制相同,中文纠错多了一道拼音注音的过程而已.难道这就是传说中那个百度的事实上是一个无比强大的拼音输入法的拼音提示功能么?

Top