[code.search]搜索引擎是如何工作的

原英文地址:http://www.infotoday.com/searcher/may01/liddy.htm

搜索引擎是信息检索(IR)系统的通俗叫法。虽然研究和开发人员看待IR系统的眼光更宽一些,但用户想到它们更多的是根据他们期望系统能做的功能 — 即搜索网络,或者企业内部网,或者一个数据库。事实上用户会更喜欢一个发现引擎,而不仅仅是一个搜索引擎。

搜索引擎匹配查询到它们创建的索引上。这个索引包含每个文档的单词,和能指向文儿当地址的指针。这被叫做倒排索引文件【 inverted file】。一个搜索引擎或者IR系统包括四个基本的模块:

  1. 一个文档处理器
  2. 一个查询处理器
  3. 一个搜索和匹配功能
  4. 一个排名能力

虽然用户关注的点是“搜索”,但是搜索和匹配功能仅仅是这四个模块里的其中之一。这四个模块中的每一个都可能导致用户在使用搜索引擎时获得预期或意外的结果。

文档处理器

文档处理器准备,处理和输入用户搜索的文档,页面或站点。文档处理器执行以下部分或全部步骤:

  1. 将文档流规范化为预定义格式。
  2. 将文档流分解为所需的可检索单元。
  3. 隔离和元标记每个子文档块。
  4. 标识文档中潜在的可索引元素。
  5. 删除停用词。
  6. 词根化检索词。
  7. 提取索引条目。
  8. 计算权重。
  9. 创建并更新搜索引擎搜索的主要倒排索引文件,以便将查询与文档进行匹配。

第1-3步:预处理。虽然是必不可少的步骤并且可能对影响搜索结果很重要,但前三个步骤只是简单地标准化了各种来源或者处理各种网站时遇到的多种文件格式。这些步骤用于将所有数据合并为一个一致的数据结构,所有下游进程都可以处理。对于格式良好,格式一致的需求与文档处理的后续步骤的复杂性是成重要正比的。第二步很重要,因为存储在倒排索引文件中的指针将使系统能够检索各种大小的单元 - 站点,页面,文档,章节,段落或句子。
第4步:确定要索引的元素。识别文档中潜在的可索引元素会显著的影响引擎将要搜索的文档表示的性质和质量。在设计系统时,我们必须定义“检索词【term】”一词。它是空格或标点符号之间的字母数字字符吗?如果是这样,那么非成分短语怎么办(单词中没有表达短语含义的短语,如“skunk works”或“hot dog”)【译者注:skunk works指特殊团队,hot dog指热狗(面包夹熏红肠)】,多字专有名称,或连字符或撇号等词间符号,可以表示 "small business men"与small-business men之间的区别。【译者注:small business men的含义为身材矮小的生意人,mall-business men的含义为小生意人 】。每个搜索引擎都依赖于其文档处理器必须执行的一组规则来确定“分词器【tokenizer】”将采取的操作。分词器【tokenizer】即用于定义适合索引的检索词的软件。
第5步:删除停用词。此步骤通过消除进一步处理以及潜在的匹配(那些对于查找有用文档以及响应客户查询没什么价值的检索词),来帮助节省系统资源。当内存变得更加便宜且系统速度变得更快,这个比起现在可能没多少价值了,但由于停用词可能占文档中的文本词高达40%,因此它仍具有一定的意义。停用词列表通常由已知传达一些实质意义的词类组成,例如冠词(a,the),连词(and, but),感叹词(oh, but),介词(in, over),代词(he, it)和“将来”动词的形式(is, are)。为了删除停用词,算法将文档中的索引词候选词与停用词列表进行比较,并从搜索索引中删除这些词语。
第6步:检索词词根化(词干提取)。词干提取可以在一层又一层的处理中递归地删除单词后缀。这个过程有两个目标。在效率方面,词干提取减少了索引中唯一单词的数量,从而减少了索引所需的存储空间并加快了搜索过程。在有效性方面,词干提取通过将所有形式的单词缩减为基础词或词干形式来改善检索。
例如,如果用户要查询analyze,他们可能还需要包含analysisanalyzinganalyzeranalyzes和analyzed的文档。因此,文档处理器会根据文档术语进行分析,以便包含各种形式的analy-的文档会被同等概率的重新取回。如果引擎仅单独索引变量形式并且要求用户输入全部检索词,则不会发生这种情况。当然,词根化确实有缺点。它可能会对所有形式的词干匹配的精度产生负面影响,当现实中,用户希望查询结果仅仅来自匹配查询中实际使用的单词时。
系统可以实现强干扰算法或弱干扰算法。强干扰算法将去除构形后缀(-s,-es,-ed)和派生后缀(-able,-aciousness,-ability),弱干扰算法只会去除构形后缀(-s, -es,-ed)。
第7步:提取索引条目。完成步骤1到6后,文档处理器从原始文档中提取剩余的条目。例如,以下段落是要发送到搜索引擎进行处理的全文:

