当前位置:文档之家› 搜索引擎优化百度分词算法分析

搜索引擎优化百度分词算法分析

搜索引擎优化百度分词算法分析
搜索引擎优化百度分词算法分析

搜索引擎优化百度分词算法分析查询处理以及分词技术

随着搜索经济的崛起,人们开始越加关注全球各大搜索引擎的性能、技术和日流量。作为企业,会根据搜索引擎的知名度以及日流量来选择是否要投放广告等;

作为普通网民,会根据搜索引擎的性能和技术来选择自己喜欢的引擎查找资料;作为技术人员,会把有代表性的搜索引擎作为研究对象。搜索引擎经济的崛起,又一次向人们证明了网络所蕴藏的巨大商机。网络离开了搜索将只剩下空洞杂乱的数据,以及大量等待去费力挖掘的金矿。

但是,如何设计一个高效的搜索引擎?我们可以以百度所采取的技术手段来探讨如何设计一个实用的搜索引擎。搜索引擎涉及到许多技术点,比如查询处理,排序算法,页面抓取算法,CACHE机制,ANTI-SPAM等等。这些技术细节,作为商业公司的搜索引擎服务提供商比如百度,GOOGLE等是不会公之于众的。我们可以将现有的搜索引擎看作一个黑盒,通过向黑盒提交输入,判断黑盒返回的输出大致判断黑盒里面不为人知的技术细节。

查询处理与分词是一个中文搜索引擎必不可少的工作,而百度作为一个典型的中文搜索引擎一直强调其"中文处理"方面具有其它搜索引擎所不具有的关键技术和优势。那么我们就来看看百度到底采用了哪些所谓的核心技术。

我们分两个部分来讲述:查询处理/中文分词。

一、查询处理

用户向搜索引擎提交查询,搜索引擎一般在接受到用户查询后要做一些处理,然后在索引数据库里面提取相关的信息。那么百度在接受到用户查询后做了些什么工作呢?

1、假设用户提交了不只一个查询串,比如"信息检索理论工具"。

那么搜索引擎首先做的是根据分隔符比如空格,标点符号,将查询串分割成若干子查询串,比如上面的查询就会被解析为:信息检索,理论,工具三个子字符串;这个道理简单,我们接着往下看。

2、假设提交的查询有重复的内容,搜索引擎怎么处理呢?比如查询"理论工具理论",百度是将重复的字符串当作只出现过一次,也就是处理成等价的"理论工具",而GOOGLE显然是没有进行归并,而是将重复查询子串的权重增大进行处理。那么是如何得出这个结论的呢?我们可以将"理论工具"提交给百度,返回341,000篇文档,大致看看第一页的返回内容。

OK。继续,我们提交查询"理论工具理论",在看看返回结果,仍然是那么多返回文档,当然这个不能说明太多问题,那看看第一页返回结果的排序,看出来了吗?顺序完全没有变化,而GOOGLE则排序有些变动,这说明百度是将重复的查询归并成一个处理的,而且字符串之间的先后出现顺序基本不予考虑(GOOGLE是考虑了这个顺序关系的)。

3、假设提交的中文查询包含英文单词,搜索引擎是怎么处理的?比如查询"电影BT下载",百度的方法是将中文字符串中的英文当作一个整体保留,并以此为断点将中文切分开,这样上述的查询就切为电影,BT,下载,不论中间的英文是否一个字典里能查到的单词也好,还是随机的字符也好,都会当作一个整体来对待。至于为什么,你用查询"电影dfdfdf下载"看看结果就知道了。当然如果查询中包含数字,也是如此办理。

到目前为止,一切很简单,也很清楚,百度怎么处理用户查询的呢?归纳如下:首先根据分割符号将查询分开,然后看看是否有重复的字符串,如果有,就抛弃多余的,只保留一个,接着判断是否有英文或者数字,如果有的话,把英文或者数字当作一个整体保留并把前后的中文切开。

接着该干什么呢?该考虑分词的问题了。

二、中文分词

首先,讲讲百度的分词时机或者条件问题,是否是个中文字符串百度就拿

来切一下呢?非也,要想被百度的分词程序荣幸的切割一下也是要讲条件的,哪能是个字符串就切割啊?你当百度是卖锯条的么?

那么什么样的字符串才满足被切割的条件呢?简单说来,如果字符串只包含小于等于3个中文字符的话,那就保留不动,当字符串长度大于4个中文字符

的时候,百度的分词程序才出马大干快上,把这个字符串肢解掉。

怎么证明呢?我们向百度提交"电影下载",看看返回结果中标为红字的地方,不难看出来,查询已经被切割成电影,下载两个单词了,说明分词程序已经开

工了,如果是比4个中文字符更长的字符串,那分词程序就更不客气了,一定

大卸八块而后快。我们来看看三个字符的情况,提交查询"当然择",看起来这

个查询不伦不类,那是因为我希望看到这个字符串被切分为当然,择,返回结

果365篇相关页面,翻到最后一页,发现标红的关键字都是"当然择"连续出现

的情况,好像没有切分,但是还不确定,那么再提交人工分好的查询"当然择"

看看,返回结果1,090,000篇,基本上可以确定没有进行分词了,当然另外

一种解释是:对于三个字符先切分,然后将切分后的结果当作一个短语查询,

这样看到的效果和没有切分是相似的。

