(2)基于理解的分词方法
这种分词方法是通过让计算机模拟人对句子的理解,达到识别词的效果。其基本思想就是在分词的同时进行句法、语义分析,利用句法信息和语义信息来处理歧义现象。它通常包括三个部分:分词子系统、句法语义子系统和总控部分。在总控部分的协调下,分词子系统可以获得有关词、句子等的句法和语义信息来对分词歧义进行判断,即它模拟了人对句子的理解过程。这种分词方法需要使用大量的语言知识和信息。由于汉语语言知识的笼统、复杂性,难以将各种语言信息组织成机器可直接读取的形式,因此,目前基于理解的分词系统还处在试验阶段。
(3)基于统计的分词方法
从形式上看,词是稳定的字的组合,因此在上下文中,相邻的字同时出现的次数越多,就越有可能构成一个词。因此字与字相邻共现的频率或概率能够较好地反映成词的可信度。可以对语句中相邻共现的各个字的组合的频度进行统计,计算它们的互现信息。定义两个字的互现信息,计算两个汉字X、Y的相邻共现概率。互现信息体现了汉字之间结合关系的紧密程度。当紧密程度高于某一个阈值时,便可认为此字组可能构成了一个词。这种方法只需对语料中的字组频度进行统计,不需要切分词典,因而又称为无词典分词法或统计取词方法。
但这种方法也有一定的局限性,会经常抽出一些共现频度高、但并不是词的常用字组,例如,“这一”、“之一”、“有的”、“我的”、“许多的”等,并且对常用词的识别精度差,时空开销大。
实际应用的统计分词系统都要使用一部基本的分词词典(常用词词典)进行串匹配分词,同时使用统计方法识别一些新的词,即将串频统计和串匹配结合起来,既发挥匹配分词切分速度快、效率高的特点,又利用了无词典分词结合上下文识别生词、自动消除歧义的优点。
到底哪种分词算法的准确度更高,目前并无定论。对于任何一个成熟的分词系统来说,不可能单独依靠某一种算法来实现,都需要综合不同的算法。笔者了解,海量科技的分词算法就采用“复方分词法”,所谓复方,相当于用中药中的复方概念,即用不同的药才综合起来去医治疾病,同样,对于中文词的识别,需要多种算法来处理不同的问题。
2.分词中的难题
有了成熟的分词算法,是否就能容易的解决中文分词的问题呢?事实远非如此。中文是一种十分复杂的语言,让计算机理解中文语言更是困难。在中文分词过程中,有两大难题一直没有完全突破。
(1)歧义识别
歧义是指同样的一句话,可能有两种或者更多的切分方法。例如:表面的,因为“表面”和“面的”都是词,那么这个短语就可以分成“表面的”和“表面的”。这种现象称为交叉歧义。
类似的这种交叉歧义现象十分常见,比如:“化妆和服装”可以分成“化妆和服装”或者“化妆和服装”。由于没有人的知识去理解,计算机很难知道到底哪个方案正确。
交叉歧义相对组合歧义来说是还比较容易处理,组合歧义就必须根据整个句子来判断了。
例如,在句子“这个门把手坏了”中,“把手”是个词,但在句子“请把手拿开”中,“把手”就不是一个词;在句子“将军任命了一名中将”中,“中将”是个词,但在句子“产量三年中将增长两倍”中,“中将”就不再是词。这些词计算机又如何去识别呢?
如果交叉歧义和组合歧义计算机都能解决的话,在歧义中还有一个难题,是真歧义。真歧义意思是给出一句话,由人去判断也不知道哪个应该是词、哪个应该不是词。例如:“乒乓球拍卖完了”,可以切分成“乒乓球拍,卖完了”、也可切分成“乒乓球,拍卖完了”,如果没有上下文其他的句子,恐怕谁也不知道“拍卖”在这里算不算一个词。
(2)新词识别
新词,专业术语称为未登录词。也就是那些在字典中都没有收录过,但又确实能称为词的那些词。最典型的是人名,人可以很容易理解句子“于天恩去东方了”中,“于天恩”是个词,因为是一个人的名字,但要是让计算机去识别就困难了。如果把“于天恩”作为一个词收录到字典中去,全世界有那么多名字,而且每时每刻都有新增的人名,收录这些人名本身就是一项巨大的工程。即使这项工作可以完成,还是会存在问题,例如:在句子“有感于天恩浩荡”中,“于天恩”还能不能算词?
新词中除了人名以外,还有机构名、地名、产品名、商标名、简称、省略语等都是很难处理的问题,而且这些又正好是人们经常使用的词,因此对于搜索引擎来说,分词系统中的新词识别十分重要。目前新词识别准确率已经成为评价一个分词系统好坏的重要标志之一。
3.中文分词的应用
目前在自然语言处理技术中,中文处理技术比西文处理技术要落后很大一段距离,许多西文的处理方法中文不能直接采用,就是因为中文必须有分词这道工序。中文分词是其他中文信息处理的基础,搜索引擎只是中文分词的一个应用。其他的比如机器翻译(Machine Translation,MT)、语音合成、自动分类、自动摘要、自动校对,等等,都需要用到分词。因为中文需要分词,可能会影响一些研究,但同时也为一些企业带来机会,因为国外的计算机处理技术要想进入中国市场,首先也是要解决中文分词问题。在中文研究方面,相比外国人来说,中国人有十分明显的优势。
分词准确性对搜索引擎来说十分重要,但如果分词速度太慢,即使准确性再高,对于搜索引擎来说也是不可用的,因为搜索引擎需要处理数以亿计的网页,如果分词耗用的时间过长,会严重影响搜索引擎内容更新的速度。因此对于搜索引擎来说,分词的准确性和速度都需要达到很高的要求。
2.3.6搜索结果的显示
1.显示搜索结果的算法
解决了抓取数据、存储副本和建立索引的问题之后,搜索引擎就大体成型了。剩下的就是接受用户的检索条件并进行处理,将搜索结果显示出来。
处理检索条件的基本过程就是从倒排索引中读取关键词对应的记录。至于显示搜索结果的过程,并没有一个统一的算法。可以依据信息发布的时间顺序逆向排列,也可以根据信息被搜索引擎收录的先后顺序,或者先计算每条记录中关键词出现的频率,然后按照出现频率实现排序等。
2.Page Rank算法
如果读者自己去开发一套搜索引擎,会如何设定搜索结果的排序规则呢?笔者假设:在建立索引的过程中,使用某种算法对网页计算权重,然后按照这个权重去确定结果的显示顺序。
主流的搜索引擎都是采用这样的思路,只是方法略有不同。在这些算法中,最出名的当然是Google采用的网页分级(Page Rank)了,这里对它进行简要的介绍。
Google让绝大部分使用搜索的用户在搜索结果的第一页找到他想要的结果,这源于它的搜索结果排序算法“网页分级”。
网页分级的原理类似于科技论文中的引用机制:谁的论文被引用次数多,谁就是权威。说得更白话一点,在互联网上,链接就相当于“引用”,在B网页中链接了A,相当于B在谈话时提到了A,如果在C、D、E、F中都链接了A,那么说明A网页是最重要的,A网页的网页分级值也就最高。
具体来讲,网页分级算法有下面三个特性:
链接指向A的网页越多,A的级别越高;
链接指向A的网页,其网页级别越高,A的级别也越高;
链接指向A的网页,其链出的个数越多,A的级别越低。
3.有待解决的问题
需要注意的是,网页分级虽然是目前的先进算法,但它并没有解决搜索词和页面的相关性计算问题。仅仅通过链接、字体、位置等表面特征,不能真正判断搜索词和文章的相关性,更何况许多时候这些特征不会都同时存在。这也是许多对搜索引擎作弊(或者说优化)方法能有效的原因。另外,有些文章中没有出现搜索词,但说的就是与搜索词十分相关的内容,搜索引擎就无法搜索到该网页。
与分词类似,语义分析是关键。
2.4开源搜索引擎
搜索引擎技术不断发展,世界上已经有了很多先进的搜索引擎。但有些时候还是需要建立自己的搜索引擎。大体有以下几个原因。
①当我们需要给自己的论坛、社区或研究所建立一个搜索引擎来检索资料时,该怎么办?
使用现成的搜索引擎,往往达不到要求。让搜索引擎公司来做,需要花钱,而且做的效果也难以保证。(比如:分词的处理,专门词库的建立。)②一些科研机构的资料只能内部查看,对外保密。这时,就需要自己去研发搜索引擎来解决信息检索的问题。
③使用商业搜索引擎,即便搜索效果很好,但是很难知道在单击“搜索”按钮的瞬间是否做了一些自己并不想做的事情,比如:给某个陌生人发送了一个特洛伊木马。因为不知道源代码是否安全。诚然,没有绝对的安全,但小心使得万年船,多加小心不是坏事。
开发搜索引擎耗费大量的时间和精力,所以有一些人开始研发独立的搜索引擎模块,并将其源代码开放,这样就可以给其他需要建立自己的搜索引擎的人提供一个基础平台。在这些开源搜索引擎模块的基础上做开发,就可以节约非常多的时间和精力,大大减少了开发成本,缩短了产品投入市场的周期。而且,由于这些平台是开源的,用户可以亲自检查每一行代码,修改算法和显示格式等内容,这样的搜索引擎相当于完全是自己开发的,用起来放心。
不仅是开发自己的搜索引擎,对于想要深入理解搜索引擎的人来说,能够看一看开源搜索引擎的代码也是大有裨益的。
基于此,让我们一起感谢开源搜索引擎的创造者们!向他们致以真诚的敬意!
小结
本章介绍了搜索引擎的原理和相关技术,讲解了网络搜索引擎的全貌。涉及的名词和概念,读者应该了解,这在读者阅读其他相关的书籍时会有帮助。
思考与练习
1.中文分词有哪些基本问题要考虑?
2.什么是倒排索引?