Milosevic's comments, carried by the official news agency Tanjug, cast doubt over the governments at the talks, which the international community has called to try to prevent an all-out war in the Serbian province. "President Milosevic said it was well known that Serbia and Yugoslavia were firmly committed to resolving problems in Kosovo, which is an integral part of Serbia, peacefully in Serbia with the participation of the representatives of all ethnic communities," Tanjug said. Milosevic was speaking during a meeting with British Foreign Secretary Robin Cook, who delivered an ultimatum to attend negotiations in a week's time on an autonomy proposal for Kosovo with ethnic Albanian leaders from the province. Cook earlier told a conference that Milosevic had agreed to study the proposal.

步骤1到6为了搜索将此文本减少到以下内容:

Milosevic comm carri offic new agen Tanjug cast doubt govern talk interna commun call try prevent all-out war Serb province President Milosevic said well known Serbia Yugoslavia firm commit resolv problem Kosovo integr part Serbia peace Serbia particip representa ethnic commun Tanjug said Milosevic speak meeti British Foreign Secretary Robin Cook deliver ultimat attend negoti week time autonomy propos Kosovo ethnic Alban lead province Cook earl told conference Milosevic agree study propos.

然后插入步骤7,并将输出存储在倒排索引文件中,该文件列出了索引条目以及它们的位置和出现频率。但是,索引条目的具体性质将根据步骤4中确定“要索引的元素”而有所不同。更复杂的文档处理器将具有短语识别器,以及命名实体识别器和分类器,确保像Milosevic【米洛舍维奇(人名)】这样的索引条目被标记为人,并将诸如Yugoslavia【南斯拉夫】和Serbia【塞尔维亚】等条目标记为国家。
第8步:检索词权重分配。权重分配给索引文件中的检索词。最简单的搜索引擎只分配二进制权重:1表示存在,0表示没有。搜索引擎越复杂,加权方案就越复杂。测量文档中检索词出现的频率会产生更复杂的加权,频率的长度归一化更复杂。多年来在信息检索研究方面的丰富经验清楚地表明,最佳权重来自于使用“tf / idf”。该算法测量文档中每个检索词的出现频率。 然后,它将该频率与整个数据库中出现的频率进行比较。

并非所有检索词都是好的“鉴别器” — 也就是说,所有检索词都不会很好地从另一个文档中挑出一个文档。一个简单的例子就是“the”这个词。这个词出现在太多的文件中,以帮助区分彼此。一个不太明显的例子是“antibiotic【抗生素】”这个词。 在体育数据库中,我们将每个文档与整个数据库进行较,“antibiotic【抗生素】”一词可能是文件中的一个很好的鉴别者,因此会被赋予很高的权重。相反,在专门用于健康或医学的数据库中,“antibiotic【抗生素】”可能是一种差的鉴别因素,因为它经常出现。TF / IDF加权方案为那些真正区分一个文档与其他文档的检索词分配了更高的权重。