但是我倾向于判断百度对于少于3个字符的串没有切分,奥卡姆不是说了么"如无必要,勿增实体",干吗做无用功呢。那么如果没有切分,会有一个随

之而来的问题,怎么从索引库里面提取未切分的字符串呢?这牵扯到索引的问题,我觉得百度应该采取了两套索引机制,一种是按照单词索引,一种是按照N-GRAM索引,至于索引的具体问题,以后在详细论述。

下面我们看看百度是采取的何种分词算法,现在分词算法已经算是比较成

熟了,有简单的有复杂的,比如正向最大匹配,反向最大匹配,双向最大匹配,语言模型方法,最短路径算法等等,有兴趣的可以用GOOGLE去搜索一下以增加理解。这里就不展开说了。但是要记住一点的是:判断一个分词系统好不好,

关键看两点,一个是消除歧义能力;一个是词典未登录词的识别比如人名,地名,机构名等。

那么百度用的是什么方法?我的判断是用双向最大匹配算法。至于怎么推理得出的,让我们一步步来看。当然,这里首先有个假设,百度不会采取比较复

杂的算法,因为考虑到速度问题。

我们提交一个查询"北京华烟云",又一个不知所云的查询,尽管不知所云

但是自有它的道理,我想看看百度的分词是如何消歧以及是否有词典未登录词

的识别的功能,如果是正向最大匹配算法的话,

那么输出应该是:"/北京/华/烟云",

如果是反向最大匹配算法的话,那么输出应该是:"毛/泽/东北/京华烟云",

我们看看百度的分词结果:"/北/京华烟云",一个很奇怪的输出,跟我们

的期望相差较多,

但是从中我们可以获得如下信息:百度分词可以识别人名,也可以识别"京华烟云",这说明有词典未登录词的识别的功能,我们可以假设分词过程分为两个阶段:第一阶段,先查找一个特殊词典,这个词典包含一些人名,部分地名

以及一些普通词典没有的新词,这样首先将""解析出来,剩下了字符串"北京华烟云",而"北/京华烟云",可以看作是反向最大匹配的分词结果。这样基本说

得通。为了证明这一点,我们提交查询"发北",我们期望两种分词结果,一个

是正向最大匹配发毛,泽,东北,一个是上述假设的结果发,北,事实上百度

输出是第二种情况,这样基本能确定百度分词采取了至少两个词典,一个是普

通词典,一个是专用词典(人名等)。而且是专用词典先切分,然后将剩余的片

断交由普通词典来切分。

继续测验,提交查询"古巴比伦理",如果是正向最大匹配,那么结果应该

是古巴比伦,理,如果是反向最大匹配,那么结果应该是古巴,比,伦理,事

实上百度的分词结果是古巴比伦,理,从这个例子看,好像用了正向最大匹配

算法;

此外还有一些例子表明好像是使用正向最大匹配的;但是且慢,我们看这

个查询"北京华烟云",正向最大匹配期望的结果是北京,华,烟云,而反向最

大匹配期望的结果是北,京华烟云,事实上百度输出的是后者,这说明可能采

用的反向最大匹配;

从这点我们可以猜测百度采用的是双向最大匹配分词算法,如果正向和反

向匹配分词结果一致当然好办,直接输出即可;但是如果两者不一致,正向匹

配一种结果,反向匹配一种结果,此时该如何是好呢?

从上面两个例子看,在这种情况下,百度采取最短路径方法,也就是切分

的片断越少越好,比如古巴,比,伦理和古巴比伦,理相比选择后者,北京,华,烟云和北,京华烟云相比选择后者。还有类似的一些例子,这样基本可以

解释这些输出结果。

但是仍然遗留的问题是:如果正向反向分词不一致,而且最短路径也相同,那怎么办?输出正向的还是反向的结果?

我们再来看一个例子。提交查询"遥远古古巴比伦",这个查询被百度切分

为遥远,古古,巴比伦,说明词典里面有"巴比伦",但是是否有"古巴比伦"这

个词汇不确定,此时看不出是正向切分还是反向切分得出的结果,换查询为"遥远古巴比伦",此时被切分为"遥远/古巴比伦",这说明词典里面有"古巴比伦"

这个词汇,这说明了"遥远古古巴比伦"是正向最大匹配的结果。那为什么"遥远古古巴比伦"不会被反向切分为"遥/远古/古巴比伦"呢,百度的可能选择是这种情况下选择单字少的那组切分结果。

当然还可以继续追问:如果切分后单字也一样多,那怎么办?最后看一个例子,查询"王强大小:",百度将其切分为"王/强大/小",是正向切分的结果,

如果是反向的会被切分为"王/强/大小",这说明有歧义而且单字也相同则选择

正向切分结果。

OK,看到这里可能头已经有些晕了,最后总结一下百度的分词算法,当然

里面还是有猜测的成分,算法如下:

首先查询专用词典(人名,部分地名等),将专有名称切出,剩下的部分采

取双向分词策略,如果两者切分结果相同,说明没有歧义,直接输出分词结果。

如果不一致,则输出最短路径的那个结果,如果长度相同,则选择单字词少的那一组切分结果。如果单字也相同,则选择正向分词结果。

