Bootstrap

RAG技术详解:构建高效、可信赖的知识检索系统

前言

LLM 问题

幻觉:在没有答案的情况下提供虚假信息。
过时:当用户需要特定的当前响应时,提供过时或通用的信息。
来源:从非权威来源创建响应。由于术语混淆,不同的培训来源使用相同的术语来谈论不同的事情,因此会产生不准确的响应。

RAG 是解决其中一些挑战的一种方法。它会重定向 LLM,从权威的、预先确定的知识来源中检索相关信息。组织可以更好地控制生成的文本输出,并且用户可以深入了解 LLM 如何生成响应。

LLM 知识来源

训练用知识
上下文
外部带索引的知识(指定百科…)

RAG 优势

  1. 提高答案准确性:通过引用外部知识库中的信息,RAG可以提供更准确的回答。
  2. 增加用户信任:用户可以通过引用的来源来验证答案的准确性。
  3. 便于知识更新和引入特定领域知识:RAG通过结合LLMs的参数化知识和外部知识库的非参数化知识,有效地解决了知识更新的问题。

RAG 范式

RAG(Retrieval Augmented Generation)有三个核心组成部分:检索、增强和生成。其整个流程主要可以分为以下五个基本步骤:

  1. 知识文档的准备:这是构建RAG系统的首要步骤,涉及将各种格式的知识源(如Word文档、TXT文件、PDF文件、图片、视频等)通过文档加载器或多模态模型(如OCR技术)转换为纯文本数据。此外,还需要执行文档切片,将长篇文档分割成多个文本块,以提高信息检索的准确性和效率。
  2. 嵌入模型:嵌入模型(Embedding Model)的任务是将文本转换为向量形式。这一步骤通过计算文本的向量表示,使得能够通过向量之间的差异来识别语义上相似的句子。例如,Word2Vec、BERT和GPT等模型都可用于生成文本的向量表示。
  3. 向量数据库:向量数据库(Vector Database)专门设计用于存储和检索向量数据。所有通过嵌入模型生成的向量都会被存储在这样的数据库中,优化了处理和存储大规模向量数据的效率。
  4. 查询检索:用户的问题首先被输入到嵌入模型进行向量化处理,然后在向量数据库中搜索与该问题向量语义上相似的知识文本或历史对话记录并返回。
  5. 生成回答:最后,结合用户提问和检索到的信息,构建出一个提示模版(Prompt Template),输入到大型语言模型(Large Language Model, LLM)中,由模型生成准确的回答。

这个流程是RAG系统的基础,但文章中也提到了多个环节有着极大的优化空间,包括数据清洗、分块处理、元数据、多级索引、索引/查询算法、查询转换、检索参数、高级检索策略、重排模型、提示词和大语言模型等方面。这些优化策略可以帮助提高RAG系统的性能和可用性。

RAG vs 微调

  1. 优化技术的差异:RAG类似于为模型提供教科书,使其能够根据特定查询检索信息。适用于模型需要回答特定查询或处理特定信息检索任务的场景。微调则类似于让学生通过广泛学习来内化知识,适用于模型需要复制特定结构、风格或格式的情况。
  2. 适用场景
    • RAG:适用于需要回答具体查询或特定信息检索任务的场景。
    • 微调:适用于强调基础模型中的现有知识,修改或定制模型输出,为模型提供复杂指令的场景。
  3. 互补性:RAG和微调不是相互排斥的,而是可以相互补充,从不同层面增强模型的能力。在某些情况下,结合这两种技术可以实现最佳的模型性能。

原始RAG、高级RAG和模块化RAG

c5bd2058a71805435d1613fab973e7d0.png

原始RAG(Naive RAG)

