Post

RAG技术综述调研笔记

RAG技术综述调研笔记

引言

LLM模型的局限性

一般的语言模型,在生成文本方面表现出色,但其依赖于预训练的参数,无法动态获取外部知识。这意味着这些模型在处理实时信息领域特定知识罕见实体时表现不佳。例如当你询问“今天天气怎么样”,但模型只能给你去年的天气情况,这将毫无意义。在专业领域中,如医疗领域医生需要最新的研究数据、法律领域律师需要援引最新的法律条纹,这种局限显得尤为突出。

RAG模型

检索增强生成(Retrieval-Augmented Generation,简称RAG)指在大语言模型(LLM)的生成过程中,引入外部知识检索,来提高回答的准确性和可靠性。通过参考外部知识库,甚至限制生成内容,RAG技术可以有效减少模型在生成回答时产生的事实性错误,即所谓“幻觉”。一般来说,RAG系统包含四个组成部分:嵌入模型、向量数据库、提示模板以及生成式LLM。查询过程一般以如下的过程进行:

  • 系统将用户查询通过嵌入模型编码成向量
  • 在向量数据库中检索相关的文档
  • 将文档填充到预设的提示模板中
  • LLM接收提示模板以生成最终答案 但在实际实现中,这种简单的“检索-再生成”方案往往存在诸多局限,存在大量优化空间。下面根据不同阶段,简要介绍一些技术。

RAG的局限性

  • 在面对模糊查询或特定知识领域的检索时,仍可能出现错误。依赖于如DPR(Dense Passage Retrieval)所使用的密集向量表示,有时也会检索出不相关或偏离主题的文档。因此,需要通过引入更精细的查询扩展和上下文消歧技术来提升检索技术的精准度。理论上,检索与生成的结合应该是天衣无缝的,但在实际操作中,生成模块有时难以将检索到的信息有效整合进回应中,导致检索事实与生成文本间的不一致或不连贯。

  • 计算成本也是一个备受关注的点,因为需要对每个查询执行检索和生成两个步骤,这对于大规模应用尤其资源密集。模型剪枝或知识蒸馏等技术可能有助于在不牺牲性能的前提下降低计算负担。

  • 伦理问题,尤其是偏见和透明度问题。AI和LLM中的偏见是一个广泛研究且不断演变的领域,研究者们识别出包括性别、社会经济阶层、教育背景在内的多种偏见类型。虽然RAG通过检索更平衡的信息有潜力减少偏见,但仍存在放大检索来源偏见的风险。而且,确保检索结果在选择和使用过程中的透明度,对于维护这些系统的信任至关重要。

  • 扩展性:鉴于检索组件依赖外部数据库,应对庞大且日增的数据集需要高效的检索算法。高昂的计算和内存需求也使得RAG模型难以在实时或资源受限的环境中部署。

索引阶段

索引

在RAG中,索引被定义为数据的结构化组织,能够从大规模数据集中高效访问和检索信息。索引将用户查询映射到相关的文档块、知识片段或其他信息内容,充当存储数据与检索机制之间的桥梁。索引的有效性对RAG系统至关重要,因为它直接影响响应准确性、检索速度和计算效率。

几种常见索引结构

  • 结构化索引:结构化索引基于预定义的固定属性组织数据,通常采用表格或关系格式。在早期的知识检索工作中,如REALM系统,文本倒排索引被广泛用作基础技术,而Table RAG则使用特定于表格的索引结构,结合列索引和行索引,以高效检索相关表格条目用于语言生成任务。

  • 非结构化索引:非结构化索引则设计用于自由格式或半结构化数据,在现代RAG系统中更为常见。向量索引利用先前嵌入阶段生成的向量来提高检索效率,如naive RAG、ANCE和G-retriever,后者使用语言模型将图的文本属性转换为向量。

  • 图索引:图索引是一种非结构化索引,利用图结构的固有优势来表示和检索互连数据。在图索引中,数据点被表示为节点,而它们之间的关系通过边表示。这种索引范式特别擅长捕捉语义关系和上下文信息,从而支持复杂的查询和推理任务。

这个阶段的优化主要关注如何预处理和组织知识库数据。索引优化包括数据预处理和文档切分两个主要方面。

数据预处理

数据预处理是将各种原始数据转化为适合LLM利用的结构化格式的过程。原始数据一般有多种来源、多种格式,如markdown、word、纯文本、知识图谱、表格等。

  • 文本类的数据需要通过解析,尽可能保留原结构并提取出关键内容。
  • 扫描件或图片等数据,需要借助ocr技术转化为可处理的文本格式。
  • html网页需要通过dom提取正文
  • 表格类数据需要记录相关性,同时也需要分解tuple的内容。
  • 还需要记录元数据(作者、时间戳、标题等),作为附加标签 预处理还需要数据清洗与规范化,例如删除页眉页脚、导航栏等无关信息。修改格式不一致之处、填补缺失值等。然后将不同来源的内容转为统一的schema,以便后续步骤可以用一致的方式处理所有数据。这里可以参阅 Unicorn: A Unified Multi-tasking Model for Supporting Matching Tasks in Data Integration | Proceedings of the ACM on Management of Data

这个阶段通常还需要进行文档分段(Document Partitioning),即根据文档的自然结构(章节、段落、表格等)将内容划分为逻辑单元。文档分段不同于切分操作,分段更侧重依据原有结构划分内容、而切分是面向检索的进一步拆解技术。

常见的几种数据处理

结构化知识

知识图谱(Knowledge Graphs, KGs)是一种结构化表示,以图的形式封装实体及其相互关系。

