Baidu分词算法分析II

机器学习 2660 Views

大家好,这里是“黑龙江大学自然语言处理实验室”。我们将成为大家了解科研,了解自然语言处理的一个很好的途径。如果大家有什么意见或者看法,都可以和我留言的。欢迎大家提问,多多互动~

上周小叶带领大家了解了百度对于中文分词的方法——双向最大匹配算法,今天我们来看一下这种方法有什么残留问题呢?

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

我们再来看一个例子。提交查询“遥远古古巴比伦”,这个查询被百度切分为《遥远,古古,巴比伦》,说明词典里面有”巴比伦”,但是是否有”古巴比伦”这个词汇不确定,此时看不出是正向切分还是反向切分得出的结果,换查询为“遥远古巴比伦”,此时被切分为“遥远/古巴比伦”,这说明词典里面有”古巴比伦”这个词汇,这说明了“遥远古古巴比伦”是正向最大匹配的结果。那为什么“遥远古古巴比伦”不会被反向切分为”遥/远古/古巴比伦”呢,百度的可能选择是这种情况下选择单字少的那组切分结果。

当然还可以继续追问:如果切分后单字也一样多,那怎么办?

最后看一个例子,查询“王强大小:”,百度将其切分为“王/强大/小”,是正向切分的结果,如果是反向的会被切分为“王/强/大小”,这说明有歧义而且单字也相同则选择正向切分结果。

OK,看到这里可能头已经有些晕了,最后总结一下百度的分词算法,当然里面还是有猜测的成分,算法如下:

首先查询专用词典(人名,部分地名等),将专有名称切出,剩下的部分采取双向分词策略,如果两者切分结果相同,说明没有歧义,直接输出分词结果。如果不一致,则输出最短路径的那个结果,如果长度相同,则选择单字词少的那一组切分结果。如果单字也相同,则选择正向分词结果。

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

查询处理

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

假设用户提交了不只一个查询串

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

假设提交的查询有重复的内容,搜索引擎怎么处理呢?

比如查询“理论 工具 理论”,百度是将重复的字符串当作只出现过一次,也就是处理成等价的“理论 工具”,而GOOGLE显然是没有进行归并,而是将重复查询子串的权重增大进行处理。那么是如何得出这个结论的呢?我们可以将“理论 工具”提交给百度,返回341,000篇文档,大致看看第一页的返回内容。OK。继续,我们提交查询“理论 工具 理论”,在看看返回结果,仍然是那么多返回文档,当然这个不能说明太多问题,那看看第一页返回结果的排序,看出来了吗?顺序完全没有变化,而GOOGLE 则排序有些变动,这说明百度是将重复的查询归并成一个处理的,而且字符串之间的先后出现顺序基本不予考虑(GOOGLE是考虑了这个顺序关系的)。  

假设提交的中文查询包含英文单词,搜索引擎是怎么处理的

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

到目前为止,一切很简单,也很清楚,百度怎么处理用户查询的呢?

归纳如下:首先根据分割符号将查询分开,然后看看是否有重复的字符串,如果有,就抛弃多余的,只保留一个,接着判断是否有英文或者数字,如果有的话,把英文或者数字当作一个整体保留并把前后的中文切开。

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

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

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

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

那么百度是如何做的呢?

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

那么百度是怎么提示正确词汇的呢?

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

今天的内容到此就结束了大家对百度的检查系统是否还有疑问呢?百度这种检查机制是否就很完整呢?下周小叶继续带领大家探索百度的分词算法。

责任编辑 薛鑫

您可以查找公众号:hlju_nlp扫描如下二维码,即可关注“黑龙江大学自然语言处理实验室”:

如未说明则本站原创,转载请注明出处:NULL » Baidu分词算法分析II