原始RAG是最早的研究范式,主要包括以下几个步骤:

  1. 建立索引:这一过程通常在离线状态下进行,包括数据清理、提取,将不同文件格式(如PDF、HTML、Word、Markdown等)转换为纯文本,然后进行文本分块,并创建索引。
  2. 检索:使用相同的编码模型将用户输入转换为向量,计算问题嵌入和文档块嵌入之间的相似度,选择相似度最高的前K个文档块作为当前问题的增强上下文信息。
  3. 生成:将给定的问题和相关文档合并为新的提示,然后由大型语言模型基于提供的信息回答问题。如果有历史对话信息,也可以合并到提示中,用于多轮对话。

原始RAG面临的挑战

  • 检索质量问题:包括低精度(检索集中不所有块都与查询相关,导致可能的幻觉和断层问题)和低召回率(无法检索到所有相关块,阻止LLM获取足够的上下文来合成答案)等。
  • 响应生成质量问题:包括幻觉(模型编造不存在于上下文中的答案)、不相关性(模型生成的答案未能解决查询问题)以及有害或偏见性回应等。
  • 增强过程的挑战:包括有效整合检索段落的上下文与当前生成任务、冗余和重复(多个检索段落包含相似信息导致内容重复)、确定多个检索段落对生成任务的重要性或相关性、处理不同写作风格或语气的差异以确保输出一致性等。

高级RAG (Advanced RAG)

高级RAG针对原始RAG的不足之处进行了有针对性的改进。这些改进涉及检索生成的质量、索引的优化、检索过程的优化等多个方面。

预检索过程

  • 优化数据索引:提高索引内容的质量,包括增加索引数据的细粒度、优化索引结构、添加元数据、对齐优化和混合检索等五个主要策略。
  • 嵌入和索引:涉及通过语言模型将文本编码为向量的过程,包括微调嵌入和动态嵌入。
    • 微调嵌入:提高检索内容与查询之间的相关性。
    • 动态嵌入:基于单词出现的上下文动态调整嵌入。

检索过程优化

  • 重新排序(ReRank):对检索到的信息进行重新排序,将最相关的信息放置在提示的边缘。
  • 提示压缩:通过压缩不相关的上下文、突出关键段落和减少总体上下文长度来提高RAG性能。

高级RAG 特点

  • 高级RAG通过先进的索引方法、更精细的检索策略和有效的后处理方法来优化RAG的性能。
  • 它采用不同的检索技术组合,适应不同的查询类型和信息需求,确保一致地检索到最相关和上下文丰富的信息。
  • 高级RAG还包括对嵌入模型的微调,以提高检索内容的相关性,并使用动态嵌入技术以更好地处理上下文变化。

RAG 管道优化

在“RAG管道优化”这一部分中,论文讨论了针对检索过程的优化,旨在提高RAG系统的效率和信息质量。这些研究主要集中在智能组合各种搜索技术、优化检索步骤、引入认知回溯的概念、灵活应用多样化的查询策略,以及利用嵌入相似性。这些努力共同追求在RAG检索中实现效率和上下文信息丰富度之间的平衡。
RAG检索过程的优化方法:

  1. 探索混合搜索:通过智能融合关键字搜索、语义搜索和向量搜索等技术,RAG系统可以利用每种方法的优势,适应不同类型的查询和信息需求,确保一致地检索到最相关和上下文丰富的信息。
  2. 递归检索和查询引擎:实施递归检索和复杂查询引擎是优化RAG系统检索的另一种强有力的方法。递归检索意味着在初始检索阶段获取较小的文档块以捕获关键语义含义,然后在后续阶段向语言模型提供更多上下文信息的较大块。这种两步检索方法有助于在效率和富有上下文的响应之间找到平衡。
  3. StepBack-prompt:将StepBack-prompt方法集成到RAG过程中,鼓励大型语言模型从特定实例中退后,参与对背后的一般概念或原则的推理。实验结果表明,在各种具有挑战性的、推理密集的任务中,结合后向提示的运用能显著提高性能,显示出其在RAG中的自然适应性。
  4. 子查询:可以在不同场景中采用各种查询策略,包括使用LlamaIndex等框架提供的查询引擎,运用树查询、向量查询,或使用最基本的块序列查询。
  5. HyDE:这种方法基于假设,即生成的答案在嵌入空间中可能比直接查询更接近。使用大型语言模型,HyDE针对查询生成一个假设的文档(答案),嵌入该文档,并利用这种嵌入来检索与假设文档类似的真实文档。与基于查询的嵌入相似性不同,这种方法强调从答案到答案的嵌入相似性。然而,这种方法可能并不总是能够产生有利的结果,特别是在语言模型不熟悉讨论主题的情况下,可能导致生成更多错误实例。

