探索RAG(二)

概要

在探索RAG(一)中,提到RAG的基本方式和流程,可能基础较差的伙伴对于此方法一知半解。在本节中,我将从大模型层面阐述RAG出现的意义,并在此基础上探讨RAG的三种形式:native RAG,advanced RAG, modular RAG。

LLMs下的RAG

在上节中提到,预训练大模型存在两大难题:

  • LLMs获取和精确操作知识的能力仍然有限,因此在知识密集型任务中,他们的性能落后于特定于任务的体系结构。
  • 为LLMs的决策提供来源和更新他们的世界知识仍然是悬而未决的研究问题。

LLMs面临着重大的局限性,这种局限性尤其体现在特定领域或知识密集型任务中,特别是在处理超出其训练数据或需要当前信息的查询时会产生“幻觉”。为了克服这些挑战,检索增强生成(RAG)通过语义相似度计算从外部知识库中检索相关文档块来增强LLM。通过引用外部知识,RAG有效地减少了生成事实上不正确的内容的问题。
对于RAG的工作模式,简单来说,就是给用户向大模型提问语句增添上下文,从而扩充了输入的信息,使大模型能够在更为完整的信息下回答用户,如下图所示,在这里先将RAG看为黑盒子:
在这里插入图片描述

那么为什么RAG能够使的大模型在特定领域或者知识密集型任务中表现突出呢?归根结底,是LLMs拥有强大的上下文学习能力。最初,RAG的成立恰逢Transformer架构的兴起,专注于通过预训练模型(PTM)整合额外的知识来增强语言模型。这一早期阶段的特点是旨在完善预训练技术的基础工作。ChatGPT 的随后到来标志着一个关键时刻,LLM展示了强大的上下文学习能力。RAG研究转向为LLM提供更好的信息,以在推理阶段回答更复杂和知识密集型的任务,导致RAG研究的快速发展。随着研究的进展,RAG的增强不再局限于推理阶段,而是开始更多地结合LLM微调技术。
RAG的出现,同时也推动了大模型的落地发展,尤其是数据保密级别很高的公司和企业,试想一下,在RAG没出现之前,将保密性高的数据去进行训练,是多么冒险的一件事!

RAG

RAG的一个典型应用如下图所示(来源于论文《Retrieval-Augmented Generation for Large Language Models: A Survey》)。用户向ChatGPT提出了一个关于最近广泛讨论的新闻的问题。鉴于ChatGPT依赖于预训练数据,它最初缺乏提供最新发展的能力**。RAG通过从外部数据库获取和整合知识来弥补这一信息差距**。在这种情况下,它收集与用户查询相关的相关新闻文章。这些文章与原始问题相结合,形成了一个全面的提示,使LLM能够生成一个消息灵通的答案。RAG研究范式在不断发展,可分为三个阶段:朴素RAG,高级RAG和模块化RAG。在这里插入图片描述
RAG的核心技术是:“检索”,“生成”和“增强”,在介绍native RAG,advanced RAG,modular RAG时,我将按照这三种核心方法去阐述,深入研究他们的协同工作。

native RAG

早在1999年,已经出现了关于native RAG的研究,native RAG遵循着传统的过程,包括索引,检索和生成,这也被称为“检索—读取”框架。

  • 索引 从清理和提取PDF、HTML、Word和Markdown等不同格式的原始数据开始,然后将其转换为统一的纯文本格式。为了适应语言模型的上下文限制,文本被分割成更小的、可消化的块。然后使用嵌入模型将块编码成矢量表示并存储在矢量数据库中。这一步对于在后续检索阶段实现高效的相似性搜索至关重要。
  • 检索 在接收到用户查询时,RAG系统采用在索引阶段期间使用的相同编码模型来将查询变换成向量表示。然后计算查询向量和索引语料库中的块向量之间的相似性得分。系统优先化并检索表现出与查询的最大相似性的前K个块。这些块随后被用作prompt中的扩展上下文。
  • 生成 提出的查询和选定的文档被合成为一个连贯的提示,一个大型的语言模型负责制定一个响应。模型的回答方法可能会因特定任务的标准而异,允许它利用其固有的参数知识或将其响应限制在所提供的文档中包含的信息上。在正在进行的对话的情况下,任何现有的会话历史都可以集成到提示中,使模型能够有效地参与多轮对话交互。
    在这里插入图片描述
    native RAG同时也有不可避免的缺点:
  • 检索挑战 检索阶段经常与精确度和召回率作斗争,导致选择不对齐或不相关的块,以及丢失关键信息。
  • 生成困难 在生成响应时,模型可能会面临幻觉的问题,在这种情况下,它会生成检索到的上下文不支持的内容。
  • 增强障碍 将检索到的信息与不同的任务相结合可能具有挑战性,有时会导致输出脱节或不连贯。

