您的位置:首页 > 理论基础 > 数据结构算法

Inverted File Index 文件倒排索引 课件理解与习题解

2016-06-01 23:12 2867 查看
倒排索引是一种文件搜索的方式,它是搜索引擎实现的基础。它将文件内容中的词建立成索引,以此为依据搜索符合条件的文件。本文将根据高级数据结构课程课件简要介绍文件倒排索引的建立及其特点,然后重点进行pta中的题目分析。

介绍

文件倒排索引建立的过程主要是:

从文件中读取词

将该词提取为词干(word stemming),即去除第三人称形式、过去式、进行时等形式,留下词干),并去除分词(stop word),即”a”, “is”等没有意义的词。

检查该词是否已经在词典之中。

若不在,则将该词添加入词典之中。更新索引信息。

建立完毕后,将索引文件存入磁盘。

索引信息包括:词语, 词语出现总次数, (文件号;该文件中该词位置)

伪代码:

while ( read a document D ) {
while ( read a term T in D ) {
if ( Find( Dictionary, T ) == false )
Insert( Dictionary, T );
Get T’s posting list;
Insert a node to T’s posting list;
}
}
Write the inverted index to disk;


当倒排索引文件较大时,无法存在一台主机上,那么就涉及到倒排索引分布式存储技术。可以分为Term-partitioned Index与Document-partitioned Index。前者按照关键词将文件存在不同的主机上,全局建立索引,后者按照文件号将文件存在不同主机上,在每台主机上建立局部索引。



前者查找性能更高,而后者更加可靠。两种索引存储方式的详细内容和详细比较请参照:倒排索引分布式存储

想象一下平时搜索引擎的使用场景,索引是动态变化的。所以索引需要定时更新,并建立主索引和辅助索引。

由于需要被索引的文档集可能是动态变化的(例如添加新文档、删除现有文档),因此索引需要适应这种变化。

最简单的更新办法是周期性地对文档集从头开始进行索引重构。如果要求能够及时检索到新文档,那么一种方法是同时保持两个索引:一个是大的主索引,保存在磁盘中,另一个是小的用于存储新文档信息的辅助索引,辅助索引保存在内存中。检索时可以同时遍历两个索引并将结果合并。而文档的删除记录在一个无效位向量中,在返回检索结果之前可以利用它过滤掉已经删除的文档。每当辅助索引变得很大时,就将它合并到主索引中。

引自1加1等于10的博客

下面我们介绍一下索引文件压缩。

一般来说,对索引文件进行压缩不但可以减小空间,并且可以提高索引效率。这是因为,采用高效的压缩算法,虽然将耗费一定时间在内存中进行解压,但因为能提高cache的利用率,并能提高从磁盘到内存的读取效率,所以总体来说效率将得到提升。

索引文件压缩的内容在 高级数据结构课程 课件中提到了两种实现方式:一是将词典看为单一字符串,以消除用定长方法来存储单词所存在的空间浪费;二是docID的存储只记录与上一项docID的差值来减少docID存储长度。

索引文件压缩的详细内容以及压缩的具体方式请参考:Tekkaman

的博客园

除压缩外,课件中还介绍到thresholding。这部分内容是说在现实使用中人们往往只关心结果中的前一部分,所以搜索时可以通过只搜索前x%来提高效率。

最后我们将介绍如何衡量与评价文件倒排索引系统的性能。

除响应时间、索引文件大小外,主要从精确度(Precision)和收回度(Recall)进行衡量,这也是题目中所经常出现的内容。

Precision

P = RR / (RR + IR)

Recall

R = RR / (RR + RN)



题目

While accessing a term, hashing is faster than search trees. (T or F)

可以通过搜索树、哈希表的方式来存储和访问term,而哈希表花费的是常数时间,所以访问更快。当然,哈希表存在存储不灵活等问题。

故为T

In distributed indexing, document-partitioned strategy is to store on each node all the documents that contain the terms in a certain range. (T or F)

考分布式索引,以文件为分割的索引将文件号为一个范围内的文件存在一个节点上。故为F。

When evaluating the performance of data retrieval, it is important to measure the relevancy of the answer set.

这里要注意,表现分为 data retrieval 和 information retrieval,要注意两者的区分。前者的标准是response time 与 index file space,后者才是relevancy of the answer set。这里放一张课件中的图:



故应为F。

When measuring the relevancy of the answer set, if the precision is high but the recall is low, it means that: (2分)

A. most of the relevant documents are retrieved, but too many irrelevant documents are returned as well

B. most of the retrieved documents are relevant, but still a lot of relevant documents are missed

C. most of the relevant documents are retrieved, but the benchmark set is not large enough

D. most of the retrieved documents are relevant, but the benchmark set is not large enough

选项的前半部分并不重要,重要的是后半部分。精确度高而回收率低,说明搜索到的文件中不相关文件少,但是仍有大量相关文件没有搜索到。

故选B

Which of the following is NOT concerned for measuring a search engine? (2分)

A. How fast does it index

B. How fast does it search

C. How friendly is the interface

D. How relevant is the answer set

搜索引擎主要是引擎,与界面关系不大。故选C

衡量搜索引擎的指标主要是:建立索引的速度、搜索速度、对查询语句的处理。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息