百度一直宣传自己在中文处理方面的优势,从上面看,分词算法并无特殊之处,消歧效果并不理想,即使百度采取比上述分词算法复杂些的算法也难以说成是优势,如果说百度有优势的话,唯一的优势就是那个很大的专用词典,这个专用词典登录了人名(比如大长今),称谓(比如老太太),部分地名(比如阿联酋等),估计百度采用学术界公布的比较新的命名实体识别算法从语料库里面不断识别出词典未登录词,逐渐扩充这个专门词典。如果这就是优势的话,那么这个优势能够保持多久就是个很明显的问题。

Spelling Checker拼写检查错误提示(以及拼音提示功能)

拼写检查错误提示是搜索引擎都具备的一个功能,也就是说用户提交查询给搜索引擎,搜索引擎检查看是否用户输入的拼写有错误,对于中文用户来说一般造成的错误是输入法造成的错误.那么我们就来分析看看百度是怎么实现这一功能的.

我们分析拼写检查系统关注以下几个问题:

(1)系统如何判断用户的输入是有可能发生错误的查询呢?

(2)如果判断是可能错误的查询输入,如何提示正确的词汇呢?

那么百度是如何做的呢?百度判断用户输入是否错误的标准,我觉得应该是查字典,如果发现字典里面不包含这个词汇,那么很有可能是个错误的输入,此时启动错误提示功能,这个很好判断,因为如果是一个正常词汇的话,百度一般不会有错误提示,而你故意输入一个词典不可能包含的所谓词汇,此时百度一般会提示你正确的检索词汇.

那么百度是怎么提示正确词汇的呢?很明显是通过拼音的方式,比如我输入查询"制才",百度提供的提示词汇为:":制裁质材纸材",都是同音字.所以百度必然维持着一个同音词词典,里面保留着同音词信息,比如可能包含着下面这条词条:"zhi caià制裁,质材,纸材",另外还有一个标注拼音程序,现在能够看到的基本流程是:用户输入"制才",查词典,发现没有这个词汇,OK,启动标注拼音

程序,将"制才"标注为拼音"zhi cai",然后查找同音词词典,发现同音词"制裁,质材,纸材",那么提示用户可能的正确拼写.

整体流程看起来很简单,但是还有一些遗留的小问题,比如是否将词表里面所有同音词都作为用户的提示信息呢?比如某个拼音有10个同音词,是否都输出呢?百度并没有将所有同音词都输出而是选择一定筛选标准,

选择其中几个输出.怎么证明这一点?我们看看拼音"liu li"的同音词,紫光输入法提示同音词汇有"流丽流离琉璃流利"4个,我们看看百度返回几个,输入"流厉"作为查询,这里是故意输入一个词典不包含的词汇,这样百度的拼写检查才开始工作,

百度提示:"琉璃刘丽刘莉",这说明什么?说明不是所有同音词都输出,而是选择输出,那么选择的标准是什么?

我能够猜测到的方法是对于用户查询LOG进行统计,提取用户查询次数多的那些同音词输出,如果是这样的话,上面的例子说明用户搜索"琉璃"次数比其它的都要高些,次之是"刘丽",再次是"刘莉",看来大家都喜欢查询自己或者认识的人的名字.

另外一个小问题:同音词词典包含2字词,3字词,那么是否包含4字词以及更长的词条?是否包含一字词?这里一字词好回答,不用测试也能知道肯定不包含,因为你输入一个字,谁知道是否是错误的呢?

反正只要是汉字就能在词表里面找到,所以没有判断依据.二字词是包含的,上面有例子,三字词也包含,比如查询"中城药"百度错误提示:"中成药",修改查询为"重城药",还是提示"中成药",再次修改查询"重城要",百度依然提示"中成药".那么4字词汇呢?

百度还是会给你提示的,下面是个例子:

输入:静华烟云提示京华烟云

输入:静话烟云提示京华烟云

输入:静话阎晕提示京华烟云

那么更长的词汇是否提示呢?也提示,比如我输入:"落花世界有风军",这个查询是什么意思,估计读过古诗的都知道,看看百度的提示"落花时节又逢君",这说明什么?说明同音词词典包含不同长度的同音词信息,另外也说明了百度的核心中文处理技术,也就是那个词典,还真挺大的.

但是,如果用户输入的查询由两个或者两个以上子字符串构成,那么百度的错误提示功能就罢工了,比如输入查询"哀体",百度提示"艾提挨踢",但是.输入为"我哀体",则没有任何错误提示.

还有一个比较重要的问题:如果汉字是多音字那么怎么处理?百度呢比较偷懒,它根本就没有对多音字做处理.我们来看看百度的一个标注拼音的错误,在看这个错误前先看看对于多音字百度是怎么提示错误的,我们输入查询"俱长",百度提示"剧场局长","俱长"的拼音有两个:"ju zhang/ju chang",可见如果是多音字则几种情况都提示.现在我们来看看错误的情况,我们输入查询"剧常",百度提示":剧场局长",提示为"剧场"当然好解释,因为是同音字,但是为什么"局长"也会被提示呢?这说明百度的同音字词典有错误,说明在"ju chang"这个词条里面包含"局长"这个错误的同音词.让我们顺藤摸瓜,这个错误又说明什么问题呢?

说明百度的同音词典是自动生成的,而且没有人工校对.还说明在自动生成同音词典的过程中,百度不是根据对一篇文章标注拼音然后在抽取词汇和对应的拼音信息获得的,而是完全按照某个词典的词条来标注音节的,

