百度切分分析

来源:互联网 发布:网络售后服务方案 编辑:程序博客网 时间:2024/06/03 17:03

百度分词分析

网上有很多篇关于百度分词分析的,可能是百度在不停的与时俱进,所以原有的分析在我看来是存在着少许偏差的,另外也不太全面,本文将给一个分析出来,与大家探讨。

    首先,来看看百度对一个句子是怎么拆分的,毕竟,是否对查询进行拆分,以及如何拆分,是需要符合其索引结构的。给定一个句子:中华人民共和国people republic of china GDP增速为7.5%(大于7%)。按照已有的分析,百度是按照双向最大匹配来进行切分的(这个作者没有异义),假定“中华人民共和国”、“增速”,“大于”已经存在于词典中,那么上面这个句子应该如何拆分?实际上关键是英文,数字以及标点符号(,| . | |…)如何处理。显然对于英文,不是百度的重点,应该按照空格自动切分,不考虑英文词组之类的。对于数字,是按照单个数字索引还是按照整体索引呢?首先进行如下实验:

    实验1

1.  输入“1”,返回N1)= 77,200,000个结果;

2.  输入“10”,返回N10)= 46,900,000

3.  输入“11”,返回N11)= 36,900,000

4.  输入“12”,返回N12)= 39,000,000

    如果是按照单个数字进行切分的,那么显然 N1> N10 + N11 + N12 ;

而实际并非如此,因此可以初步断定是按照数字整体来进行切分的。但是问题马上又来了,数字的组合,加上小数点,加上百分号,何其多啊,需要多大的索引库才能够存上这些数字呢?另外比较麻烦的是,如何判断一个由“单个数字加上符号”组成的字符串是一个数字?虽然这个从模式匹配角度来讲是不难的,但是可能对整体的切分效率有影响,另外由于这个组合实在太大,可能造成的后果是,非常大量的数字的索引网页数仅仅只有1个或者几个,对效率影响很大。因此猜测百度采取的是把数字中出现的符号均作为分隔符,例如87.88,拆分(87 / . / 88); 77,200,000拆分为(77 / , / 200 / , / 000) 这个猜测对吗?

     实验2

1.  输入“87”,返回结果中包含了:V3.87  87%  2.87%  87.00等结果

    初步说明不是按照数字整体来进行切分的,而是按照符号作为分隔符来进行切分的,这种切分方式可以保证索引项比较小。那这个时候问题来了,符号怎么处理?对于87.88中的“.”,77,200,000中的“,”该怎么处理?是建立索引还是怎么样?进一步实验:

     实验3

1.  输入“87.88”,返回N87.88)= 4740,随机的点击,一直遍历百度所能给出的76个页面上返回的结果,基本上都能够比较完整的匹配上87.88; 说明“.”这个符号可能也做了索引,但是单独输入“., 百度说“抱歉,您输入的内容.不在查询范围内。”;

2.  输入“77,200,000”,返回N77,200,000= 795,000,从返回结果来看,显然是和按“77 200 000”搜索返回的结果是一样的。说明“,”肯定没有做索引;

从上面可以看出,数字中间的符号地位是不一样的,可能百度是按照符号的通常作用来分别处理的,例如“,”一般是作为句子结束标号,而.尤其是在中文里面,是不作为句子结束,或者说在句子中充当语义成分的。推断百度对符号分为两类,一是连接符“.”“-”之类,有语义,并且做了索引,另外是结束符等,只在句子与句子间有语义作用的。没有做索引。至此,上面的句子应该切分如下:

中华人民共和国 | people | republic | of | china | | GDP| 增速| | 7 | . | 5 | % | 大于| 7 | %|

至此似乎对于百度的切词有了个全面的认识,对错与否还不能够完全判断,等待大家批评指正。

现在从查询角度来看看切分,对于一个用户查询,百度肯定是希望能够最短的时间返回所有包含这个查询的网页(这里不去考虑排序)。那么按照一般的想法,对查询串的切分,肯定希望切分后的各子串数量尽可能少,而且能够迅速定位索引项。其实也必须这么做,为什么呢?假定我要查“软件设”,现任正常情况下百度所收集网页里面的“软件”按照一个整词来索引的,如果按照单字查“软”“件”,是不可能返回“软件”的,因此,用户查询串里面有词,就必须把这个词找出来,不然查询结果肯定不对,实验如下:

实验4

1.              输入“软”,返回N(软)= 23,700,000,从抽查的网页来看,虽然包含了“软件”,但是没有显示红色。

2.              输入“软件设”,返回N( 软件设) 11,600,从抽查的网页来看,很多网页的“软件”为红色,另外一个网页http://bbs.popip.net/viewthread.php?tid=3715里面基本上只有“软件”一词。

上述实验实际上也说明了,以前的一些分析认为百度对于三个字一下的词是不作分词的,这个判断不对,可能还没充分理解百度的索引机制。作者设计了另外一个实验:

实验5

1.              输入“吴.文”,返回N(.) = 7,120,000, 这个时候返回的网页里面, 开始几页“.”被当作了一个占位符,也就是说返回的结果为中间填充了一个汉字。后来就按照单个字来查询了。

可能是百度对于符号的设定还有些其它的规则,目前作者还不能完全掌握。

 

 
原创粉丝点击