第9步:创建索引。索引或反向索引文件是存储索引信息的内部数据结构,将被每个查询搜索到。反向索引文件的范围从一组索引的文档/页面中的每个字母数字序列的简单列表,以及序列发生的文档的整体识别号,更复杂的条目列表,tf / idf权重,以及指向术语每个文档内部位置的指针。索引中的信息越完整,搜索结果就越好。

查询处理器

查询处理有七个可能的步骤,尽管系统可以缩短这些步骤并在处理期间将查询匹配到多个位置中的任何一处反向索引文件。文档处理与查询处理共享许多步骤。更多的步骤和更多的文档使得该过程在计算资源和响应性方面的处理更加昂贵。但是,等待结果的时间越长,结果的质量就越高。因此,搜索系统设计者必须选择对用户最重要的东西 - 时间或质量。公开可用的搜索引擎通常更多选择的时间而不是质量,因为有太多要搜索的文档了。

查询处理中的步骤如下(使用选项停止处理并开始匹配,表示为“Matcher【匹配程序】”):

  • 标记【Tokenize】查询检索词。
    识别查询检索词与特殊运算符。
    ————————> Matcher
  • 删除停用词。
  • 词根化单词。
  • 创建查询表示






    ————————> Matcher
  • 展开查询检索词
  • 计算权重。






    ————————> Matcher

第1步:标记【Tokenizing】。用户输入查询后立即搜索引擎 — 无论是基于关键字的系统还是完整的自然语言处理(NLP)系统 — 必须将查询流标记化,即,将其分解为可理解的部分。通常,token被定义为在空格和/或标点符号之间出现的字母数字字符串。

第2步:解析。由于用户可以在其查询中使用特殊运算符,包括布尔运算符,邻接运算符或邻近运算符,因此系统需要首先将查询解析为查询项和运算符。这些运算符可以以保留标点符号(例如,引号)或专用格式的保留术语(例如,AND,OR)的形式出现。在NLP系统的情况下,无论如何表达运算符(例如,介词,连词,排序),查询处理器将隐式地识别所使用的语言中的运算符。

此时,搜索引擎可以获取查询术语列表并针对倒排索引文件搜索它们。 事实上,这是大多数公开搜索引擎执行搜索的点。

第3和4步:停止列表和词干提取【 Stop list and stemming】。一些搜索引擎会更进一步,停止列表并阻止查询,类似于上面文档处理器部分中描述的过程。停止列表还可能包含常见查询短语中的单词,例如“我想了解有关的信息【I'd like information about】”。然而,由于大多数公开可用的搜索引擎鼓励非常短的查询,如所提供的查询窗口的大小所示,引擎可能会放弃这两个步骤。

第5步:创建查询。每个特定搜索引擎如何创建查询表示取决于系统如何进行匹配。 如果使用基于统计的匹配器,则查询必须与系统中文档的统计表示相匹配。好的统计查询应该包含许多同义词和其他查询词,以便创建完整的表示。如果使用布尔匹配器,则系统必须创建由AND,OR或NOT连接的术语的逻辑集。
NLP系统将识别单个术语,短语和命名实体。 如果它使用任何布尔逻辑,它还将识别步骤2中的逻辑运算符,并创建包含AND'd,OR'd或NOT'd的术语逻辑集的表示。
此时,搜索引擎可以采用查询表示并针对反向索引文件执行搜索。 更高级的搜索引擎可能需要两个步骤。

第6步:查询扩展。 由于搜索引擎的用户通常只在查询中包含他们信息需求的单个陈述,因此很可能他们需要的信息可以使用同义词来表达,而不是搜索引擎搜索的文档中的确切查询词。因此,更复杂的系统可能会将查询扩展为所有可能的同义词,甚至可能的更广和更窄的术语。
这个过程接近搜索中介在早期商业搜索系统中为最终用户所做的事情。当时,中介可能使用了将主题描述符分配给文档的索引器所使用的相同受控词汇表或词库。今天,WordNet等资源通常是可用的,或专门的扩展设施可以采取初始查询并通过添加相关词汇来扩大它。