其结构化特性便于高效查询和检索,而语义关系则支持更细致的理解和推理。KGs整合了来自不同来源的信息,提供了统一的知识库。然而,将KGs整合到RAG系统中也面临挑战,包括从大规模KGs中导航和提取相关子图的复杂性、KGs扩展时的可扩展性问题,以及将结构化数据与语言模型的无序数据处理对齐的困难。例如:

  •  GRAG:通过跨多个文档检索文本子图,提升了RAG系统中的信息检索效率。

  •  KG-RAG:引入了探索链(Chain of Explorations, CoE)算法,通过高效导航KGs来提升知识图谱问答(KGQA)任务的表现。

  •  GNN-RAG:利用图神经网络(GNNs)从KGs中检索和处理信息,在与LLM对接之前增强了推理能力。从历史数据构建KGs作为RAG的外部知识源,有效提升了信息检索和生成能力。

  •  SURGE框架:利用KG信息生成上下文相关且基于知识的对话,提升了交互质量。

  •  SMART-SLIC、KARE、ToG 2.0 和KAG,展示了KGs在特定领域作为外部知识源的有效性,提升了RAG系统的准确性和效率。
    半结构化知识

    半结构化数据介于结构化和非结构化格式之间,具有组织元素但没有严格的模式。例如,JSON和XML文件、电子邮件以及HTML文档。HTML作为网页的基础,结合了标签和属性等结构化组件与自由文本等非结构化内容。

  • HtmlRAG:在大多数场景中,开源HTML解析技术仍然是高效数据提取和无缝整合的关键。这些工具提供了强大的解析能力和对多样化HTML结构的适应性,确保了在各种应用场景中的高效性和准确性。

  •  Beautiful Soup:一个用于解析HTML和XML文档的Python库,创建解析树以便轻松提取数据;

  •  html5ever:由Servo项目开发的开源HTML解析器,遵循WHATWG的“HTML5”规范;

  •  htmlparser2:一个用于Node.js环境的强大HTML解析器,提供快速灵活的方式处理HTML文档;

  •  MyHTML“”一个基于Crystal语言的高性能HTML5解析器,绑定到lexborisov的myhtml和Modest库;

  •  Fast HTML Parser,一个极快的HTML解析器,生成最小的DOM树并支持基本元素查询。
非结构化知识

非结构化知识涵盖了缺乏一致结构的数据类型,如自由文本和PDF文档。与遵循预定义模式的结构化数据不同,非结构化数据的格式多样,通常包含复杂内容,使得直接检索和解释具有挑战性。在非结构化格式中,PDF文档在知识密集型领域中尤为常见,包括学术研究、法律文件和公司报告。PDF通常包含大量信息,如文本、表格和嵌入图像,但其固有的结构可变性使得提取和整合到RAG系统变得复杂。

  •  ABINet:通过双向处理增强了OCR的准确性。

  •  GPTPDF:使用视觉模型将表格和公式等复杂元素解析为结构化的Markdown,在大规模处理中具有高成本效益。

  •  Marker:专注于清理噪声元素,同时保留文档的核心格式,非常适合学术和科学文档。

  •  PDF-Extract-Kit:支持高质量内容提取,包括公式识别和布局检测

  •  Zerox OCR:将PDF页面转换为图像,并使用GPT模型生成Markdown,有效管理标题和表格等结构。

  • MarkItDown:是一个多功能工具,能够将PDF、媒体、网页数据和存档等多种文件类型转换为Markdown。

多模态知识

多模态知识(包括图像、音频和视频)提供了丰富的互补信息,可以显著增强RAG系统,特别是在需要深度上下文理解的任务中。图像提供空间和视觉细节,音频贡献时间和语音层,而视频结合了空间和时间维度,捕捉运动和复杂场景。传统的RAG系统主要设计用于文本数据,在处理和检索这些模态的信息时往往表现不佳,导致在非文本内容至关重要时生成不完整或不够细致的回答。

  • CLIP:将视觉和语言对齐到一个共享空间

  • Wav2Vec 2.0 和CLAP:音频模型则专注于音频与文本的对齐。

  • ViViT:处理空间和时间特征。

    文档切分

    文档切分(Chunking)是将长文档划分为较小的语义段落、文本块以平衡检索内容的上下文完整性和片段长度的技术。常见的文档切分策略有:

  • 固定大小切分:按预定长度强行划分为块。为避免打断上下文,实践中常常共享一部分重叠内容。
  • 递归切分:先按较大的单元(章节、段落)初步切分,若仍然过长,则块内按较小单位进一步切分(如句子)。这种相对能保留逻辑
  • 语义切分:将文本划分为若干语义单元(如句子或小段落),对每个单元生成向量嵌入,然后根据嵌入向量之间的相似度(如余弦距离),动态聚合成块。当语义内容出现显著变化时开始新的块。
  • 基于LLM的切分:利用语言模型智能划分文本,由LLM生成适当边界。
  • 基于文档结构的切分:根据文档中已有的结构(如标题、小节)来划分块。这种策略在结构清晰的数据上(如html、markdown、代码)非常有效。
  • 延迟切分(Late Chunking):先利用支持长文的模型对整篇文档建模、然后再切分,以最大程度保留全文的全局语境信息。

经过数据预处理和合理切分后,我们就能得到结构优化后的向量索引,为后续的查询提供高召回率和高精度的知识库支持。

常见的分块方案实例

  • 命题级分块:将文本分割为单个事实的小单元,从而捕捉更丰富的信息。

  • LumberChunker:使用LLM检测段落之间的内容变化,从而创建上下文敏感的块。

  • 元分块方法:(如边际采样分块和困惑度分块)优化块边界,以更好地满足RAG需求,提升上下文捕捉和检索效果。

  • 延迟分块:一种创新方法,与传统做法不同,它在分块之前对整个文档进行嵌入,从而使模型保留完整的上下文,特别是在处理复杂或上下文密集的文本时,显著改善了检索结果。这些先进的分块策略使RAG能够更好地适应复杂的文档结构,捕捉细微信息,并提升检索准确性,为多样化的检索和生成任务提供了更强大的支持。

词嵌入

在基于查询检索块时,该过程依赖于查询与块之间的向量相似性计算(如余弦相似性)。将块准确映射为向量表示对于有效捕捉语义意义并与相关查询对齐至关重要。

传统方法

  • 词袋模型(Bag of Words, BoW):强调词频但忽略语法

  • N-gram:捕捉语言结构但面临维度挑战

  • TF-IDF模型:结合了词频和上下文,但仍受高维度问题的限制。

以上方法无法全面表示语义信息。

基于深度学习的现代词嵌入方法

  • Word2Vec、GloVe和fastText:通过利用上下文、共现模式或词根变化来编码单词。