模块化RAG

模块化RAG结构打破了传统的原始RAG框架(索引、检索和生成),提供了更大的多样性和整个过程的灵活性。它整合了各种方法来扩展功能模块,例如在相似性检索中加入搜索模块,以及在检索器中应用微调方法。此外,特定问题的出现促使重构的RAG模块和迭代方法的出现。模块化RAG范式正成为RAG领域的主流,允许采用序列化管道或跨多个模块的端到端训练方法。

新模块

  1. 搜索模块:与原始/高级RAG中的查询和语料库之间的相似性检索不同,搜索模块针对特定场景,将直接搜索引入过程中,使用由LLM生成的代码、查询语言(如SQL、Cypher)或其他自定义工具。
  2. 记忆模块:利用LLM自身的记忆能力来指导检索。原则是找到与当前输入最相似的记忆。例如,Self-mem迭代地使用一个检索增强生成器来创建一个无限的记忆池,结合“原始问题”和“对偶问题”。
  3. 额外生成模块:在检索到的内容中,冗余和噪声是常见问题。额外生成模块利用LLM生成所需的上下文,而不是直接从数据源检索。
  4. 任务适应模块:专注于转换RAG以适应各种下游任务。例如,UPRISE自动从预构建的数据池中检索给定零样本任务输入的提示,增强跨任务和模型的通用性。
  5. 对齐模块:查询和文本之间的对齐一直是影响RAG有效性的关键问题。在模块化RAG时代,研究人员发现,在检索器中添加一个可训练的Adapter模块可以有效缓解对齐问题。
  6. 验证模块:在现实世界场景中,不能总保证检索到的信息是可靠的。检索到不相关的数据可能导致LLM出现幻觉。因此,在检索文档后可以引入额外的验证模块,以评估检索到的文档与查询之间的相关性,增强RAG的鲁棒性。

新模式

模块化RAG的组织方法具有灵活性,允许根据具体问题上下文替换或重新配置RAG过程中的模块。对于原始RAG而言,这种框架提供了适应性和丰富性。当前的研究主要探索两种组织范式,包括添加或替换模块以及调整模块之间的组织流程。

添加或替换模块
  • 模块添加或替换策略:维持检索-阅读的结构,同时引入额外的模块来增强特定功能。例如,RRR[Ma et al., 2023a] 提出了重写-检索-阅读过程,使用LLM性能作为强化学习中重写器模块的奖励。这允许重写器调整检索查询,提高阅读器的下游任务性能。类似地,可以在Generate-Read[Yu et al., 2022]方法中选择性地替换模块,其中LLM生成模块替换了检索模块。Recite-Read [Sun et al., 2022] 将外部检索转换为从模型权重中检索,让LLM先记住任务相关信息,再生成输出,以处理知识密集型自然语言处理任务。
调整模块间流程
  • 模块间流程调整:强调增强语言模型与检索模型之间的互动。DSP[Khattab et al., 2022] 引入了展示-搜索-预测框架,将上下文学习系统视为显式程序而不是终端任务提示,以解决知识密集型任务。ITER-RETGEN [Shao et al., 2023] 利用生成内容指导检索,迭代执行“检索增强生成”和“生成增强检索”,形成检索-阅读-检索-阅读的流程。Self-RAG[Asai et al., 2023b] 遵循决定-检索-反思-阅读过程,引入了一个用于主动判断的模块。这种自适应和多样化的方法允许在模块化RAG框架内动态组织模块。

简单是高级 RAG 的 pipeline 范式