第7步:查询检索词【term】加权(假设多个查询检索词)。查询处理的最后一步涉及计算查询中查询词的权重。有时,用户通过指示每个查询词的权重或者简单地查询中哪个查询词来控制该步骤,或查询中的概念最重要,并且必须出现在每个检索到的文档中以确保相关性。
将权重留给用户并不常见,因为研究表明用户并不是特别擅长确定术语在查询中的相对重要性。由于几个原因,他们不能做出这个决定。 首先,他们不知道数据库中还有什么,并且通过与整个数据库进行比较来对文档术语进行加权。其次,大多数用户寻求有关不熟悉主题的信息,因此他们可能不知道正确的术语。
很少有搜索引擎实现基于系统的查询加权,但有些搜索引擎通过将查询中的第一项视为具有更高的重要性来进行隐式加权。 引擎使用此信息向用户提供文档/页面列表。
在最后一步之后,针对文档的反向索引文件搜索扩展的加权查询。

搜索和匹配功能

系统如何执行其搜索和匹配功能有所不同,信息检索的理论模型是系统设计理念的基础。由于这些模型之间的区别远远超出了本文的目标,因此我们将在以下搜索和匹配功能的描述中进行一些广泛的概括。那些对进一步细节感兴趣的人可以参考R. Baeza-Yates和B. Ribeiro-Neto关于IR的卓越的教科书(Modern Information Retrieval,Addison-Wesley,1999)。

在倒排索引文件中搜索满足查询要求的文档,简称为“匹配【matching】”,通常是标准二进制搜索,无论搜索是在查询处理的前两个,五个还是所有七个步骤之后结束。虽然简单的,未加权的非布尔查询匹配所需的计算处理比加权内的基于NLP的查询模型简单得多,布尔模型,它也遵循文档表示更简单,查询表示和匹配算法,结果相关性较小,,除了非常简单的查询,例如寻求最普遍已知信息的单字,非模糊查询。

在某种程度上确定了哪个文档或页面子集符合查询要求,基于系统使用的评分算法,在查询和每个文档/页面之间计算相似性得分。评分算法排名基于查询词的存在/不存在,检索词频率,tf / idf,布尔逻辑实现或查询词权重。
一些搜索引擎使用的评分算法不是基于文档内容的,而是基于文件之间的关系或过去的文件/页面的检索历史。

在计算文档子集中的每个文档的相似性之后,系统向用户呈现有序列表。文件排序的复杂程度又取决于系统使用的模型,以及文档和查询加权机制的丰富性。例如,搜索引擎,只需要查询的字母数字在任何地方出现的地方,在任何顺序中,在文档中将产生与搜索引擎非常不同的排名,搜索引擎在语言上纠正文档和查询表示的措辞,并使用经过验证的tf / idf加权方案。

但是搜索引擎决定排名,排名结果列表发送给用户,然后用户只需单击并按照系统的内部指针指向所选文档/页面。

更复杂的系统将在此阶段进一步发展,并允许用户提供一些相关性反馈或根据他们看到的结果修改他们的查询。如果其中任何一个可用,然后,系统将调整其查询结果以反映此增值反馈,并使用改进的查询重新运行搜索,使用改进的查询来生成一组新文档或从初始搜索中对文档进行简单的重新排序。

哪些文档特征与查询匹配良好

我们已经讨论了搜索引擎的工作原理,但是查询的哪些功能可以实现良好的匹配?让我们看一下关键特性,并考虑它们在帮助检索文档/页面的良好表现方面的一些优点和缺点。

  • 检索词频率:查询检索词在文档中出现的频率是确定文档与查询相关性的最明显方法之一。虽然大多数情况下是这样的,有几种情况可以破坏这个前提。首先,许多单词具有多重含义 - 它们是多义的。例如这样的词"pool"或者”fire“。呈现给用户的许多不相关文档来自匹配正确的单词,但具有错误的含义。