然而,这些嵌入是静态的,无法适应不同的上下文。

Transformer的嵌入方法

Transformer架构 的引入,特别是BERT ,在捕捉上下文意义和增强语义表示方面取得了重大进展。BERT 及其衍生模型,如RoBERTa、ALBERT 和DPR,显著提升了文档检索能力。

BGE、NV-Embed和SFR-Embedding,在多语言和特定领域的基准测试中表现出色。

多模态的嵌入方法

知识不仅以文本形式表示,还包括图像、音频和视频。因此,对多模态嵌入模型的需求日益增加,这些模型将来自不同模态的信息整合到一个统一的向量空间中。

图像的嵌入

对于图像,模型处理JPG或PNG等图像格式,生成与文本相同的语义向量空间中的嵌入。

  • Normalizer-Free ResNets (NFNet) :提供了一个高效的框架来提取图像特征

  • Vision Transformer (ViT): 利用Transformer架构学习高质量表示。

  • 对比语言-图像预训练(CLIP):通过对比学习将视觉和文本模态对齐,生成了适用于零样本分类和跨模态检索的多功能嵌入。

音频的嵌入

对于音频,模型提取音高、音色、节奏和语义等关键特征,从而实现对音频的有效和有意义分析,以支持检索任务。

  • Wav2Vec 2.0:一种自监督学习模型,直接从原始波形中学习音频表示,生成适用于多种音频任务的高层次嵌入。

  • 对比语言-音频预训练(CLAP):一种最先进的模型,通过从成对的音频和文本数据中学习生成音频嵌入,为音频与自然语言的整合提供了统一框架。

视频的嵌入

  • Video Vision Transformer (ViViT):基于ViT,能够有效处理视频理解任务,捕捉空间和时间特征。

  • VideoPrism:因其在广泛视频理解基准测试中的最先进表现而备受关注。它特别擅长在不同视频领域中泛化,而无需特定任务的微调。

检索前

检索前优化侧重于在向量搜索之前,对用户的查询进行改写和增强。用户的原始提问往往出现简短、含糊、或复杂的情况。通过在检索前进行查询转换,可以提升检索召回的数量和质量。常用技术有查询改写、查询扩展、查询分解和查询路由等。

查询改写

查询改写(Query Rewriting)是指将用户的原始查询进行重新表述,使其更加适合向量检索或关键词检索的需要。一种常用做法是利用语言模型要求将原查询换一种说法:保持原意不变但使用更正式、明确的措辞。例如,将“帮我找一下去年夏天最火的电影”改写为“2024年夏季上映的票房最高的几部电影有哪些?” 这种方案被称为(Rewrite-Retrieve-Read)

