作者:hizcr | 来源:互联网 | 2023-08-22 06:10
整个过程称为倒排。倒排文档一般由两个部分组成:词汇表和记录表。在检索计算的过程中,需要充分利用到位置信息,并且检查文档的组成单元。局限性:存储开销比较大,在更新、插入和删除是都需要
信息检索(IR)——索引与检索 1. 索引
在介绍这部分内容之前,我们先来回顾一下信息检索系统的基本架构:
1.1 索引的作用
首先,当用户提交一个query的时候,我们考虑一下,应该如何生成结果?如果直接对文档库中的每一篇文档进行扫描,当文档库特别大或者文档本身就特别大的时候,这种扫描的过程本身就是费时费力的,为了提高检索速度,我们肯定是需要对文档库中的文档进行预处理,这个时候就需要索引结构。
1.2 前向索引
所谓的前向索引,就是将每一篇文档表示成DOCID以及文本内容组成的类向量的模式。下面我们举一个实际的例子来说明一下:
假设当前文档集合中一共包含两篇文档,文档1和文档2,每一篇文档都是由一些字符串所组成。其具体形式如下: 文 档 1 : b d a b b c b a d c 文档1:bdabbcbadc 文档1:bdabbcbadc 文 档 2 : a b c d a c d b d a b 文档2:abcdacdbdab 文档2:abcdacdbdab
为了简化起见,这里每一个字母表示的是一个字符串。则构建出来的前向索引如下所示:
在前向索引中,文档对应的每一个模块是一个字符串,以及字符串在文档所处的位置。
当query进行查询的时候,仍然是依次扫描每一个文档,但是对于一个字符串的多次出现不需要全部的进行扫描。并且,根据字符串的大小排序,之后在扫描的过程中可以使用二分法进行扫描,加速匹配的过程。这样就在一定程度上加快了检索的速度。
1.3 前向索引的局限性
使用前向索引的时候,仍然需要一篇篇扫描每一篇文档,如果文档集合的规模比较大,这种方式的检索速度仍然可能无法满足检索速度上的需求。
2. 倒排索引 2.1 倒排的概念
首先从索引项中快速的查询文档的索引结构,文档正常被表示成索引项的集合,建立索引是把每一个索引项表示为其出现的文档集合。整个过程称为倒排。
倒排文档一般由两个部分组成:词汇表和记录表。其中词汇表示文本或者文本集合中所包含的所有不同单词的集合。对于词汇表中的每一个单词,其在文本中出现的位置或其出现的文本编号构成一个列表,所有这些列表的集合就是记录表。
我们用一张图来描述一下上面的过程:
这里需要注意的是:索引文件可以用任何的文件结构来实现,同时索引文件中的词向是文档集合中的词表。
我们给出一个具体的例子来描述一下:
2.2 倒排索引的改进 2.2.1 位置信息引入
在上面描述的倒排索引中,索引表中是以词为单位进行存储的,这种索引结构的基本假设是各个词之间是独立的。但是在具有应用中,常常需要知道词汇之间的邻接条件,也就是词汇之间是存在一定关系的。例如:“database”后面紧跟着“systems”,“database”和“systems”之间不能间隔超过三个单词等等。
此时,我们需要对原始的记录表进行改进,需要在倒排索引中保存关键词在文档中的位置,文档的组成单元(标题,小标题,句子分割标记等等)。在检索计算的过程中,需要充分利用到位置信息,并且检查文档的组成单元。
下面给出新的倒排索引的结构:
2.2.2 以权重信息为记录表
在构建倒排索引的时候,还可以在记录表中保存出现的频率,这样方便支持基于统计的检索。其基本的结构如下所示:
在记录表中的权重信息可以是该词汇在文章中的权重,也可以是在该文中出现的频率结果。
2.2.3 同义词扩展词汇表
在构建了倒排索引中的索引表和记录表之后,进一步,我们还可以为文档中的同义词会构建一个同义词的记录结构,这种结构对于提高召回率很有意义。其基本的结构如下图所示:
2.3 倒排索引的优缺点
优点:
首先,相比于之前的前向索引中的逐篇文档,倒排索引的检索速度更快。同时,关于不同类型的信息都可以存储在位置信息的记录表中,所以倒排索引的结果具有一定的灵活性。在存储了足够的信息之后,可以支持短语检索,模糊检索等复杂的检索。
局限性:
存储开销比较大,在更新、插入和删除是都需要比较高的维护开销,倒排索引相对静态环境使用比较好。由于引入的扩展信息越来越多,检索的代价也越来越大(例如:短语匹配等等)。
2.4 倒排索引的例子
首先给出文档集合:
然后,给出原始的倒排索引:
在原始的倒排索引中,我们构建的记录表中记录的是词汇的出现的文档信息。进一步,我们引入词的出现频次,构建基于权重的倒排索引的结构。
接下来,扩展倒排索引,增加位置信息:
在获取到词汇的位置信息之后,倒排索引就能够支持邻接索引,这里我们举一个例子来说:假设给定的query是“tropical fish”,则我们可以在索引结构中确定tropical和fish中出现的位置信息:
不难发现们对于tropical和fish,都出现在了第1,2,3篇文章中,并且均有位置邻接信息的存在。
最后,对于每一篇文章的标题,我们可以针对标题构建出一个范围表,范围表中记录的是标题词汇出现的位置。在检索的过程中,我们可以根据query中词汇在文章中位置信息和文章标题的范围信息进行检索。例如下面所示:
在上图中fish在三篇文章中出现的位置,在第一篇和第四篇中恰好在标题范围内部,但是不在第二篇的范围内部,第三篇文章没有标题。综上所述,符合检索的包括文章1,4。
3 倒排索引的构建
在充分理解了倒排索引的概念和作用之后,我们下面来讲述如何构建一个倒排索引,首先,我们先展示倒排索引的构建流程:
3.1 排序
排序的过程就是扫描每一篇文档产生的(文档号,单词号,出现位置)的三元组。然后按照单词号进行重新的排序,单词号相同的项在按照文档号进行排序,单词号和文档号都相同的在按照出现的位置进行排序。然后将排序好的结果写入到索引文件中。
下面举一个例子来说明一下:假设由两篇文档构成的集合:
4、参考 哈工大—信息检索