现代信息检索——索引构建

简介: 现代信息检索——索引构建

1. 索引


建立倒排索引的过程称为索引构建,负责构建索引的算法称为索引器。操作系统往往以数据块为单位对数据进行读写,因此从磁盘读取一个字节和读一个数据块所耗费的时间可能一样多。采用一种高效的解压缩算法对数据进行压缩,然后读取磁盘上的压缩数据,再进行解压,这个过程所花的时间往往会比直接读取原始数据的时间少。


下文涉及到是3个名词:倒排、索引均是指倒排表的不同形式;词典是指词项名到词项ID的映射表。


1. BSBI算法


BSBI(Blocked sort-based Indexing,基于块的排序索引方法)的基本思想是:收集每一个数据块(数据库大小由内存决定)的倒排表,对每个倒排表排序后写入硬盘,最后将不同分块的倒排表合并为一个大的全局倒排表(词典),该词典就是索引文件。


算法流程:


词项ID映射

将所有文档的词项映射为对应的ID,形成全局的termStr-termID词典;

构建词项块

将映射后的所有词项划分为大小相等的块构建倒排表,并存入磁盘;

对倒排表排序

将每个块读入内存,然后按照termID排序(快速排序大约需要 O ( N ln ⁡ N ) O(N\ln N) O(NlnN)步)。不断重复直到所有倒排表都完成排序。

对倒排表合并

从磁盘中取出两个数据块的倒排表,进行合并形成一个全局倒排表,再将全局倒排表存入磁盘。不断重复直到所有倒排表都完成合并。

0a2653c851af460fa595bd959398a8f1.png

需要注意的是,待合并的倒排记录表的term是用id来表示的,上图的字符串只是为了方便理解;词典的term是字符串形式。


为了加快处理速度,可以进行多项合并,多项合并(multi-way merge)比两两合并效率更高。所谓多项合并,也就是从所有块同时读取。


多项合并的流程如下:


同时从所有块读取,并且为每块维持一个读缓冲区(read buffer),为输出文件(即合并后的倒排表)维持一个写缓冲区(write buffer);

维护一个待处理termid的优先级队列(priority queue),每次迭代从队列中选取一个最小的未处理 termid;

合并不同块中所有的该termID的倒排表,并写入磁盘。

不断迭代,最终完成合并,在多项合并的过程中,每次迭代均处理较小规模的数据(一个词项的倒排表),需要一定的内存开销。


2. SPIMI算法


SPIMI(Single-pass in-memory indexing, 内存式单遍扫描索引构建算法)是在BSBI的基础上改进的,它不做id转换,而是直接关联了词项与索引。另外词项不排序,直接按照出现的先后顺序构建索引。


算法流程:


构建词项块

将所有文档的词项划分为大小相等的块;

构建块倒排表

对的每个块内的词项映射为对应的ID,形成单个块的局部termStr-termID词典,然后构造倒排表;

合并块倒排表

将所有块的倒排表进行合并

3. BSBI与SPIMI的区别

BSBI算法在分块索引阶段,维护一个全局termStr-termid的词典,局部索引为termid及其倒排记录表,按词典顺序排序。是在合并前就构造全局词典。


SPIMI算法分块索引阶段建立局部词典和索引,无需全局词典。 在合并阶段,将块倒排表两两合并,合并完成后自然产生全局termStr-termid词典。是在合并过程中构造全局词典。


3. 动态索引构建


在实际使用索引时,文档常常会增加、删除和修改,这也意味着词典和倒排记录表必须要动态更新。


一个最简单的方案是主辅索引:主索引(Main index)+辅助索引(Auxiliary index)。


对于增加文档

该方案在磁盘上维护一个大的主索引(Main index),新增的文档放入内存中较小的辅助索引中。定期同时搜索两个索引(主和辅),然后合并搜索结果。这样就实现了自动扩充索引。

对于删除文档

对于要删除的文档,索引不马上将其从索引中去除,而是采用无效位向量(Invalidation bit-vector)来表示删除的文档。得到定期搜索主辅索引时,利用无效位向量过滤返回的结果,去掉已删除文档。

主辅索引合并存在的问题主要是合并任务量大、合并过于频繁,合并时如果正好在搜索,那么搜索的性能将很低。为了缓解这个问题,在合并阶段可以采用对数合并:


对数合并算法能够缓解(随时间增长)索引合并的开销,使用户不会明显感觉到搜索操作在响应时间上的延迟。对数合并的思想是:


维护一系列索引,其中每个索引的容量是前一个索引的两倍,第一个索引的容量为 n;

将最小的索引 ( i 0 )载入内存,其他更大的索引 ( i 1 , i 2 , . . . ) 置于磁盘;