所以对于多音字造成的错误无法识别出来,如果是对篇章进行拼音标注,可能就不会出现这种很容易发现的错误标注.当然还有另外一种解释,就是"局长"是故意被百度提示出来可能的正确提示词汇,因为考虑到南方人"zh"和"ch"等前后鼻音分不清么,那么是这样的么?我们继续测试到底是何种情况.是百度有错误还是这是百度的先进的算法?

我们考虑词汇"长大",故意错误输入为"赃大",如果百度考虑到了前后鼻音的问题,那么应该会提示"长大",但是百度提示是"藏大".这说明什么?说明百度并没有考虑前后鼻音问题,根本就是系统错误.我们输入查询"悬赏",故意将之错误输入为"悬桑",没有错误提示,说明确实没有考虑这种情况.前鼻音没有考虑,

那么后鼻音考虑了么,我们输入":经常",故意改为后鼻音"经缠",百度提示为"

经产经忏",还是没有考虑后鼻音.这基本可以确定是百度系统的错误导致.

根据以上推导,我们可以得出如下结论:百度是将分词词典里面每个词条利用拼音标注程序标注成拼音,然后形成同音词词典,所以两个词典是同样大的,而且这个词典也随着分词词典的增长而在不断增长.至于标注过程中多音字百度没有考虑,如果是多音字就标注成多个发音组合,通过这种方式形成同音词词典.这样的同音词词典显然包含着很多错误.

最后一个问题:百度对于英文进行拼写检查么?让我们试试看,输入查询"china",不错,搜到不少结果,专注中文搜索的百度还能搜索到英文,真是意外的惊喜.变换一下查询"chine",会更加意外惊喜的给我们提示"china"吗?

百度提示的是:吃呢持呢,原来是不小心触发了百度的拼音搜索功能了.那

么拼音搜索和中文检查错误是否采用同一套同音词词典呢,让我们来实验一下,

搜索"rongji",

百度提示"榕基溶剂容积",OK,换个中文查询"容机",

百度提示"榕基溶剂容积",看来使用的是同一套同音词词典.也就是说百度

的中文纠错和拼音检索使用的机制相同,中文纠错多了一道拼音注音的过程而已.难道这就是传说中那个百度的"事实上是一个无比强大的拼音输入法"的拼音提

示功能么?

最后让我们总结归纳一下百度的拼写检查系统:

后台作业:(1)前面的文章我们说过,百度分词使用的词典至少包含两个词

典一个是普通词典,另外一个是专用词典(专名等),百度利用拼音标注程序依次

扫描所有词典中的每个词条,然后标注拼音,如果是多音字则把多个音都标上,比如"长大",会被标注为"zhang da/chang da"两个词条.

(2)通过标注完的词条,建立同音词词典,比如上面的"长大",会有两个词条:zhang daà长大",chang daà长大.

(3)利用用户查询LOG频率信息给予每个中文词条一个权重;

(4)OK,同音词词典建立完成了,当然随着分词词典的逐步扩大,同音词词典也跟着同步扩大;

拼写检查:

(1)用户输入查询,如果是多个子字符串,不作拼写检查;

(2)对于用户查询,先查分词词典,如果发现有这个单词词条,OK,不作拼写检查;

(3)如果发现词典里面不包含用户查询,启动拼写检查系统;首先利用拼音标注程序对用户输入进行拼音标注;

(4)对于标注好的拼音在同音词词典里面扫描,如果没有发现则不作任何提示;

(5)如果发现有词条,则按照顺序输出权重比较大的几个提示结果;

拼音提示:

(1)对于用户输入的拼音在同音词词典里面扫描,如果没有发现则不作任何提示;

(2)如果发现有词条,则按照顺序输出权重比较大的几个提示结果;

上面说过,经过分析得出百度的分词系统采用双向最大匹配分词,但是后来发现推理过程中存在一个漏洞,而且推导出来的百度分词算法步骤还是过于繁琐,所以进一步进行分析,看看是否前面的推导有错误.

那么以前的分析有什么漏洞呢?

我们推导百度分词有反向最大匹配的依据是百度将"北京华烟云"分词为北,京华烟云,从这里看好像采用了反向最大匹配,因为正向最大匹配的结果应该是北京,华,烟云,但是由此就推论说百度采用了双向最大匹配还是太仓促了,前面文章我们也讲过,百度有两个词典,一个普通词典,一个专有词典,而且是专有词典的词汇先切分,然后将剩余片断交给普通词典去切分.所以上面的"北京华烟云

"之所以被切分成北,京华烟云,另外一个可能是:京华烟云这个词汇是在专有词典里面存储的,所以先分析,这样得出"京华烟云",剩下"北",没什么好切分的,所以输出北,京华烟云.

这里只是假设,那么是否确实"京华烟云"在专有词典呢?我们再看一个例子"山东北京华烟云",百度切分的结果是山东,北,京华烟云,如果"京华烟云"在普通词典,如果是反向切分,那么结果应该是山,东北,京华烟云,如果是正向切分应该是山东,北京,华,烟云,无论如何都分不出山东,北,京华烟云.这说明什么?