此外,还有一种担忧,即生成模型可能过度依赖于增强信息(检索到的信息),导致输出只是回应检索到的内容,而没有添加有洞察力的或综合的信息。

Aavanced RAG

Advanced RAG引入了特定的改进来克服Naive RAG的局限性。它以提高检索质量为中心,采用了检索前和检索后的策略。为了解决索引问题,Advanced RAG通过使用滑动窗口方法、细粒度分段和元数据合并来改进其索引技术。
改进的检索前机制–预检索过程,包括两大方面方法优化索引结构原始查询。在优化索引结构使用的方法是增强数据粒度、优化索引结构、添加元数据、对齐优化和混合检索,目的为了增强被索引的内容。在优化原始查询方面,是通过提高原始问题的清晰度,使其更加适合检索,包括的方法使查询重写、查询变换、查询扩展等(可以理解成类似于方言转换为普通话,更为通用和清晰)。
对于后检索结果而言,重点使在于将检索信息与被检索信息完美融合,即完美集成化。主要方法是进行重新排序上下文压缩。对检索到的信息重新排序,将最相关的内容重新定位到提示的边缘,这是一个关键策略。这个概念已经在LlamaIndex 2,LangChain 3和HayStack等框架中实现。将所有相关文档直接输入LLM会导致信息过载,用无关内容稀释对关键细节的关注。为了减轻这种情况,检索后的工作集中在选择基本信息,强调关键部分,并缩短要处理的上下文(理解为提炼精华内容)。

Modular RAG

模块化 RAG 架构超越了两个 RAG 范例,提供了更强的适应性和多功能性。它采用了多种策略来改进其,例如为相似性搜索添加搜索模块,并通过微调完善检索器(将检索内容和被检索内容放在一块,用[SEP]分割,进行微调训练,相关输出1,不相关输出0)。诸如重组的RAG模块和重新安排的RAG管道等创新已经被引入以应对特定的挑战。向模块化 RAG 方法的转变正变得越来越普遍。模块化 RAG 方法的转变正变得越来越普遍,这种方法既支持顺序处理,也支持在各组件之间进行端到端集成训练。尽管尽管模块化 RAG 具有独特性,但它是建立在高级 RAG 和的基本原则,也就是native RAG与advanced RAG的组合使用,这个方向值得去探索。

新模块

新模块化RAG框架通过引入多个专业组件,显著提升了检索和处理能力。其搜索模块利用LLM生成的代码和查询语言,适应特定场景搜索多种数据源;RAGFusion通过多查询策略解决了传统搜索的局限,利用并行搜索和智能排序揭示知识;内存模块利用LLM内存创建无限内存池,增强文本与数据对齐;路由模块导航不同数据源,选择最佳查询路径;预测模块减少冗余和噪声,确保检索相关性;任务适配器模块则定制化RAG以满足不同任务需求。此综合框架简化了检索过程,提高了检索信息的质量和相关性,为各种任务和查询提供了更高的精度和灵活性。

新模式

模块化RAG通过允许模块替换和重新配置,展现出卓越的适应性,超越了Naive和Advanced RAG的固定结构。它通过集成新模块或调整模块间交互来增强灵活性,适用于不同任务。创新模型如Rewrite-Bit-Read、Generate-Read和ReciteRead等,利用LLM的能力提升检索和查询效果,改进了处理知识密集型任务的能力。混合检索策略、子查询和假设文档嵌入等技术则提高了检索相关性和性能。模块排列和交互的调整,如DSP框架和ITERRETGEN流程,展示了模块间协同作用的深入理解。模块化RAG的灵活编排使得通过FLARE、Self-RAG等技术实现自适应检索成为可能,超越了固定RAG检索的局限,并能更容易地与其他技术(如微调或强化学习)集成,从而优化检索结果和个性化输出。

总结

本节从大模型层面阐述RAG出现的意义,并在此基础上探讨RAG的三种形式:native RAG,advanced RAG, modular RAG。下节将探讨RAG与微调的区别。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桔色的猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值