倒排索引理解

注明该篇只讲解中文文本处理

在纷繁的信息时代,如何利用搜索引擎快速高效的查找内容目标?接下来主要介绍搜索引擎中一个较为重要的结构-倒排索引。

基本思想:倒排索引(inverted index),是一种索引方法,常被用于检索系统中的一种单词文档映射机构。基本形式为:关键词-文档,它是一种逆向思维运算。该数据结构一般由两部分组成,一部分是关键词字典(用于存储数据中关键词),另一部分是倒排文件(用于存储包含该关键词的文档信息)。

首先解释一下为什么称为-倒排?一般的索引是基于“主体-属性”这种形式,但倒排索引是基于“属性-主体”的形式,例如下图:

利用Hadoop实现倒排索引 倒排索引算法_利用Hadoop实现倒排索引

我们可以从衣服A的属性,直接定位到“衣服A”。假若换到书名搜索中来,就相当于输入书名中的关键词,直接定位到该书。

关键词字典的构造

该过程主要利用分词将文档中关键词提取出来,如下图:

利用Hadoop实现倒排索引 倒排索引算法_文本处理_02

在提取过程中需要进行以下步骤的处理:

  1. 分词。假若需要还可以进行特征抽取和人工标注等nlp技术来提高分词效果。
  2. 停用词过滤。
  3. 词条归一化。也就是同义词处理,形式不一样,但是代表相同的含义,这个时候需要将其映射到同一个关键词进行索引。

倒排文件的构造

倒排文件的构造是面向海量数据集合,在规模上比关键词字典要大得多,一般无法完全存放在内存中,需要写入磁盘。具体如下图:

利用Hadoop实现倒排索引 倒排索引算法_文本处理_03

基本的构建方法如下(以Term i 为例):



找到包含Term i的文档;



对于每一个文档,记录(文档id,文档长度,Term i的词频等一些信息)



然后对Term (i+1)关键词循环1、2步进行构造。直到构建完最后一个关键词为止。

其中构建过程可以采用:单扫描和多扫描(业务应用场景角度出发),分布式构建和动态构建(从工程角度出发)

最后说一下,当我们输入查询后,如何进行检索:



用户输入查询信息,然后分词、提关键词,得到Terms;



Terms在倒排索引的关键词字典中查找对应的倒排文件中文档信息;



根据一些算法(例如BM25算法)对进行计算;



基于上述得分,对文档进行综合排序,将最终结果返回给用户。

倒排索引部分涉及到一些基础知识:

l 存储技术

l 查找算法

l 排序算法(BM25)

l 文本处理技术