热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

信息检索导论,信息检索site

整个过程称为倒排。倒排文档一般由两个部分组成:词汇表和记录表。在检索计算的过程中,需要充分利用到位置信息,并且检查文档的组成单元。局限性:存储开销比较大,在更新、插入和删除是都需要

信息检索(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、参考 哈工大—信息检索
推荐阅读
author-avatar
hizcr
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有