引言:
在信息大爆炸的今天,有了搜索引擎的帮助,使得我们能够快速,便捷的找到所求。提到搜索引擎,就不得不说VSM模型,说到VSM,就不得不聊倒排索引。可以毫不夸张的讲,倒排索引是搜索引擎的基石。
VSM检索模型
VSM全称是Vector Space Model(向量空间模型),是IR(Information Retrieval信息检索)模型中的一种,由于其简单,直观,高效,所以被广泛的应用到搜索引擎的架构中。98年的Google就是凭借这样的一个模型,开始了它的疯狂扩张之路。废话不多说,让我们来看看到底VSM是一个什么东东。
在开始之前,我默认大家对线性代数里面的向量(Vector)有一定了解的。向量是既有大小又有方向的量,通常用有向线段表示,向量有:加、减、倍数、内积、距离、模、夹角的运算。
文档(Document):一个完整的信息单元,对应的搜索引擎系统里,就是指一个个的网页。
标引项(Term):文档的基本构成单位,例如在英文中可以看做是一个单词,在中文中可以看作一个词语。
查询(Query):一个用户的输入,一般由多个Term构成。
那么用一句话概况搜索引擎所做的事情就是:对于用户输入的Query,找到最相似的Document返回给用户。而这正是IR模型所解决的问题:
信息检索模型是指如何对查询和文档进行表示,然后对它们进行相似度计算的框架和方法。
举个简单的例子:
现在有两篇文章(Document)分别是 “春风来了,春天的脚步近了” 和 “春风不度玉门关”。然后输入的Query是“春风”,从直观上感觉,前者和输入的查询更相关一些,因为它包含有2个春,但这只是我们的直观感觉,如何量化呢,要知道计算机是门严谨的学科^_^。这个时候,我们前面讲的Term和VSM模型就派上用场了。
首先我们要确定向量的维数,这时候就需要一个字典库,字典库的大小,即是向量的维数。在该例中,字典为{春风,来了,春天, 的,脚步,近了,不度,玉门关} ,文档向量,查询向量如下图:
VSM模型示例
PS:为了简单起见,这里分词的粒度很大。
将Query和Document都量化为向量以后,那么就可以计算用户的查询和哪个文档相似性更大了。简单的计算结果是D1和D2同Query的内积都是1,囧。当然了,如果分词粒度再细一些,查询的结果就是另外一个样子了,因此分词的粒度也是会对查询结果(主要是召回率和准确率)造成影响的。
上述的例子是用一个很简单的例子来说明VSM模型的,计算文档相似度的时候也是采用最原始的内积的方法,并且只考虑了词频(TF)影响因子,而没有考虑反词频(IDF),而现在比较常用的是cos夹角法,影响因子也非常多,据传Google的影响因子有100+之多。
大名鼎鼎的Lucene项目就是采用VSM模型构建的,VSM的核心公式如下(由cos夹角法演变,此处省去推导过程)
VSM模型公式
从上面的例子不难看出,如果向量的维度(对汉语来将,这个值一般在30w-45w)变大,而且文档数量(通常都是海量的)变多,那么计算一次相关性,开销是非常大的,如何解决这个问题呢?不要忘记了,我们这节的主题就是 倒排索引,主角终于粉墨登场了!!!
倒排索引
倒排索引非常类似我们前面提到的Hash结构。以下内容来自维基百科:
倒排索引(英语:Inverted index),也常被称为反向索引、置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。它是文档检索系统中最常用的数据结构。
有两种不同的反向索引形式:
- 一条记录的水平反向索引(或者反向档案索引)包含每个引用单词的文档的列表。
- 一个单词的水平反向索引(或者完全反向索引)又包含每个单词在一个文档中的位置。
后者的形式提供了更多的兼容性(比如短语搜索),但是需要更多的时间和空间来创建。
由上面的定义可以知道,一个倒排索引包含一个字典的索引和所有词的列表。其中字典索引中包含了所有的Term(通俗理解为文档中的词),索引后面跟的列表则保存该词的信息(出现的文档号,甚至包含在每个文档中的位置信息)。下面我们还采用上面的方法举一个简单的例子来说明倒排索引。
例如现在我们要对三篇文档建立索引(实际应用中,文档的数量是海量的):
文档1(D1):中国移动互联网发展迅速
文档2(D2):移动互联网未来的潜力巨大
文档3(D3):中华民族是个勤劳的民族
那么文档中的词典集合为:{中国,移动,互联网,发展,迅速,未来,的,潜力,巨大,中华,民族,是,个,勤劳}
建好的索引如下图:
倒排索引
在上面的索引中,存储了两个信息,文档号和出现的次数。建立好索引以后,我们就可以开始查询了。例如现在有一个Query是”中国移动”。首先分词得到Term集合{中国,移动},查倒排索引,分别计算query和d1,d2,d3的距离。有没有发现,倒排表建立好以后,就不需要在检索整个文档库,而是直接从字典集合中找到“中国”和“移动”,然后遍历后面的列表直接计算。
对倒排索引结构我们已经有了初步的了解,但在实际应用中还有些需要解决的问题(主要是由海量数据引起的)。笔者列举一些问题,并给出相应的解决方案,抛砖以引玉,希望大家可以展开讨论:
1.左侧的索引表如何建立?怎么做才能最高效?
可能有人不假思索回答:左侧的索引当然要采取hash结构啊,这样可以快速的定位到字典项。但是这样问题又来了,hash函数如何选取呢?而且hash是有碰撞的,但是倒排表似乎又是不允许碰撞的存在的。事实上,虽然倒排表和hash异常的相思,但是两者还是有很大区别的,其实在这里我们可以采用前面提到的Bitmap的思想,每个Term(单词)对应一个位置(当然了,这里不是一个比特位),而且是一一对应的。如何能够做到呢,一般在文字处理中,有很多的编码,汉字中的GBK编码基本上就可以包含所有用到的汉字,每个汉字的GBK编码是确定的,因此一个Term的”ID”也就确定了,从而可以做到快速定位。注:得到一个汉字的GBK号是非常快的过程,可以理解为O(1)的时间复杂度。
2.如何快速的添加删除更新索引?
有经验的码农都知道,一般在系统的“做加法”的代价比“做减法”的代价要低很多,在搜索引擎中中也不例外。因此,在倒排表中,遇到要删除一个文档,其实不是真正的删除,而是将其标记删除。这样一个减法操作的代价就比较小了。
3.那么多的海量文档,如果存储呢?有么有什么备份策略呢?
当然了,一台机器是存储不下的,分布式存储是采取的。一般的备份保存3份就足够了。
好了,倒排索引终于完工了,不足的地方请指正。谢谢
如果有有兴趣继续讨论可以在此跟帖,或者到我的博客上讨论:http://blog.redfox66.com/post/2011/09/25/mass-data-topic-8-inverted-index.aspx
相关推荐
搜索引擎是信息时代的重要工具,它通过复杂的算法和大数据处理技术,帮助用户在海量的互联网内容中快速找到所需的信息。本文将深入探讨搜索引擎的核心原理、优化策略以及与Hadoop和云计算的关联。 一、搜索引擎的...
索引是搜索引擎高效检索的基础,它将网络上的海量信息组织成可快速查询的数据结构。在谷姐搜索引擎源码中,我们可能会发现对网页抓取、预处理(如HTML解析、去噪、关键词提取)、倒排索引创建等相关模块的实现。倒排...
《专题一——专题九的练习题及答案》这个压缩包文件包含了从专题一开始到专题九结束的完整练习题目和对应的解答。这样的资源对于学习者来说是极其宝贵的,它提供了全面的复习材料,帮助巩固和检验在各个专题学习中的...
通过分析提供的三个文档——“海量数据管理第一次上机.docx”、“海量数据管理第三次上机报告.docx”以及“海量数据管理第2次上机.docx”,我们可以揭示出一系列关于海量数据处理的关键知识点。 首先,海量数据管理...
认识到这一问题后,Google的创始人Sergey Brin和Larry Page开发了一种新的搜索引擎算法——PageRank,该算法通过分析网页间的链接结构,以评估网页的重要性和相关性,避免了人为操纵的可能性。 #### PageRank算法...
索引阶段,搜索引擎会抓取互联网上的网页或其他信息源,对内容进行分析和处理,然后建立一个高效的数据结构——倒排索引,以便于后续的查询操作。Lucene作为Apache软件基金会的一个开源项目,提供了构建倒排索引的...
倒排索引是搜索引擎的基石,它能够快速定位到包含特定关键词的文档。书中将详细解释倒排索引的构造过程,包括建立词典(Dictionary)、构建倒排列表(Posting List)和优化存储结构等。 五、查询处理与排序 查询...
《初一数学科专题讲义————三角形》深入浅出地为学生揭示了三角形的奥秘,从基本概念讲起,到性质定理的应用,再到实际问题的解决,形成了一套完整的知识体系。 首先,讲义从三角形的基本元素入手,向学生介绍了...
### VMware Virtualization Forum 2009 主场第6场 ——NetApp:实现云计算的坚实基石 #### 演讲嘉宾:陈文俊 NetApp大中华区总经理 #### 核心知识点概述: 1. **NetApp的全球领导地位及业务范围** - 广泛的解决...
企业移动信息化建设是当今数字化转型的关键环节,而平台则扮演着这一进程中的基石角色。随着移动设备的普及和移动互联网的飞速发展,企业需要利用移动化来提升工作效率,优化业务流程,以及满足员工和客户的期望。...
《Hadoop海量数据处理技术详解与项目实战》一书,是专为Hadoop工程师和大数据工程师精心编撰的指南,旨在深入解析Hadoop在处理海量数据时的技术原理和实际应用。Hadoop作为开源的分布式计算框架,是大数据处理的核心...
数据安全——保障数据高效合理开发利用的基石
这些技术是大数据量和海量数据处理的基石,在数据科学、网络分析、搜索引擎优化等众多领域有着广泛的应用。在实际使用过程中,可以根据数据的特性和处理需求灵活选择合适的处理方法,并结合问题实例进一步理解和掌握...
在IT行业中,海量数据处理是不可或缺的一个领域,尤其在大数据时代,掌握高效的数据处理技能对于求职者至关重要。本文将深入探讨如何迅速应对99%的海量数据处理面试题,帮助你提升在这方面的专业知识。 首先,我们...
3. **索引(Indexing)**:预处理后的数据会被构建为索引,这通常涉及到倒排索引的构建,使得可以快速定位到包含特定关键词的文档。本系统提及能够处理大量数据,表明其索引机制设计得相当高效。 4. **存储...
合多源数据是物联网海量数据处理的关键技术之一。在物联网环境中,数据来自各种传感器、设备以及不同的网络系统,这些数据可能存在格式不一致、语义差异等问题。因此,多源数据融合技术旨在通过数据转换、清洗、集成...
索引阶段,数据源被转化为索引文件,通常需要进行分词、同义词处理、拼音转换等预处理工作,以提高搜索效率。在存储设计上,考虑到实际硬件限制,需要通过各种策略优化空间利用,如分布式存储和索引,以应对无限数据...
搜索引擎是现代网络的基石之一,它通过复杂的算法和高效的数据处理能力,帮助全球用户在海量信息中找到所需内容。下面,我们将深入探讨搜索引擎的基本原理、工作流程以及其在现实生活中的应用。 一、搜索引擎的定义...