说明"京华烟云"是在那个专有词典,所以先切分出"京华烟云",然后剩下的"山东北"交由普通词典切分,明显是正向最大匹配的结果输出山东,北.当然按照我们在第一篇文章的算法推导"山东北"的切分也会得出山东,北的结论,但是明显比正向最大匹配多几个判断步骤,既然效果一样,另外一个更加简洁的方法也能说得通,那当然选择简便的方法了.所以初步判断百度采取的是正向最大匹配.

我们继续测试采用何种分词算法,为了减少专有词典首先分词造成的影响,那么查询里面不能出现相对特殊的词汇,构筑查询"天才能量级",这里应该没有专有词典出现过的词汇,百度切分为天才,能量,级,看来是正向最大匹配的结果.另外,如果所有查询词汇都出现在专有词典,那么采取的是何种方法?这样首先就得保证词汇都出现在专有词典,这么保证这一点呢?

我们构造查询"铺陈晓东方",百度切分为铺,陈晓东,方,可以看出"陈晓东"是在专有词典的所以先切分出来.另外一个例子"山东京城",百度切分为山东,京城,说明"东京"是在普通词典的.OK,构造查询"陈晓东京华烟云",通过前面分析可以看出两个词汇都在专有词典里面,百度切分为陈晓东,京华烟云,说明对于专有词典词汇也是采取正向最大匹配或者双向最大匹配.那么使用反向最大匹配了吗?构造查询例子"陈晓东方不败",首先我们肯定"陈晓东"和"东方不败"都是在专有词典出现的,如果是正向切分,那么应该是陈晓东,方,不败或者陈晓东,方,不,败如果是反向切分则是陈,晓,东方不败,可以看出百度的切分是陈晓东,方,不败或者陈晓东,方,不,败,说明采用的是正向最大匹配.通过分析,百度的词典不包含"不败"这个单词,所以实际上百度的切分结果是陈晓东,方,不,败,很明显这和我们以前推导的算法是有矛盾的,所以以前的分析算法确实有问题,所以结论是百度采取的是正向最大匹配算法.

重新归纳一下百度的分词算法系统:首先用专有词典采用最大正向匹配分词,切分出部分结果,剩余没有切分交给普通词典,同样采取正向最大匹配分词,最后输出结果.

另外,GOOGLE也是采用正向最大匹配分词算法,不过好像没有那个专用词典,所以很多专名都被切碎了.

从这点讲,GOOGLE在中文词典构建上比百度差些,还需要加把子力气才行,

不过这也不是什么多难的事.

MSN空间完美搬家到新浪博客!

特别声明:

1:资料来源于互联网,版权归属原作者

2:资料内容属于网络意见,与本账号立场无关

3:如有侵权,请告知,立即删除。

中文分词切词超详细分析

前面我们讲个搜索引擎如何搜集网页,今天说下第二个过程网页预处理,其中中文分词就显得尤其重要,下面就详细讲解一下搜索引擎是怎么进行网页预处理的: 网页预处理的第一步就是为原始网页建立索引,有了索引就可以为搜索引擎提供网页快照功能;接下来针对索引网页库进行网页切分,将每一篇网页转化为一组词的集合;最后将网页到索引词的映射转化为索引词到网页的映射,形成倒排文件(包括倒排表和索引词表),同时将网页中包含的不重复的索引词汇聚成索引词表。如下图所示: 一个原始网页库由若干个记录组成,每个记录包括记录头部信息(HEAD)和数据(DATA),每个数据由网页头信息(header),网页内容信息(content)组成。索引网页库的任务就是完成给定一个URL,在原始网页库中定位到该URL所指向的记录。 如下图所示:

对索引网页库信息进行预处理包括网页分析和建立倒排文件索引两个部分。中文自动分词是网页分析的前提。文档由被称作特征项的索引词(词或者字)组成,网页分析是将一个文档表示为特征项的过程。在对中文文本进行自动分析前,先将整句切割成小的词汇单元,即中文分词(或中文切词)。切词软件中使用的基本词典包括词条及其对应词频。 自动分词的基本方法有两种:基于字符串匹配的分词方法和基于统计的分词方法。 1) 基于字符串匹配的分词方法 这种方法又称为机械分词方法,它是按照一定的策略将待分析的汉字串与一个充分大的词典中的词条进行匹配,若在词典中找到某个字符串,则匹配成功(识别出一个词)。 按照扫描方向的不同,串匹配分词方法可以分为正向匹配和逆向匹配;按照不同长度优先匹配的情况,可以分为最大或最长匹配,和最小或最短匹配;按照是否与词性标注过程相结合,又可以分为单纯分词方法和分词与标注相结合的一体化方法。常用的几种机械分词方法如下:

百度_baidu_搜索分词算法