此外,在特定域中的文档集合中,例如教育【education】,诸如“教育【education】”或“教学【teaching】”之类的常见查询术语是如此常见并且如此频繁地发生,引擎区分集合中相关与不相关的能力会急剧下降。不使用tf / idf加权算法的搜索引擎不会对过于频繁的术语进行适当的减重,也没有将更高的权重分配给适当的区分(和不常发生的)检索词,例如“早期童年【early-childhood】”。

  • 检索词的位置:许多搜索引擎优先考虑标题或引导段落或文档元数据中的单词。一些研究表明,一个术语出现在文档或页面上的位置 - 表明它对文件的重要性。因此,在与查询检索词匹配的文档或页面的标题中出现的检索词的权重通常比在文档正文中出现的检索词更重要。类似地,在章节标题或文档的第一段中出现的检索词更有可能是相关的。

链接分析:基于网络的搜索引擎为页面加权和排名引入了一个截然不同的功能。链接分析有点像书目引用实践,例如Science Citation Index使用的那些。链接分析基于每个页面的良好连接,如Hubs和Authorities所定义的那样,Hub文档链接到大量其他页面(out-links),Authority文档是许多其他页面引用的文档,或者具有大量“in-links” (J. Kleinberg, "Authoritative Sources in a Hyperlinked Environment," Proceedings of the 9th ACM-SIAM Symposium on Discrete Algorithms. 1998,pp. 668-77).

流行度:谷歌和其他几个搜索引擎增加了链接分析的流行度,以帮助确定页面的相关性或价值。受欢迎程度利用所有用户选择页面的频率数据作为预测相关性的手段。虽然流行度有时是一个很好的指标,但它假设基础信息需求保持不变。

公布日期:一些搜索引擎假设信息越新,它就越有可能对用户有用或相关。因此,搜索引擎呈现的是离现在最近的结果。

长度:虽然长度本身不一定预测相关性,它是用于计算类似页面的相对价值的一个因素。因此,在两个包含相同查询检索词的文档之间进行选择,假定包含相对于文档长度的检索词出现比例较高的文档更可能是相关的。

查询检索词的接近程度:当查询中的检索词在文档中彼此接近时,文档与查询相关的可能性大于检索词距离比较远的情况。虽然有些搜索引擎在查询中无法识别短语本身,如果查询检索词彼此相邻或者距离很近,与检索词在文档中距离很远相比,某些搜索引擎会在结果中对文档进行更高的排名。

专有名词:因为对人,地点或事物进行了如此多的搜索,有时会有更高的权重。虽然这可能很有用,但如果搜索引擎假设您正在搜索名称而不是与正常日常检索词相同的单词,则搜索结果可能会偏差特别大。想象一下,当你在为艺术史课寻找madonnas的照片时,会获取摇滚明星“madonnas【麦当娜】”的信息。

总结

上面的解释列出了搜索引擎中可能出现的处理范围,以及哪些选项影响搜索引擎提供商做决定。选项范围可能有助于改善用户对查询返回结果的频繁惊讶。到目前为止,搜索引擎提供商主要选择较少的,而不是更复杂的文档和查询处理。因此,典型的搜索结果需要搜索者做很多工作,搜索者必须在搜索结果之前,点击并浏览一些文档,然后才能确切地找到他们所寻求的内容。产品和服务的典型演变表明,这种现状不会继续下去。进一步提高处理复杂性和质量的搜索引擎将得到搜索者的更大忠诚,另外搜索引擎会得到更多的经济回报机会。

搜索者应该持续关注最好的搜索结果并追求它。

你可能感兴趣的:([code.search]搜索引擎是如何工作的)