知识库准备

  • 技术/工具:文档加载器(如PDF提取器)、OCR技术、多模态模型。
  • 目的:将不同格式的知识源(Word文档、TXT文件、PDF文件、图片、视频等)转换为文本数据。
  • 过程:使用专门的文档加载器或多模态模型(如OCR技术)提取文本内容;执行文档切片,将长篇文档分割成多个文本块。

向量化

  • 技术/工具:嵌入模型(Embedding Model),如Word2Vec、BERT、GPT。
  • 目的:将文本转换为向量形式,捕捉文本的语义信息。
  • 过程:通过嵌入模型将文本数据转换为向量表示,以便进行语义比较和检索。

索引(Indexing)

  • 技术/工具:向量数据库(Vector Database),如Pinecone、Elasticsearch等。
  • 目的:存储向量化的文档,并建立索引以优化检索效率。
  • 过程:将生成的向量存储在向量数据库中,并构建索引以快速检索与查询向量语义上相似的文档。

为文档或文档片段创建摘要,并将其作为索引的一部分。

检索(Retrieval)

  • 技术/工具:向量相似性搜索算法,如最近邻搜索(ANN)、聚类算法、位置敏感哈希(LSH)等。
  • 目的:根据用户查询检索最相关的知识文本或历史对话记录。获得准确的语义表示.
  • 过程:用户的问题被向量化后,在向量数据库中搜索最相似的文档或信息。

生成回答

  • 技术/工具:大型语言模型(Large Language Model, LLM),如GPT、BERT等。
  • 目的:结合用户查询和检索到的信息,生成准确、相关的回答。
  • 过程:将用户的问题和检索到的文档作为输入,通过大型语言模型生成回答。

场景

RAG技术可以在以下一些常见的自然语言处理任务中发挥作用:

  1. 问答系统 (QA Systems)
    RAG可以用于构建强大的问答系统,能够回答用户提出的各种问题。它能够通过检索大规模文档集合来提供准确的答案,无需针对每个问题进行特定训练。
  2. 文档生成和自动摘要 (Document Automatic Generation and Summarization)
    RAG可用于自动生成文章段落、文档或自动摘要,基于检索的知识来填充文本,使得生成的内容更具信息价值。
  3. 智能助手和虚拟代理 (Intelligent Assistants and Virtual Agents)
    RAG可以用于构建智能助手或虚拟代理,结合聊天记录回答用户的问题、提供信息和执行任务,无需进行特定任务微调。
  4. 信息检索 (Information Retrieval)
    RAG可以改进信息检索系统,使其更准确深刻。用户可以提出更具体的查询,不再局限于关键词匹配。
  5. 知识图谱填充 (Knowledge Graph Population)
    RAG可以用于填充知识图谱中的实体关系,通过检索文档来识别和添加新的知识点。

优势

明晰了RAG的应用范围后,可能会产生疑问:为什么这些场景需要使用RAG,而不是进行微调或者通过其他方法来实现呢?接下来,我们进一步了解RAG的优势。

RAG的具体优势:

  1. 准确性提高:RAG通过与外部知识相关联的答案来提高准确性,减少语言模型中的幻觉问题,使生成的响应更准确、可靠。
  2. 保持信息的时效性和准确性:与传统只依赖训练数据的语言模型相比,RAG可以识别最新信息,保持响应的时效性和准确性。
  3. 透明度:RAG通过引用来源提高答案的透明度,增加用户对模型输出的信任。
  4. 定制化能力:RAG可以通过索引相关文本语料库来定制不同领域的模型,为特定领域提供知识支持。
  5. 安全性和隐私管理:RAG在数据库中内置了角色和安全控制,可以更好地控制数据使用。
  6. 可扩展性:RAG能够处理大规模数据集而无需更新所有参数和创建训练集,使其在经济上更有效率。
  7. 结果的可信度:RAG从最新数据中选择确定性结果,而微调模型在处理动态数据时可能出现幻觉和不准确性,缺乏透明度和可信度。
;