Baidu查询分词算法 查询处理以及分词技术 如何设计一个高效的搜索引擎?我们可以以百度所采取的技术手段来探讨如何设计一个实用的搜索引擎.搜索引擎涉及到许多技术点,比如查询处理,排序算法,页面抓取算法,CACHE机制,ANTI-SPAM等等.这些技术细节,作为商业公司的搜索引擎服务提供商比如百度,GOOGLE等是不会公之于众的.我们可以将现有的搜索引擎看作一个黑盒,通过向黑盒提交输入,判断黑盒返回的输出大致判断黑盒里面不为人知的技术细节. 查询处理与分词是一个中文搜索引擎必不可少的工作,而百度作为一个典型的中文搜索引擎一直强调其”中文处理”方面具有其它搜索引擎所不具有的关键技术和优势.那么我们就来看看百度到底采用了哪些所谓的核心技术. 我们分两个部分来讲述:查询处理/中文分词. 一. 查询处理 用户向搜索引擎提交查询,搜索引擎一般在接受到用户查询后要做一些处理,然后在索引数据库里面提取相关的信息.那么百度在接受到用户查询后做了些什么工作呢? 1. 假设用户提交了不只一个查询串,比如”信息检索理论工具”.那么搜 索引擎首先做的是根据分隔符比如空格,标点符号,将查询串分割成若干子查询串,比如上面的查询就会被解析为:<信息检索,理论,工具>三个子字符串;这个道理 简单,我们接着往下看. 2. 假设提交的查询有重复的内容,搜索引擎怎么处理呢?比如查询”理论 工具理论”,百度是将重复的字符串当作只出现过一次,也就是处理成等价的”理论工具”,而GOOGLE显然是没有进行归并,而是将重复查询子串的权重增大进行处理.那么是如何得出这个结论的呢?我们可以将”理论工具”提交给百度,返回341,000篇文档,大致看看第一页的返回内容.OK.继续,我们提交查询”理论工具理论”,在看看返回结果,仍然是那么多返回文档,当然这个不能说明太多问题,那 看看第一页返回结果的排序,看出来了吗?顺序完全没有变化,而GOOGLE则排序有些变动,这说明百度是将重复的查询归并成一个处理的,而且字符串之间的先后出现顺序基本不予考虑(GOOGLE是考虑了这个顺序关系的). 3. 假设提交的中文查询包含英文单词,搜索引擎是怎么处理的?比如查询”电影BT下载”,百度的方法是将中文字符串中的英文当作一个整体保留,并以此为断点将中文切分开,这样上述的查询就切为<电影,BT,下载>,不论中间的英文是否一个字典里能查到的单词也好,还是随机的字符也好,都会当作一个整体来对待.

分词算法

中文分词 一、概述 什么是中文分词 众所周知,英文是以词为单位的,词和词之间是靠空格隔开,而中文是以字为单位,句子中所有的字连起来才能描述一个意思。例如,英文句子I am a student,用中文则为:“我是一个学生”。计算机可以很简单通过空格知道student是一个单词,但是不能很容易明白“学”、“生”两个字合起来才表示一个词。把中文的汉字序列切分成有意义的词,就是中文分词,有些人也称为切词。我是一个学生,分词的结果是:我是一个学生。 中文分词技术 中文分词技术属于自然语言处理技术范畴,对于一句话,人可以通过自己的知识来明白哪些是词,哪些不是词,但如何让计算机也能理解?其处理过程就是分词算法。 现有的分词算法可分为三大类:基于字符串匹配的分词方法、基于理解的分词方法和基于统计的分词方法。 1、基于字符串匹配的分词方法 这种方法又叫做机械分词方法,它是按照一定的策略将待分析的汉字串与一个“充分大的”机器词典中的词条进行配,若在词典中找到某个字符串,则匹配成功(识别出一个词)。按照扫描方向的不同,串匹配分词方法可以分为正向匹配和逆向匹配;按照不同长度优先匹配的情况,可以分为最大(最长)匹配和最小(最短)匹配;按照是否与词性标注过程相结合,又可以分为单纯分词方法和分词与标注相结合的一体化方法。常用的几种机械分词方法如下: 1)正向最大匹配法(由左到右的方向); 2)逆向最大匹配法(由右到左的方向); 3)最少切分(使每一句中切出的词数最小)。 还可以将上述各种方法相互组合,例如,可以将正向最大匹配方法和逆向最大匹配方法结合起来构成双向匹配法。由于汉语单字成词的特点,正向最小匹配和逆向最小匹配一般很少使用。一般说来,逆向匹配的切分精度略高于正向匹配,遇到的歧义现象也较少。统计结果表明,单纯使用正向最大匹配的错误率为1/169,单纯使用逆向最大匹配的错误率为1/245。但这种精度还远远不能满足实际的需要。实际使用的分词系统,都是把机械分词作为一种初分手段,还需通过利用各种其它的语言信息来进一步提高切分的准确率。 一种方法是改进扫描方式,称为特征扫描或标志切分,优先在待分析字符串中识别和切分出一些带有明显特征的词,以这些词作为断点,可将原字符串分为较小的串再来进机

分词技术研究报告-最新范文

分词技术研究报告 研究内容 目前,国内的每个行业、领域都在飞速发展,这中间产生了大量的中文信息资源,为了能够及时准确的获取最新的信息,中文搜索引擎是必然的产物。中文搜索引擎与西文搜索引擎在实现的机制和原理上大致雷同,但由于汉语本身的特点,必须引入对于中文语言的处理技术,而汉语自动分词技术就是其中很关键的部分。汉语自动分词到底对搜索引擎有多大影响?对于搜索引擎来说,最重要的并不是找到所有结果,最重要的是把最相关的结果排在最前面,这也称为相关度排序。中文分词的准确与否,常常直接影响到对搜索结果的相关度排序。分词准确性对搜索引擎来说十分重要,但如果分词速度太慢,即使准确性再高,对于搜索引擎来说也是不可用的,因为搜索引擎需要处理数以亿计的网页,如果分词耗用的时间过长,会严重影响搜索引擎内容更新的速度。因此对于搜索引擎来说,分词的准确性和速度,二者都需要达到很高的要求。 研究汉语自动分词算法,对中文搜索引擎的发展具有至关重要的意义。快速准确的汉语自动分词是高效中文搜索引擎的必要前提。本课题研究中文搜索引擎中汉语自动分词系统的设计与实现,从目前中文搜索引擎的发展现状出发,引出中文搜索引擎的关键技术------汉语自动分词系统的设计。首先研究和比较了几种典型的汉语自动分词词典机制,指出各词典机制的优缺点,然后分析和比较了几种主要的