查询改写的例子

  • 重写-检索-阅读(Rewrite-Retrieve-Read, RRR:通过使用LLM在检索前生成和优化查询,提升了查询与目标知识的对齐,从而在开放域问答和多选任务中显著提高了性能。

  •  BEQUE:专注于电子商务搜索中的长尾查询,通过监督微调、离线反馈和对比学习来弥合语义差距,从而在GMV和交易量等业务指标上取得了显著提升。

  • HyDE:引入了一种零样本的密集检索方法,通过让LLM生成假设文档并将其编码用于检索相关文档,超越了传统的无监督检索器。

  • Step-Back Prompting :鼓励LLM从具体示例中抽象出高级概念,从而在STEM、多跳问答和基于知识的推理任务中提升了推理能力。这些方法共同增强了RAG在跨领域知识密集型任务中的有效性和可扩展性。

查询扩展

查询扩展(Query Expansion)关注拓宽查询的语义范围。基于用户初始查询、生成若干语义上类似或相关的查询,一同用于检索。例如,对于查询“冥想有哪些好处?”,扩展出的查询可能包括:“冥想如何减轻压力和焦虑?”、“冥想是否能提高专注力?”、“长期冥想对心理健康的影响有哪些?”等。 这种方案往往会带来大量结果,因此常常需要加入重排序步骤以挑选最相关的内容。

查询分解

查询分解(Query Decomposition)是针对复杂查询的一种处理技术,它将一个复合、多层次的问题拆解成数个更易回答的子问题。它通常由两个阶段组成:

  • 首先利用LLM将原始问题解析成若干子问题,然后分别检索。
  • 将所有子查询的结果汇总以构造针对原始问题的完整回答。

例如,对于复杂询问“为什么我总是觉得很累,即使我饮食健康?我是不是该改变饮食习惯,或者尝试一些流行的饮食方法?”可以拆解为三问:“哪些常见饮食因素会导致疲劳?”、“当前有哪些流行的饮食法,它们对精力的影响如何?”以及“如何判断我的饮食是否均衡且支撑我的精力需求?”。

查询分解往往还能结合其它技巧使用。例如其可以先对复杂查询提取出关键词或识别适用的元数据过滤条件。实现上也可以并行地处理子查询。

查询分解的例子

  • 最少到最多提示(least-to-most prompting) :将复杂问题逐步分解为更简单的子问题,从而提升模型在更困难任务上的泛化能力。这种方法在SCAN任务中表现出色,GPT-3模型仅用14个示例就达到了99%以上的准确率。

  • 自问(Self-ask):采用了类似的方法,但进一步优化了过程,通过让模型提出并回答后续问题,减少了组合性差距,从而实现了更好的多跳推理。

  • 验证链(Chain-of-Verification, CoVe) :通过让模型独立验证其回答,提高了答案的可靠性,显著减少了在列表问题和长文本生成任务中的幻觉现象。

  • 链中搜索(Search-in-the-Chain, SearChain):将信息检索(IR)整合到推理过程中。在该框架中,模型构建一个查询链(Chain-of-Query, CoQ),每个查询都通过IR进行验证,从而提高了推理路径的准确性和可追溯性。SearChain允许模型根据检索到的信息动态调整其推理,从而在多跳问答和事实核查等知识密集型任务中表现出色。

查询路由

查询路由(Query Routing)是一种动态决策机制,根据查询的内容和一同,将其分配到最适合的检索管线或数据库中处理。实现查询路由通常需要预先设计多索引或多模态的管线:例如,将结构化数据(如表格)存储在一个索引,不同语言的文档分别在不同索引,实时信息与长期知识分开存储等。然后系统根据查询判断其类别,将查询发往对应的索引或检索方式。

一种高级形式的查询路由是引入智能代理(Agent)的RAG架构。代理模型会先对用户查询进行分析,判断其所属领域、复杂程度以及需要的工具,然后选择相应的方案处理。

检索阶段

常用检索方法

常用的基础检索方法有基于关键词的稀疏搜索(如BM25)和基于语义的稠密检索(如DPR,Dense Passage Retrieval)。

例如,如果你问:“什么是量子计算?”稀疏检索可能会通过匹配关键词“量子”和“计算”来找到相关文档,而稠密检索则会通过语义理解,找到与“量子计算”概念相关的文档,即使这些文档中没有直接出现“量子”或“计算”这两个词。

  • 稀疏检索:稀疏检索策略通过词语分析和匹配利用稀疏向量检索文档或知识块。传统的稀疏检索策略使用术语匹配指标,如 BM25、TF-IDF 和查询似然,通过计算词语出现频率和逆文档频率来估计文档与查询的相关性。
  • 稠密检索:稠密检索策略将查询和文档编码到低维向量空间中,通过向量表示的点积或余弦相似度来衡量相关性。稠密检索器,如 DPR 和 ANCE,基于 BERT 架构的预训练语言模型,并在无监督数据上进行微调,以生成高质量的查询和文档表示。

检索方法介绍

BM25

BM25是一种使用较广的信息检索算法,利用词频-逆文档频率(TF-IDF)来根据相关性对文档进行排序。尽管是一种经典方法,依然是许多现代检索系统,包括RAG模型中使用的系统的一个标准算法。

BM25根据查询词在文档中的出现频率来计算文档的相关性得分,同时考虑文档长度和词在整个语料库中的频率。尽管BM25在关键词匹配方面表现出色,但它在理解语义含义上存在局限。例如,BM25无法捕捉词与词之间的关系,并且在处理需要上下文理解的复杂自然语言查询时表现不佳。

但是,BM25因简单高效而被广泛采用。适用于基于关键词的简单查询任务,尽管像DPR这样的现代检索模型在处理语义复杂的任务时往往性能更好。

密集段落检索(DPR)

密集段落检索(Dense Passage Retrieval,DPR)是一种新的信息检索方法。使用一个高维向量空间,查询和文档都被编码成高维向量。

采用双编码器架构,分别对查询和文档进行编码,从而实现高效的最近邻搜索。

与BM25不同,DPR在捕捉查询和文档之间的语义相似性方面表现出色,使其在开放域问答任务中极为有效。

DPR的优势在于其能够根据语义含义而非关键词匹配来检索相关信息。通过在大量问答对语料库上训练检索器,DPR能够找到与查询上下文相关的文档,哪怕查询和文档没有使用完全相同的词汇。最新的研究通过将DPR与预训练语言模型结合,进一步优化了DPR。

REALM(Retrieval-Augmented Language Model)

REALM将检索过程融入语言模型的预训练,确保检索器与生成器协同优化,以适应后续任务。

REALM的创新之处在于:能够学习检索出能够提升模型在特定任务上表现的文档,比如问答或文档摘要。

训练过程中,REALM对检索器和生成器进行同步更新,优化检索流程以更好地服务于文本生成任务。

REALM的检索器被训练为能够识别出既与查询相关又有助于生成准确、连贯回答的文档。因此,REALM显著提升了生成回答的质量,尤其是在需要依赖外部知识的那些任务上。

最新研究显示,在某些知识密集型任务中,REALM超越了BM25和DPR,特别是在检索与生成紧密结合的情况下。

检索阶段的优化直接面向向量数据库的检索过程。这些优化方法主要分为两类:

  • 约束或调整检索范围,过滤掉潜在的不相关结果。
  • 改进相似度计算或模型本身,提高相关内容被检索出的概率。

典型的检索阶段优化技术有元数据过滤、排除利群结果、混合检索、以及嵌入模型微调等。

元数据过滤

元数据(Metadata)是指附加在文档或片段上的结构化信息,例如时间戳、作者、类别、数据来源、语言、文件类型等 。直接对元数据进行范围限制是常见的搜索请求,如只需要xx年份后的、只搜索某个数据源中的数据等。 此外,元数据过滤还可以引入时间意识或其它上下文约束,如通过添加时间戳元数据,可以让系统优先返回最新的信息。

排除离群结果

在向量检索中,我们通常会指定返回前k个(top k)相似结果。然而仅依据固定的k值可能导致引入离群的无关结果。这时可以采取以下技巧:

  • 距离阈值过滤(Distance Thresholding):为向量相似度设定一个最大允许距离。
  • 自动截断(Autocut):Autocut是一种自适应方法,它不使用固定阈值,而是观察检索结果的距离分布进行聚类分布,来获取合适的切点。

混合检索

混合检索(Hybrid Search)同时结合向量语义搜索和传统关键词检索的优势。其往往通过一个α参数来控制两种检索方式的权重比例。

举例来说,针对一个技术支持知识库,用户查询“Excel 更新后公式无法正确计算”时,语义检索能够理解这是关于“软件更新导致公式计算错误”的问题,找出可能相关的文章(如讨论公式错误原因或更新影响的帖子);而关键词检索则确保凡是包含“Excel”“公式”等字样的文档不会被漏掉。

混合检索实例

Llama2Vec  是一种轻量级方法,通过两个无监督预训练任务(EBAE 和 EBAR)将 LLMs 用于稠密检索。RepLLaMA 微调 LLaMA 作为稠密检索器,利用其整体表示长文档的能力进行高效文本检索。

嵌入模型微调

向量检索的效果高度依赖于嵌入模型的质量。通用模型可能在垂直领域中的表现并不佳,此时可以对嵌入模型进行微调,以提升嵌入模型的质量。尤其当你的知识库内容具有明显的行业术语或专业用语时(例如医学论文、法律文件),微调嵌入模型的收益会非常大

搜索方法

搜索方法是指为给定查询向量从向量数据库中高效识别相似向量的算法。搜索方法可以分为两种类型:最近邻搜索(NNS)和近似最近邻搜索(ANNS)。

最近邻搜索

NNS 的暴力算法是一种简单的算法,穷举扫描数据库中的所有向量,计算与查询向量的距离以识别最接近的向量。然而,这种方法计算成本高,在大规模数据集上不切实际。

Bentley 提出了一种基于 k-d 树的方法,该方法将 k 维空间递归划分为超矩形区域,从而提高了数据组织和搜索速度。其他基于树的结构,如 Ball-tree、R-tree和 M-tree,也通过将数据划分为超球体、矩形或度量空间等结构来增强最近邻搜索,从而提高了搜索性能,特别是在高维和复杂数据集中。

近似最近邻搜索

ANNS 在准确性、速度和内存效率之间取得了平衡,使其特别适用于大规模和高维数据。这包括基于哈希的方法、基于树的方法、基于图的方法和基于量化的方法。

  • 基于哈希的方法,将高维向量转换为二进制代码,优化内存使用并加速搜索操作。例如,深度哈希使用深度神经网络学习哈希函数,将高维向量映射为二进制代码,同时保留相似数据之间的语义关系。

  • 基于树的 ANNS 方法,包括 K-means 树和 ANNOY,通过层次化组织数据,通过高效遍历树结构来减少搜索空间。这些方法将数据集划分为分区或簇,使得在搜索过程中仅探索相关区域。

  • 基于图的方法,如分层可导航小世界(HNSW),通过反映数据点之间接近度的边连接数据点,从而通过导航图快速进行最近邻搜索。

  • 基于量化的方法,如乘积量化,旨在通过将向量量化为较小的码本来压缩数据,从而在保持搜索速度和准确性之间良好平衡的同时减少内存需求。

多样化的 ANNS 方法为大规模、高维数据集中的快速高效最近邻搜索提供了强大的解决方案,每种方法在准确性、速度和内存使用方面都有其自身的权衡。

检索后

检索后优化指在得到初步检索结果后,对结果集合或生成过程进行进一步处理,以提升最终回答的质量。主要有以下几种技术:结果重新排序、上下文增强、上下文压缩、提示词工程和LLM微调。

文档重排序

当向量数据库返回了一批初步候选文档片段后,我们可以引入一个重排序模型对这些候选结果进行二次排序,以确保最相关、最有用的内容排在前列。 对于重排序模型,一般是利用“查询-文档片段”数据集进行特化训练后的模型。 为了减少开销,一般采用两个阶段进行重排序:

  • 先通过向量相似度,检索若干候选文档(Top K)
  • 再利用重排序模型逐一进行相似度打分,选出最相关的前几篇作为最后提供给LLM的上下文。

上下文增强

在某些场景下,为了提高检索召回率,我们可能将文档切分得非常细小(例如按句切分)。上下文增强技术旨在扩充这些片段的上下文,以提供给LLM更完整的信息。 一个典型例子是句子窗口检索。

句子窗口检索

  • 索引阶段:将文档按句子粒度进行切分,每个句子作为一个向量索引项。但同时在每个句子的元数据中保存该句在原文中的上下文窗口(例如前后各N句) 。
  • 检索阶段:查询时按照句子级别进行匹配,能找到高度相关的句子。但这些句子往往上下文不完整。
  • 增强阶段:从各自的元数据中取出预先存储的上下文窗口,用这个更大的文本片段替换原本的单句。

这种方案可以提高检索精度,同时兼顾了生成阶段的上下文完整性。

上下文压缩

有时候初步检索到的内容很多,总字数可能远超LLM的输入长度限制,或者包含一些与问题无关的冗余信息。这不仅增加了调用LLM的开销,还可能干扰模型的注意力。 上下文压缩通常使用了一个压缩器模型(Compressor),其基本流程是:

  • 先检索到一批相关文档
  • 压缩模型剔除与查询无关的段落、句子,或者对冗长部分进行摘要,但确保与问题相关的要点被保留下来。
  • 压缩后的内容提供给LLM用于生成答案。

当前使用的压缩方法主要有两类:基于向量的压缩和基于词汇的压缩。

  • 向量压缩一般利用嵌入模型来获得段落-查询的相关度,选择阈值上的部分保留
  • 词汇压缩一般利用信息检索技术,如关键词频率、重要词等,或直接利用小语言模型生成一个总结。

提示词工程

提示词工程指的是通过优化和设计输入给LLM的提示内容,来引导模型产生更好的结果。这种方案往往是见效最快且成本最低的。提示词工程涉及到确定”语气、格式和信息顺序“ 往往有以下几种技巧:

  • 链式思维提示(Chain-of-Thought,CoT):提示模型在回答之前逐步思考。“让我们一步一步地推理:”
  • 树状思维提示(Tree-of-Thought,ToT):链式思维的拓展,鼓励模型不仅进行逐步推理,还在每个步骤评估自己的输出,或者同时探索多个不同的解答路径“考虑不同方案并比较它们”
  • ReAct提示(Reason+Act):ReAct是将推理(Reasoning)与动作(Acting)交替结合的一种提示策略。具体来说,模型在思考过程中可以被指示去执行某些操作(比如再次检索、调用计算工具等),然后依据新获得的结果继续推理。Reason:“根据已有内容还不确定答案,我需要查找X”Action:“搜索X”

值得注意的是,推理过程是最常被应用的方案。哪怕不使用ReAct提示方法,模型在检索到多篇文档时,也需要从中提取逻辑关系,生成连贯的答案。

LLM微调

通过在领域数据或特定任务数据上微调(Fine-tuning)LLM,可以使其更好地适应该领域的知识分布和表达要求。 需要微调的内容可以是监督任务(有标准答案的问答对,方便模型学习如何根据检索内容回答)或纯无监督语料(让模型继续在领域语料上做语言模型训练,增强其领域知识)。微调过程通常也要注意避免灾难性遗忘(即新知识覆盖了模型原有的一般能力),为此可以在训练中混入一部分通用数据或者使用较小的学习率等技巧。

知识整合

知识整合可以通过多种方式实现,例如在输入层直接将检索到的文档与查询拼接,或在中间层通过注意力机制将外部知识融入模型的隐藏状态。不同的整合策略适用于不同的任务需求,选择合适的策略可以显著提升模型的表现。

例如,在输入层整合时,模型会将检索到的文档与查询一起输入生成模型;而在中间层整合时,模型会在生成过程中动态调整注意力机制,确保外部知识能够被有效利用。这种灵活的知识整合方式,使得 RAG 模型在处理复杂任务时能够更加精准地生成答案。

知识整合是指将检索到的外部知识与生成模型的内部知识相结合,以提高输出的准确性和连贯性。基本上,知识整合可以分为三种类型:输入层整合、中间层整合和输出层整合。

输入层整合

输入层整合是指在输入层将检索到的信息与原始查询直接整合,旨在增强生成过程中的上下文信息。根据整合方法的不同,输入层整合可以分为两种类型:文本级整合和特征级整合。

文本级整合

将检索到的 top-k 文档直接与查询拼接。为了减少低质量信息的影响并更好地利用大语言模型(LLMs)的上下文学习能力,一些方法对知识块进行重新排序,优先处理最相关的内容,而另一些方法则应用加权过滤从检索内容中去除不相关信息。由于 LLMs 的输入长度限制,对上下文进行压缩,使模型能够在有限的输入大小内学习更多信息。

特征级整合

特征级整合侧重于在特征级别将检索内容的编码形式与原始输入整合。与简单地拼接原始文本不同,将输入查询和检索到的文档转换为特征表示(如稠密或稀疏向量),然后再输入到模型中。通过在特征表示而非原始文本上操作,特征级整合允许对输入数据进行更灵活的操纵。

中间层整合

中间层整合是指将外部知识整合到生成器的隐藏层中。基于注意力的方法 是中间层整合中常见的方法之一。

  • RETRO 模型:引入了一种新颖的交叉注意力模块,将检索到的信息与模型的中间表示相结合。

  • TOME:引入了 提及记忆 机制,通过存储和检索实体提及表示,将外部知识整合到 Transformer 中。

  • LongMem框架:使用自适应残差网络进行记忆检索,结合注意力机制高效访问和检索相关的长期记忆。

输出层整合

输出层整合是指在生成器的输出层整合检索到的知识。这种方法通常将检索知识的 logits 与模型的输出 logits 结合,从而实现增强生成。输出层整合可以分为两个主要分支:

  • 基于集成的整合 聚合来自检索的 logits,例如在 kNN-LM中,最近邻的概率与模型的预测进行插值,以提高泛化能力和鲁棒性。

  • 基于校准的整合 则使用检索 logits 来优化模型的预测置信度,如置信度增强的 kNN-MT。

生成器实例

T5

T5((Text-to-Text Transfer Transformer)是RAG系统中用于生成任务的常用模型之一。

T5的灵活性体现在其将所有NLP任务视为文本到文本的任务。这种统一的框架使得T5能够针对广泛的任务进行微调,包括问答、摘要和对话生成。

通过整合检索与生成,基于T5的RAG模型在多个基准测试中超越了传统生成模型,如GPT-3和BART,特别是在Natural Questions数据集和TriviaQA数据集上。

此外,T5在处理复杂多任务学习方面的能力,使其成为需要应对多样化知识密集型任务的RAG系统的首选。

BART

BART(Bidirectional and Auto-Regressive Transformer)特别适合处理从嘈杂输入中生成文本的任务,例如摘要和开放域问答。

作为一种去噪自编码器,BART能够重建损坏的文本序列,使其在需要从不完整或嘈杂数据中生成连贯、事实性输出的任务中表现出色。

当与RAG系统中的检索器结合时,BART已被证明能够通过外部知识提高生成文本的事实准确性。

RAG的训练

RAG训练的核心在于优化检索和生成组件之间的协同作用,以实现最佳性能。有效的训练策略确保检索器获取相关信息的同时,生成器能够产生连贯且准确的输出。这里将介绍三种主要的训练方法:静态训练、单向引导训练和协同训练。

静态训练

静态训练是一种简单但有效的方法,在训练过程中固定检索器或生成器中的一个组件,专注于优化另一个组件。这种方法在计算资源有限或需要快速部署的场景中尤为适用。例如,固定检索器并优化生成器可以利用已有的检索机制(如BM25或BERT),从而减少训练开销。然而,静态训练的缺点是可能影响系统的整体性能,因为只有单一组件被优化,可能导致检索与生成之间的协同作用不足。

单向引导训练

单向引导训练通过一个组件引导另一个组件的优化,分为检索器引导生成器训练和生成器引导检索器训练两种方式。

  • 检索器引导生成器训练:利用高质量检索文档指导生成器的训练,例如RETRO和RALMs等模型通过预训练的检索器(如BERT和COLBERTV2)提升生成器的输出质量。
  • 生成器引导检索器训练:根据生成器的性能优化检索器,例如DKRR和AAR等模型利用生成器的注意力分数或生成信号指导检索器的训练,确保检索内容与生成需求一致。 、

    协同训练

    协同训练同时优化检索器和生成器,通过联合训练实现整体系统性能的提升。这种方法确保两个组件的改进相互促进,例如RAG和MIPS等模型通过协同训练优化检索过程,使检索器能够根据生成器的反馈逐步提升检索效果,同时生成器也能更好地利用检索信息。

几种高级RAG形态

多模态RAG

多模态RAG扩展了传统文本RAG系统,通过整合图像、音频、视频等多种模态信息,丰富了系统的输出能力。然而,多模态RAG面临两大挑战:一是如何有效表示和检索跨模态知识,二是如何理解和利用多模态信息生成合适的响应。

多模态表示与检索

多模态RAG的基础在于将不同模态的数据转换为统一的向量表示,并实现跨模态的高效检索。例如,CLIP通过学习图像和文本的对齐表示,实现了跨模态检索;Wav2Vec 2.0和ViViT则分别处理音频和视频内容,提取丰富的特征表示。

多模态理解与生成

多模态RAG系统需要进一步理解跨模态关系并生成连贯的输出。例如,MuRAG和RA-CM3通过检索和生成多模态内容(如图像和文本)提升问答系统的能力;Transfusion和Show-o等模型则结合语言建模和扩散模型,支持广泛的视觉-语言任务。

实例

Flamingo这样的模型将不同模态整合进一个统一的框架内,实现了文本、图像和视频的同时处理。跨模态检索技术涉及在不同模态间检索相关信息。

记忆RAG

记忆RAG通过引入显式记忆机制,弥补了传统RAG系统中隐式记忆和实时检索之间的空白。这种机制在处理长文档理解、个性化知识管理等场景中表现出色。

记忆类型

  • 隐式记忆:存储在模型参数中的知识,例如预训练的检索器和生成器权重,提供快速推理但难以更新。
  • 显式记忆:压缩的、结构化的长期知识表示,例如对整本书或用户行为模式的理解,比隐式记忆更灵活且易于更新。
  • 工作记忆:临时存储的检索文本块,用于当前任务的生成,类似于人类的短期记忆。

技术实现

记忆RAG通过稀疏键值缓存实现显式记忆,例如Memory3通过两阶段预训练将原始输入转换为显式记忆;MemoRAG采用轻量级LLM作为全局记忆系统,提升长文本处理能力;CAG则通过预计算键值缓存完全消除实时检索需求,提高系统效率。

记忆RAG实例

近期推出的支持长期上下文的大型语言模型(LLMs),如Gemini-1.5和GPT-4,显著提升了RAG性能。

Self-Route

Self-Route 通过模型自省动态分配查询至RAG或LC,从而优化计算成本与性能。为RAG和LC在处理长期上下文任务时的最佳应用提供了深刻见解。

SFR-RAG

SFR-RAG是一个小巧而高效的RAG模型,旨在增强LLMs对外部上下文信息的整合,同时减少幻觉现象。

LA-RAG

LA-RAG是一种新型RAG范式,旨在提升LLMs中的自动语音识别(ASR)能力。亮点在于其能够利用细粒度的标记级语音数据存储和语音到语音的检索机制,通过LLM的上下文学习提高ASR的精确度。

HyPA-RAG

LLMs在AI法律和政策背景下因知识过时和幻觉而面临挑战。HyPA-RAG是一个混合参数自适应检索增强型生成系统,通过自适应参数调整和混合检索策略提高了精确度。在NYC Local Law 144的测试中,HyPA-RAG展现了更高的正确性和上下文精度,有效应对了法律文本的复杂性。

MemoRAG

MemoRAG引入了一种新型RAG范式,克服传统RAG系统在处理模糊或非结构化知识时的局限。MemoRAG的双系统架构利用轻量级长距离LLM生成草稿答案并指导检索工具,而更强大的LLM则负责完善最终输出。这一框架针对更好的线索提取和记忆容量进行了优化,在复杂和简单的任务中都显著超越了传统RAG模型。

NLLB-E5

NLLB-E5推出了一个可扩展的多语言检索模型,解决支持多语言,尤其是像印度语这样的低资源语言所面临的挑战。借助NLLB编码器和E5多语言检索器的蒸馏方法,NLLB-E5能够实现跨语言的零样本检索,无需多语言训练数据。在Hindi-BEIR等基准测试上的评估显示了其强大的性能,突显了任务特定的挑战,并推动了全球包容性的多语言信息获取。

Agentic RAG

Agentic RAG将自主智能体与RAG技术结合,通过动态管理检索策略和优化推理过程,显著提升了系统的性能。 框架采用了分层的多智能体结构,子智能体使用小型预训练语言模型(SLMs)针对特定的时间序列任务进行微调。主智能体将任务分配给这些子智能体,从共享知识库中检索相关提示。

查询理解与策略规划

智能体通过分析查询复杂性和主题,制定合适的检索策略。例如,AT-RAG通过主题过滤和迭代推理提升多跳查询的检索效率;REAPER则通过基于推理的检索规划优化复杂查询的处理。

工具利用

Agentic RAG能够利用多种外部工具(如搜索引擎、计算器和API)增强检索和推理能力。例如,AT-RAG和RAGENTIC通过多代理协作和工具集成,灵活应对不同任务需求。

推理与决策优化

智能体通过多步推理和决策优化,评估信息源可靠性并优化检索策略。例如,PlanRAG通过“先计划后检索”的方法提升生成模型的决策能力;REAPER则通过推理增强检索规划,提高系统响应速度。

模型实例

RULE

RULE是一个多模态RAG框架,旨在提升医学视觉-语言模型(Med-LVLM)的事实准确性,通过引入校准选择策略控制事实风险,并开发偏好优化策略平衡模型内在知识与检索上下文,证明了其在提升Med-LVLM系统事实准确性方面的有效性。

METRAG

METRAG,一个多层次、思维增强(thoughts enhanced)的检索增强型生成框架,结合文档相似性和实用性来提升性能。包括一个任务自适应摘要器,以产生蒸馏后内容摘要。利用这些阶段的多次思考,LLM生成知识增强内容,在知识密集型任务上与传统方法相比展现出更优越的性能。

RAFT(Retrieval Augmented Fine-Tuning)

干扰文档是检索增强型微调(RAFT)(Zhang等,2024)的关键特征之一,用不相关、干扰性文档训练模型如何辨别,而直接引用相关来源。结合思维链推理,增强了模型的推理能力。RAFT在特定领域的RAG任务中表现出一致的性能提升,包括PubMed、HotpotQA和Gorilla数据集,作为LLMs的后训练增强。

FILCO

FILCO旨在提升生成模型在开放域问答和事实验证等任务中提供的上下文质量,解决对检索段落过度或不足依赖的问题,可能导致生成输出中的幻觉问题。该方法通过词汇和信息论方法识别有用的上下文,并通过训练上下文过滤模型在测试期间提炼检索上下文,提高了上下文质量。

Self-RAG

反思标记是自反思检索增强型生成(Self-RAG)(Asai等,2023)的关键属性,通过结合检索与自反思来提高大型语言模型(LLMs)的事实准确性。与传统方法不同,Self-RAG自适应地检索相关段落,并使用反思标记评估和提炼其响应,允许模型根据特定任务需求调整行为,并在开放域问答、推理、事实验证和长篇生成任务中表现出优越性能。RAG的智能性和有效性在很大程度上取决于检索质量,对知识库的更多元数据理解将增强RAG系统的有效性。

MK Summary

一种以数据为中心的检索增强型生成(RAG)工作流程,超越了传统的检索-阅读模式,采用了准备-重写-检索-阅读框架,通过整合上下文相关、时间关键或特定领域的信息来增强LLMs。其创新点包括生成元数据、合成问题和答案(QA),并引入文档集群的元知识摘要(MK摘要)。

CommunityKG-RAG

CommunityKG-RAG是一个零样本框架,将知识图谱(KGs)中的社区结构整合到检索增强型生成(RAG)系统中。通过利用KGs中的多跳连接,提高了事实检查的准确性和上下文相关性,超越了不需要额外领域特定训练的传统方法。

RAPTOR

RAPTOR引入了一种层次化方法来增强检索增强型语言模型,解决了传统方法只检索短的、连续文本块的限制。RAPTOR通过递归嵌入、聚类和总结文本,形成摘要树以在不同抽象级别检索信息。实验表明RAPTOR在需要复杂推理的问答任务中表现出优越性能。当与GPT-4配对时,RAPTOR在QuALITY基准测试中的准确性提高了20%。

未来可能的发展方向

这里的方向出自CMU大学的 [2410.12837] A Comprehensive Survey of Retrieval-Augmented Generation (RAG): Evolution, Current Landscape and Future Directions

强化多模态融合

在RAG模型中整合文本、图像、音频和视频数据,需着眼于提升多模态融合技术,实现不同数据类型间的无缝交互,包括:

  • 研发更先进的方法来对齐和合成跨模态信息。

  • 需要更多创新来增强多模态输出的连贯性和情境适应性。

  • 提升RAG系统跨不同模态检索相关信息的能力。例如,结合基于文本的查询与图像或视频内容检索,可以增强视觉问答和多媒体搜索等应用。

扩展性与效率

随着RAG模型在更广泛的大规模应用中部署,其扩展性变得至关重要。研究应聚焦于开发高效扩展检索和生成过程的方法,同时不牺牲性能。分布式计算和高效索引技术对于处理庞大数据集至关重要。提升RAG模型的效率需要优化检索和生成组件,以减少计算资源和延迟。

个性化与适应性

未来的RAG模型应专注于根据个体用户的偏好和情境个性化检索过程。这包括开发基于用户历史、行为和偏好调整检索策略的技术。通过深入理解查询和文档库的上下文和情感,增强RAG模型的上下文适应性,对于提升生成响应的相关性至关重要。研究应探索基于互动上下文的动态调整检索和生成过程的方法,包括将用户反馈和上下文线索整合到RAG流程中。

伦理与隐私考量

解决偏见是未来研究的关键领域,尤其是针对RAG模型的偏见。随着RAG系统在多样化应用中的部署,确保公平性并减少检索和生成内容中的偏见至关重要。未来的RAG研究应聚焦于保护隐私的技术,以在检索和生成过程中保护敏感信息。包括开发安全数据处理方法和隐私意识的检索策略。模型的可解释性也是持续改进RAG研究的一个关键领域。

跨语言及低资源语言支持

拓展RAG技术以支持多语言,尤其是资源匮乏的语言,是一个充满希望的发展方向。

致力于提升跨语言检索与生成能力,确保在不同语言中都能提供准确且相关的结果。提升RAG模型对低资源语言的有效支持,需要开发在有限训练数据下进行内容检索与生成的方法。研究应聚焦于转移学习与数据增强技术,以提高在边缘语言中的表现。

高级检索机制

未来RAG研究应探索能够适应变化查询模式和内容需求的动态检索机制。包括构建能够根据新信息和用户需求演进而动态调整检索策略的模型。

研究混合检索方法,结合密集检索与稀疏检索等不同策略,有望提升RAG系统的效果。研究应着眼于如何整合多样化的检索方式,以适应各种任务并达到最佳性能。

与新兴技术的融合

将RAG模型与脑机接口(BCIs)相结合,可能在人机交互和辅助技术领域开辟新的应用。研究应探讨RAG系统如何利用BCI数据来提升用户体验和生成具有上下文感知的响应。RAG与增强现实(AR)和虚拟现实(VR)技术的结合,为创造沉浸式互动体验提供了机遇。未来的研究应调查RAG模型如何被用于增强AR和VR应用,通过提供上下文相关的信息和交互,提升用户体验。

总结

需要强调的是,优化需服务于实际效果。不同应用场景中,RAG管线的瓶颈可能各不相同,有时是检索召回不足,有时是生成内容不精确。因此在实践中应构建评估验证流程,对RAG系统进行持续的性能监控 。RAG系统的开发是一个迭代优化的过程:引入新技术 -> 评估效果 -> 调整改进,再评估。通过这样的循环,我们才能确保每一项优化确实带来了更好的结果,而不是徒增复杂度。

RAG技术是LLM技术给传统搜索领域带来的一场变革,它能够大幅提高检索能力的准确性和便捷性。尤其值得注意的是,在知识数据的重视程度不断上升的今天,各大信息来源逐渐关闭了大型搜索引擎的检索可能。如小红书、知乎、微信等,都走向了闭源搜索。此外,各大公司内部文档的权限层层,也是闭源的一种体现。笔者认为,RAG项目将成为一个反复造的轮子,是最近几年最容易落地且最热门的项目之一。

下一步阅读

2025年值得关注的21个RAG开源项目,从入门到精通,建议收藏起来慢慢学!!_rag项目-CSDN博客

[2507.09477] Towards Agentic RAG with Deep Reasoning: A Survey of RAG-Reasoning Systems in LLMs

开源的RAG部署项目

🏡 Home | Open WebUI

[RAG 和生成式 AI - Azure AI SearchMicrosoft Learn](https://learn.microsoft.com/zh-cn/azure/search/retrieval-augmented-generation-overview?tabs=docs)

参考资料:

【AI大模型】检索增强生成(RAG)深度教程,收藏这一篇就够了!!_rag检索增强-CSDN博客

不懂RAG?看这一篇万字长文就够了,中科院出品

[2410.12837] A Comprehensive Survey of Retrieval-Augmented Generation (RAG): Evolution, Current Landscape and Future Directions

This post is licensed under CC BY 4.0 by the author.