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

原创 2016年06月01日 23:12:15

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


介绍

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

  1. 从文件中读取词
  2. 将该词提取为词干(word stemming),即去除第三人称形式、过去式、进行时等形式,留下词干),并去除分词(stop word),即”a”, “is”等没有意义的词。
  3. 检查该词是否已经在词典之中。
  4. 若不在,则将该词添加入词典之中。更新索引信息。
  5. 建立完毕后,将索引文件存入磁盘。

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

伪代码:

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
衡量搜索引擎的指标主要是:建立索引的速度、搜索速度、对查询语句的处理。
衡量搜索引擎的因素

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

倒排索引、正排索引系列一

1. 搜索引擎简介 搜索引擎顾名思义

面试题[hash_map、字典树与倒排索引]: 全文检索

原始题目 给定一篇英文文献,然后查某个单词在这篇文章中出现了多少次(忽略大小写)。注意这个查找会出现很多次,每一次查不同的单词,请问用什么数据结构和算法来实现尽可能快地查找? 这个很容易想到首先对...

Amortized Analysis 摊还分析

Amortized Analysis摊还分析考察一个操作序列中所执行的所有操作的平均时间,来评价操作的代价。这个操作序列中也许某一操作的代价很高,但因为还有其他操作,所以这些操作的平均代价并没有那么高...

B+树 习题解

B+树是一种n叉树,它将所有数据存在一个level中。B+ 树的特点是能够保持数据稳定有序,其插入与修改拥有较稳定的对数时间复杂度。因此B+树被应用于数据库和操作系统的文件系统中。 B+树的理解没有...

什么是P问题、NP问题和NPC问题

转载自Matrix67 这或许是众多OIer最大的误区之一。     你会经常看到网上出现“这怎么做,这不是NP问题吗”、“这个只有搜了,这已经被证明是NP问题了”之类的话。你要知道,大多...

爱你没理由,年青女孩皮草大攻略

皮草仿佛在人们的印象中就是一个涂着鲜红的口红的中年贵妇嘴里叼着一根烟,身披裘草。这是典范的中世纪的形象,皮草的奢靡突显春秋感,时间飞逝,当初已经是21世界,皮草早已不是贵族们的专利,淘宝网女装,今天小...

Splay Trees 学习笔记

Splays Trees 也是一种二叉搜索树,用于提高连续搜索的效率。Splay Trees 通过将被访问到的节点放于根,提升访问速度。 它与AVL Trees 的效果有所区别。AVL树通过使树ba...

AVL Trees 学习笔记

AVL Trees 是一种特殊的二叉搜索树,它的作用是通过自我调整,让整棵树保持平衡,从而降低整棵树的高度,以提高查找效率。 本文将首先介绍AVL Trees,然后介绍它的实现方法,性能评估,最...

Leftist Heaps 习题解

Leftist Heaps (最左堆)是一种用于快速合并的数据结构,是堆的一种变种。它的合并操作只需花费O(logN)的代价。 对于二叉堆来说,两个堆合并是非常昂贵的操作,这将耗费O(N)的时间,与...

Skew Heaps 习题解

本文介绍另一种优化堆合并操作的数据结构。Skew Heaps 是左式堆的简化版,它没有Npl属性,每次合并后无条件交换左右子树。这样虽然不能严格保证合并操作的时间复杂度是O(logN),但摊还代价是O...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)