汉语自动分词方法,阐述了各种分词方法的技术特点。针对课题的具体应用领域,提出改进词典的数据结构,根据汉语中二字词较多的特点,通过快速判断二字词来优化速度;分析中文搜索引擎下歧义处理和未登陆词处理的技术,提出了适合本课题的自动分词算法,并给出该系统的具体实现。最后对系统从分词速度和分词准确性方面进行了性能评价。本课题的研究将促进中文搜索引擎和汉语自动分词新的发展。 二、汉语自动分词系统的研究现状 1、几个早期的自动分词系统 自80年代初中文信息处理领域提出了自动分词以来,一些实用性的分词系统逐步得以开发,其中几个比较有代表性的自动分词系统在当时产生了较大的影响。 CDWS分词系统是我国第一个实用的自动分词系统,由北京航空航天大学计算机系于1983年设计实现,它采用的自动分词方法为最大匹配法,辅助以词尾字构词纠错技术。其分词速度为5-10字/秒,切分精度约为1/625。 ABWS是山西大学计算机系研制的自动分词系统,系统使用“两次扫描联想-回溯”方法,运用了较多的词法、句法等知识。其切分正确率为98.6%(不包括非常用、未登录的专用名词),运行速度为48词/分钟。 CASS是北京航空航天大学于1988年实现的分词系统。它使用正向增字最大匹配,运用知识库来处理歧义字段。其机械分词速度为

中文分词算法

1 最大匹配法(Forward Maximum Matching method, FMM法):选取包含6-8个汉字的符号串作为最大符号串,把最大符号串与词典中的单词条目相匹配,如果不能匹配,就削掉一个汉字继续匹配,直到在词典中找到相应的单词为止。匹配的方向是从右向左。 逆向最大匹配法(Backward Maximum Matching method, BMM法):匹配方向与MM法相反,是从左向右。实验表明:对于汉语来说,逆向最大匹配法比最大匹配法更有效。 给定串:我是中国人 从左往右最长匹配优先: 读入‘我’,一个字当然是一个词 再读入‘是’,查表找‘我是’,不在表中,则‘我’是一个独立的词,‘是’还要下一步判断 读入‘中’‘是中’肯定不在表内,那‘是’也是一个独立的词,‘中’还要下一步判断 读入‘果’,‘中国’在表内 再读入‘人’,’中国人‘也在表内, 此时全部读完,’中国人‘是一个次 结果就是:我是中国人 从右往左也类似 最近折腾毕业论文,搞得人没心情写blog了。于是觉得不如把毕业论文里的东西贴出来当blog算了。这里主要介绍了我自己的中文分词算法,我觉得它比现在开源代码比较多的中文匹配法要好多了。这里的内容没有任何背景知识啥的,毕竟论文里的背景知道我也是从网上粘贴的,呵呵!因此这篇文章的内容可能适合做搜索引擎的人。如果要了解中文分词算法在搜索引擎中的重要性,或者最大匹配法的思想与过程,请去网上搜吧,资料还是蛮多的。 1.1.1 最大匹配法分词的缺陷 尽管最大匹配法分词是常用的解决的方案,但是无疑它存在很多明显的缺陷,这些缺陷也限制了最大匹配法在大型搜索系统中的使用频率。最大匹配法的问题有以下几点: 一、长度限制 由于最大匹配法必须首先设定一个匹配词长的初始值,这个长度限制是最大匹配法在效率与词长之间的一种妥协。我们来看一下以下两种情况:

基于搜索统计技术中文分词算法的应用研究