当 ( i 0 ) (i_0) (i 0 )变得过大时 ( i 0 > n ) 若 i 1 不存在,则将 i 0  写入磁盘作为 i 1 ;若 i 1  存在,则将 i 0 与 i 1 合并,然后将合并结果作为 i 2 写到磁盘中(若 i 2 不存在),或者继续和后面的索引合并。

设 T T T为所有倒排记录的个数,则对数合并的复杂度( O ( T log ⁡ T ) O(T\log T) O(TlogT))比辅助索引( ( O ( T 2 ) ) (O(T^2)) (O(T  )))要低一个数量级,是一个很好的合并算法。


相关文章
|
9月前
|
存储 数据挖掘 机器人
使用LOTR合并检索提高RAG性能
RAG结合了两个关键元素:检索和生成。它首先使用语义搜索等高级技术来浏览大量数据,包括文本、图像、音频和视频。RAG的本质在于它能够检索相关信息,然后作为下一阶段的基础。生成组件利用大型语言模型的能力,解释这些数据块,制作连贯的、类似人类的响应。与传统的生成模型相比,这个过程确保RAG系统可以提供更细致和准确的输出。
209 2
|
4月前
|
机器学习/深度学习 自然语言处理 算法
超越传统搜索:探索基于GraphRAG的信息检索新范式
【10月更文挑战第10天】随着信息爆炸时代的到来,如何从海量的数据中快速准确地找到所需的信息成为了一个亟待解决的问题。传统的信息检索系统主要依赖于关键词匹配和文档排名算法来提供结果,但这种方法往往无法捕捉到数据间的复杂关系,也无法很好地理解用户的查询意图。近年来,一种新的信息检索方法——基于图的检索增强生成(Graph-based Retrieval-Augmented Generation, GraphRAG)应运而生,它通过结合知识图谱与机器学习技术,为信息检索带来了全新的视角。
120 1
|
3月前
|
机器学习/深度学习 自然语言处理 数据管理
GraphRAG核心组件解析:图结构与检索增强生成
【10月更文挑战第28天】在当今数据科学领域,自然语言处理(NLP)和图数据管理技术的发展日新月异。GraphRAG(Graph Retrieval-Augmented Generation)作为一种结合了图结构和检索增强生成的创新方法,已经在多个应用场景中展现出巨大的潜力。作为一名数据科学家,我对GraphRAG的核心组件进行了深入研究,并在此分享我的理解和实践经验。
135 0
|
7月前
|
机器学习/深度学习 存储 人工智能
ACL 2024|D2LLM:将Causal LLM改造成向量搜索模型的黑科技
D2LLM:一种针对语义搜索任务的新颖方法,它结合了大语言模型(LLM)的准确性与双编码器的高效性。实验表明,D2LLM在多项任务上的性能超越了五个领先基准模型,尤其是在自然语言推理任务中,相对于最佳基准模型的提升达到了6.45%
150 1
|
9月前
|
人工智能 自然语言处理 Cloud Native
向量检索服务在语义检索、知识库搭建、AI多模态搜索等场景中有着广泛的应用
向量检索服务在语义检索、知识库搭建、AI多模态搜索等场景中有着广泛的应用
281 0
|
9月前
|
自然语言处理 搜索推荐 算法
【一文读懂】基于Havenask向量检索+大模型,构建可靠的智能问答服务
Havenask是阿里巴巴智能引擎事业部自研的开源高性能搜索引擎,深度支持了包括淘宝、天猫、菜鸟、高德、饿了么在内的几乎整个阿里的搜索业务。本文针对性介绍了Havenask作为一款高性能的召回搜索引擎,应用在向量检索和LLM智能问答场景的解决方案和核心优势。通过Havenask向量检索+大模型可以构建可靠的垂直领域的智能问答方案,同时快速在业务场景中进行实践及应用。
111246 64
|
8月前
|
存储 算法 Java
Java数据结构与算法:用于高效地存储和检索字符串数据集
Java数据结构与算法:用于高效地存储和检索字符串数据集
|
9月前
|
存储 机器学习/深度学习 搜索推荐
Elasticsearch 8.X 向量检索和普通检索能否实现组合检索?如何实现?
Elasticsearch 8.X 向量检索和普通检索能否实现组合检索?如何实现?
203 3
|
9月前
|
Linux 异构计算 Docker
QAnything本地知识库问答系统:基于检索增强生成式应用(RAG)两阶段检索、支持海量数据、跨语种问答
QAnything本地知识库问答系统:基于检索增强生成式应用(RAG)两阶段检索、支持海量数据、跨语种问答
QAnything本地知识库问答系统:基于检索增强生成式应用(RAG)两阶段检索、支持海量数据、跨语种问答
|
机器学习/深度学习 搜索推荐 数据管理
语义检索系统:基于Milvus 搭建召回系统抽取向量进行检索,加速索引
语义检索系统:基于Milvus 搭建召回系统抽取向量进行检索,加速索引
语义检索系统:基于Milvus 搭建召回系统抽取向量进行检索,加速索引