接着我们上回□□□的话题,百度搜索引擎□□算法技巧分析,接下来我们要□□讲的是中文分◆词技术,大家都知道百□□□度是全球专属●大的中文搜索◥引擎。下文针对百度□□□对用户查询关□□□键词分词做了•一个实践分析,希望对更多的seoer有帮助。百度这个搜索▼引擎对关键词□□□如何切分呢?
中文分词
一开始,讲讲百度的分✦词时机或者条◉件问题,是否是个中文□□字符串百度就□□拿来切一下呢?非也,要想被百度的□□分词程序荣幸□□□□的切割一下也★是要讲条件的,哪能是个字符□□串就切割啊?你当百度是卖□□锯条的么?
那么什么样的□□□字符串才满足□□□□被切割的条件□□□□呢?简单说来,如果字符串只□□□包含小于等于3个中文字符的□□□□话,那就保留不动,当字符串长度◣大于4个中文字符的□□□□时候,百度的分词程◈序才出马大干□□快上,把这个字符串□□肢解掉。
怎么证明呢?我们向百度提•交“在线观看”,看看返回结果◆中标为红字的□□地方,不难看出来,查询已经被切□□□□割成<电影,下载>两个单词了,说明分词程序□□□□已经开工了,如果是比4个中文字符更□□□□长的字符串,那分词程序就□□□更不客气了,一定大卸八块□□□而后快。我们来看看三□□个字符的情况,提交查询“当然择”,看起来这个查□□□□询不伦不类,那是因为我希□□望看到这个字□□□符串被切分为<当然,择>,返回结果看多□□□少篇相关页面,翻到后一页,发现标红的关□□键字都是” 当然择”连续出现的情◎况,好像没有切分,但是还不确定,那么再提交人◇工分好的查询“当然择”看看,返回结果又会□□显示多少篇,基本上可以确□□□定没有进行分□□□词了,当然另外一种◣解释是:对于三个字符□□先切分,然后将切分后□□□□的结果当作一□□个短语查询,这样看到的效□□果和没有切分□□是相似的。
但是我倾向于□□判断百度对于□□□□少于3个字符的串没□□□□有切分,奥卡姆不是说□□了么“如无必要,勿增实体”,干吗做无用功☆呢。那么如果没有◉切分,会有一个随之□□□□而来的问题,怎么从索引库□□□□里面提取未切□□□分的字符串呢?这牵扯到索引□□□的问题,我觉得百度应※该采取了两套□□□□索引机制,一种是按照单◇词索引,一种是按照N-GRAM索引, 至于索引的具□□□□体问题,以后在详细论□□述。
下面我们看看□□□百度是采取的□□何种分词算法,现在分词算法□□已经算是比较□□成熟了,有简单的有复□□□杂的,比如正向大匹丨配,反向大匹配,双向大匹配,语言模型方法,短路径算法等□□□等,有兴趣的可以◆用GOOGLE去搜索一下以□□□□增加理解。这里就不展开□□□说了。但是要记住一•点的是:判断一个分词□□□系统好不好,关键看两点, 一个是改善歧□□义能力;一个是词典未□□□□登录词的识别□□比如人名,地名,机构名等。
那么百度用的□□□□是什么方法?我的判断是用□□□双向大匹配算◎法。至于怎么推理□□得出的,让我们一步步□□□□来看。当然,这里一开始有□□个假设,百度不会采取◤比较复杂的算□□□法,因为考虑到速□□度问题。
我们提交一个□□□查询“毛泽东北京华□□烟云”,又一个不知所◆云的查询,尽管不知所云□□□□但是自有它的□□道理,我想看看百度□□□的分词是如何□□□□消歧以及是否□□□□有词典未登录□□□词的识别的功□□能,如果是正向大◢匹配算法的话,
那么输出应该□□□□是:”毛泽东/北京/华/烟云”,
如果是反向大□□□□匹配算法的话,那么输出应该□□是:”毛/泽/东北/京华烟云”,
我们看看百度丨的分词结果:”毛泽东/北/京华烟云”,一个很奇怪的□□输出,跟我们的期望□□相差较多,
但是从中我们□□可以获得如下□□信息:百度分词可以□□识别人名,也可以识别”京华烟云”,这说明有词典◈未登录词的识□□别的功能,我们可以假设□□□分词过程分为□□□□两个阶段: 先进阶段,先查找一个特□□□□殊词典,这个词典包含□□一些人名,部分地名以及□□□一些普通词典□□没有的新词,这样一开始将”毛泽东”解析出来,剩下了字符串”北京华烟云”,而”北/京华烟云”,可以看作是反□□□□向大匹配的分□□□□词结果。这样基本说得□□□□通。为了证明这一□□□□点,我们提交查询”发毛泽东北”,我们期望两种□□□□分词结果,一个是正向大□□□匹配<发毛,泽,东北>,一个是上述假□□设的结果<发,毛泽东,北>,事实上百度输□□□□出是第二种情□□□□况,这样基本能确□□□定百度分词采□□取了至少两个□□词典,一个是普通词◢典,一个是专用词□□典(人名等)。而且是专用词□□□□典先切分,然后将剩余的□□□片断交由普通□□词典来切分。
继续测验,提交查询“古巴比伦理”,如果是正向大□□□□匹配,那么结果应该□□□是<古巴比伦,理>,如果是反向大□□□匹配,那么结果应该□□□□是 <古巴,比,伦理>,事实上百度的♦分词结果是<古巴比伦,理>,从这个例子看,好像用了正向□□□大匹配算法;
此外还有一些□□□□例子表明好像◇是使用正向大◆匹配的;但是且慢,我们看这个查☆询“北京华烟云”,正向大匹配期□□□□望的结果是<北京,华,烟云>,而反向大匹配□□□□期望的结果是 <北,京华烟云>,事实上百度输□□出的是后者,这说明可能采●用的反向大匹□□配;
从这点我们可□□□以猜测百度采□□□□用的是双向大□□□□匹配分词算法,如果正向和反□□□□向匹配分词结◇果一致当然好◈办,直接输出即可;但是如果两者□□□不一致,正向匹配一种□□结果,反向匹配一种◆结果,此时该如何是♦好呢?
从上面两个例□□□□子看,在这种情况下,百度采取短路◣径方法,也就是切分的□□□□片断越少越好,比如<古巴,比,伦理>和<古巴比伦,理> 相比选择后者,<北京,华,烟云>和<北,京华烟云>相比选择后者。还有类似的一□□些例子,这样基本可以□□□解释这些输出□□□结果。
但是仍然遗留□□的问题是:如果正向反向◆分词不一致,而且短路径也☆相同,那怎么办?输出正向的还□□是反向的结果?
我们再来看一□□□个例子。提交查询“遥远古古巴比丨伦”,这个查询被百□□□□度切分为<遥远,古古,巴比伦>,说明词典里面□□有”巴比伦”,但是是否有”古 巴比伦”这个词汇不确□□□□定,此时看不出是□□□正向切分还是□□反向切分得出□□□的结果,换查询为“遥远古巴比伦”,此时被切分为“遥远/古巴比伦”,这说明词典里□□面有” 古巴比伦”这个词汇,这说明了“遥远古古巴比□□□伦”是正向大匹配△的结果。那为什么“遥远古古巴比□□□□伦”不会被反向切□□分为”遥/远古/古巴比伦”呢,百度的可能选※择是这种情况♦下选择单字少□□□□的那组切分结□□□果。
当然还可以继◇续追问:如果切分后单□□□字也一样多,那怎么办?后看一个例子,查询“王强大小”,百度将其切分□□为“王/强大/小”,是正向切分的□□结果,如果是反向的□□会被切分为“王/强/大小”,这说明有歧义□□□而且单字也相□□□同则选择正向▲切分结果。
OK,看到这里可能★头已经有些晕□□□□了,后总结一下百◤度的分词算法,当然里面还是◤有猜测的成分,算法如下:
一开始查询专□□□用词典(人名,部分地名等),将专有名称切□□出,剩下的部分采□□取双向分词策□□□略,如果两者切分□□结果相同,说明没有歧义,直接输出分词◆结果。如果不一致,则输出短路径□□□的那个结果,如果长度相同,则选择单字词▲少的那一组切▼分结果。如果单字也相□□□□同,则选择正向分◣词结果。
百度一直宣传□□□□自己在中文处□□□理方面的优势,从上面看,分词算法并无□□特殊之处,消歧效果并不□□□理想,即使百度采取◉比上述分词算□□□法复杂些的算·法也难以说成□□□是优势,如果说百度有◇优势的话,专属的优势就❖是那个很大的□□□专用词典,这个专用词典□□□□登录了人名(比如大长今),称谓(比如老太太),部分地名(比如阿联酋等),估计百度采用□□学术界公布的□□□□比较新的命名□□□□实体识别算法□□□□从语料库里面□□□不断识别出词●典未登录词,逐渐扩充这个□□□□专门词典。如果这就是优□□□□势的话,那么这个优势□□□□能够保持多久◆就是个很明显·的问题。
到此,我们讲述了百□□□□度搜索引擎算□□□□法的查询处理□□及中文分词技□□□□术,技巧很多,希望seoer能够认真揣摩,在搜索引擎道□□□路上越走越顺□□□□畅。
扫一扫
关注k8凯发一触即发
全国咨询热线
135-9299-6491