基于搜索统计技术中文分词算法的应用研究1 付青华 绵阳师范学院计算机科学与工程系,四川绵阳(637002) E-mail:fuhuamy@https://www.doczj.com/doc/c416682578.html, 摘要:中文分词是影响中文搜索引擎性能的一个重要因素,而歧义识别则是中文分词中需要解决的一个问题,本文简要介绍了目前主要的几种中文分词算法,并提出了基于搜索统计技术的中文分词算法,通过实验证明,它具有良好的歧义识别能力。 关键词:搜索统计;中文分词 图书法分类号:TP391 1. 引言 随着网络信息量的丰富,用户面对成千上万的搜索结果,逐一浏览是不可能的。因此判断一个搜索引擎性能的好坏并不在于其能否找到所有的信息,而是在于其能否找到用户最需要的信息。对用户提交的搜索关键字进行分词,是影响搜索引擎性能的一个重要功能模块,中文分词把输入的计算机汉语语句自动切分为词的序列的过程[1]。中文分词对于中文页面检索有重要的意义,对它的评价不应依据人的主观看法,而应该考察其是否有助于提高信息检索的准确度[2]。中文分词是汉语自然语言处理存在一些难以解决的问题[3]主要体现在两方面:①对新词识别②歧义解决[4]。 面对着这些中文分词问题,目前的解决方法主要有:基于字符串匹配的分词方法、基于理解的分词方法和基于统计的分词方法。针对这三种方法各自的优缺点,本文基于搜索统计技术,提出了一种新的中文分词算法。经过实验证明,本算法具有比较良好的中文分词性能。 2. 研究现状 目前常用的中文分词方法主要有:基于字符串匹配的分词方法、基于语义的分词方法、基于统计原理的分词方法。 2.1基于字符串匹配的分词方法 又称为机械分词方法,其实现原理较为简单。主要步骤是将准备分析的汉字串与一个事先预备好的机器词库中的词进行字符串匹配,若在词典中找到某个字符串,则匹配成功,也即认为识别出一个词。 串匹配分词方法显然不具有良好的歧义识别能力,它基于机械的字符串匹配,不具有语义上的分析。虽然通过在串匹配算法过程中加入一些技术改进,如:正向匹配、逆向匹配、最大(最长)匹配、最小(最短)匹配等使得机械分词技术的性能有所提高,但其精度并不能完全满足实际的需要。实际使用中,机械分词只是作为一种初始划分的手段,还需通过利用各种其它的技术辅助,来进一步提高切分的准确率。 2.2基于语义的分词方法 该分词方法是让计算机了解句子语义,从而实现识别词、划分词的功能。它的基本方法是在分词的同时进行句法、语义分析,利用句法信息和语义信息来处理歧义现象。它一般由 1本课题得到绵阳师范学院重点实验项目的资助。

搜索引擎优化百度分词算法分析

搜索引擎优化百度分词算法分析查询处理以及分词技术 随着搜索经济的崛起,人们开始越加关注全球各大搜索引擎的性能、技术和日流量。作为企业,会根据搜索引擎的知名度以及日流量来选择是否要投放广告等; 作为普通网民,会根据搜索引擎的性能和技术来选择自己喜欢的引擎查找资料;作为技术人员,会把有代表性的搜索引擎作为研究对象。搜索引擎经济的崛起,又一次向人们证明了网络所蕴藏的巨大商机。网络离开了搜索将只剩下空洞杂乱的数据,以及大量等待去费力挖掘的金矿。 但是,如何设计一个高效的搜索引擎?我们可以以百度所采取的技术手段来探讨如何设计一个实用的搜索引擎。搜索引擎涉及到许多技术点,比如查询处理,排序算法,页面抓取算法,CACHE机制,ANTI-SPAM等等。这些技术细节,作为商业公司的搜索引擎服务提供商比如百度,GOOGLE等是不会公之于众的。我们可以将现有的搜索引擎看作一个黑盒,通过向黑盒提交输入,判断黑盒返回的输出大致判断黑盒里面不为人知的技术细节。 查询处理与分词是一个中文搜索引擎必不可少的工作,而百度作为一个典型的中文搜索引擎一直强调其"中文处理"方面具有其它搜索引擎所不具有的关键技术和优势。那么我们就来看看百度到底采用了哪些所谓的核心技术。 我们分两个部分来讲述:查询处理/中文分词。 一、查询处理 用户向搜索引擎提交查询,搜索引擎一般在接受到用户查询后要做一些处理,然后在索引数据库里面提取相关的信息。那么百度在接受到用户查询后做了些什么工作呢? 1、假设用户提交了不只一个查询串,比如"信息检索理论工具"。

那么搜索引擎首先做的是根据分隔符比如空格,标点符号,将查询串分割成若干子查询串,比如上面的查询就会被解析为:信息检索,理论,工具三个子字符串;这个道理简单,我们接着往下看。 2、假设提交的查询有重复的内容,搜索引擎怎么处理呢?比如查询"理论工具理论",百度是将重复的字符串当作只出现过一次,也就是处理成等价的"理论工具",而GOOGLE显然是没有进行归并,而是将重复查询子串的权重增大进行处理。那么是如何得出这个结论的呢?我们可以将"理论工具"提交给百度,返回341,000篇文档,大致看看第一页的返回内容。 OK。继续,我们提交查询"理论工具理论",在看看返回结果,仍然是那么多返回文档,当然这个不能说明太多问题,那看看第一页返回结果的排序,看出来了吗?顺序完全没有变化,而GOOGLE则排序有些变动,这说明百度是将重复的查询归并成一个处理的,而且字符串之间的先后出现顺序基本不予考虑(GOOGLE是考虑了这个顺序关系的)。 3、假设提交的中文查询包含英文单词,搜索引擎是怎么处理的?比如查询"电影BT下载",百度的方法是将中文字符串中的英文当作一个整体保留,并以此为断点将中文切分开,这样上述的查询就切为电影,BT,下载,不论中间的英文是否一个字典里能查到的单词也好,还是随机的字符也好,都会当作一个整体来对待。至于为什么,你用查询"电影dfdfdf下载"看看结果就知道了。当然如果查询中包含数字,也是如此办理。 到目前为止,一切很简单,也很清楚,百度怎么处理用户查询的呢?归纳如下:首先根据分割符号将查询分开,然后看看是否有重复的字符串,如果有,就抛弃多余的,只保留一个,接着判断是否有英文或者数字,如果有的话,把英文或者数字当作一个整体保留并把前后的中文切开。 接着该干什么呢?该考虑分词的问题了。 二、中文分词

相关主题
文本预览
相关文档 最新文档