大模型RAG问答技术扫盲:RAG的基本认识、演变、关键技术、增强方案及潜在挑战

最近RAG在日常工作中出现的越来越频繁,网上相关资料很多,今天我们一起来初步认识RAG、了解RAG工作原理、RAG优化的关键技术、如何评估RAG的有效性以及RAG存在的问题挑战。

认识RAG

大型语言模型 (LLM) 已成为我们生活和工作中不可或缺的一部分,通过其惊人的多功能性和智能改变了我们与信息交互的方式。

尽管它们的能力令人印象深刻,但它们并非没有缺陷。这些模型可能会产生误导性的“幻觉”,依赖可能过时的信息,在处理特定知识时效率低下缺乏专业领域的深度,并且缺乏推理能力

在现实应用中,数据需要不断更新以反映最新发展,并且生成的内容必须透明且可追溯,以管理成本并保护数据隐私。因此,仅仅依靠这些“黑盒子”模型是不够的;我们需要更精细的解决方案来满足这些复杂的需求。

在此背景下,检索增强生成(RAG)作为人工智能时代的突破性趋势而受到关注。

图中是RAG在问答中的典型应用(向chatGPT询问OpenAI首席执行官SAM Altman的解雇和重新聘用事宜)

RAG 通过在语言模型生成答案之前首先从外部文档数据库检索相关信息,显提高了内容的准确性和针对性。

RAG 的演变

Lewis 于 2020 年提出的 RAG 概念迅速发展,标志着其研究历程的不同阶段。最初,该研究旨在通过在预训练阶段向语言模型注入额外的知识增强语言模型。ChatGPT 的推出激发了人们对利用大型模型进行深入上下文理解的兴趣,加速了 RAG 在推理阶段的发展。随着研究人员深入研究大型语言模型 (LLM) 的功能,重点转向增强其可控性和推理技能,以满足不断增长的需求。GPT-4 的出现标志着一个重要的里程碑,它以一种新颖的方法彻底改变了 RAG,将其与微调技术相结合,同时继续完善预训练策略。

RAG研究的时间轴树

在RAG的技术发展中,从技术范例的角度总结其演变为以下几个阶段:

原始RAG

经典的RAG过程,也称为 Naive RAG,主要包括三个基本步骤:

  • 索引 - 将文档语料库分割成较短的块并通过编码器构建向量索引。
  • 检索 - 根据问题和块之间的相似性检索相关文档片段。
  • 生成 - 根据检索到的上下文生成问题的答案。
索引 -> 检索 -> 生成
步骤1 索引
  1. 将文档分成均等块,每个块都是原始文本的一部分。
  2. 使用编码模型为每个块生成嵌入。
  3. 将每个块的嵌入存储在矢量数据库中。
步骤2 检索

使用向量相似度搜索检索k个最相关的文档。

步骤3 生成

将原始查询和检索到的文本组合并输入到LLM中以获得最终答案

高级RAG

Naive RAG 在检索、生成和增强方面面临多重挑战。随后提出了高级 RAG 范式,并涉及Pre-Retrieval 和Post-Retrieval中的附加处理。在检索之前,可以使用查询重写路由扩展等方法来对齐问题和文档块之间的语义差异。检索后,对检索到的文档语料库进行重排可以避免“Lost in the Middle”现象,或者可以对上下文进行过滤压缩以缩短窗口长度。

索引优化 -> 检索前流程 -> 检索 -> 检索后流程 -> 生成
  • 优化数据索引:滑动窗口,细粒度分割,添加元数据
  • 预检索过程:检索路线,摘要,重写和信心判断
  • 后检索过程:重新排序,过滤内容检索

模块化RAG

随着RAG技术的进一步发展和演进,新的突破超越了传统的Naive RAG Retrieval-Generation框架,产生了Modular RAG的概念。结构上更加自由灵活,引入了更多具体的功能模块,比如查询搜索引擎、多种答案的融合等。从技术上讲,它集成了检索与微调、强化学习和其他技术。在流程方面,RAG 模块经过设计和编排,产生了各种 RAG 模式。

然而,Modular RAG 的出现并不是突然的。三种范式之间存在着继承和发展的关系。Advanced RAG 是 Modular RAG 的特例而 Naive RAG 是 Advanced RAG 的特例

RAG是如何进行增强的?

为了构建一个良好的 RAG 系统,其中增强部分是关键,需要考虑三个关键问题

  • 检索什么?

Token、分片、段落、实体、知识图谱等

  • 何时检索?

1、在推理过程中进行一次性检索:检索效率高,但检索文档相关性低;2、平衡效率和信息可能不会产生最优解决方案;自适应地进行搜索;3、每生成N个令牌检索一次信息量大,效率低,信息冗余。

  • 如何使用检索到的信息?

在推理过程中,将检索到的信息集成到生成模型的不同层。1、输入数据层:使用简单,但无法支持检索更多的知识块,且优化空间有限;2、模型中间层:支持更多知识块的检索,但引入了额外的复杂性,并且必须经过训练;3、输出预测层:保证输出结果与检索内容高度相关,但效率较低。

从以上三个问题出发,我们将增强整理如下:

  • 增强来源:增强可以利用各种形式的数据,包括非结构化数据,如文本段落、短语或单个单词。也可以使用结构化数据,如索引文档、三元组数据或子图。另一种方法是不依赖外部信息源,而是充分利用LLMs的内在能力,从LLMs自身生成的内容中检索。

  • 强化阶段:检索增强可以在预训练微调推理阶段进行,它决定了外部知识的参数化程度,并对应于所需的不同计算资源。

  • 增强过程:在推理过程中,将检索到的信息集成到生成模型的不同层。最初的检索是一次性过程,但在 RAG 的发展过程中逐渐出现了迭代检索递归检索以及LLMs自行决定检索时机的自适应检索方法

RAG优化的关键技术

1、优化数据索引

  • 块优化

Small-2-Big:句子层面的嵌入扩展了生成过程中的窗口。

Slidingwindow:覆盖整个文本,避免语义歧义

摘要:通过摘要检索文档,然后从文档检索文本块。

  • 添加元数据
    伪元数据,例如:页面、时间、类型、文档、标题

伪元数据生成:通过为输入的查询生成假设文档和创建文本块可以回答的问题来增强检索。

  • 元数据过滤/浓缩 剖析并注释文件。在查询时,除了语义查询之外,还推理元数据过滤

2、结构化的语料库

检索语料库的层次组织

  • 摘要→文档
    用摘要检索代替文档检索,不仅检索最直接相关的节点,而且还探索与这些节点相关联的其他节点。

  • 文档→嵌入对象
    文档具有嵌入式对象(如表、图表),首先检索实体引用对象,然后查询底层对象,如文档块、数据库、子节点。

3、优化检索数据来源

4、知识图谱作为检索来源

GraphRAG
  • 从用户输入查询中提取实体,然后构建子图形成上下文,最后将其输入到大模型中进行生成。
实现思路
  • 使用LLM(或其他模型)从问题中提取关键实体;
  • 检索基于实体的子图,挖掘到一定的深度,例如:2跳或更多跳;
  • 利用获得的上下文通过LLM生成答案。

5、优化查询语句

  • 问题和答案并不总是具有很高的语义相似度;
  • 调整查询可以得到更好的检索结果。

6、优化 Embedding

  • 选择更合适的 Embedding
  • 微调 Embedding 模型

根据特定域存储库和下游任务进行微调

微调适配器模块以将Embedding模型与检索数据库对齐

7、检索流程优化

从语料库中迭代检索,以获得更详细、更深入的知识

由LLM动态确定,检索的时间和范围

8、混合方案(RAG + 微调)

除了RAG之外,LLM的主要优化策略还包括Prompt Engineering和Fine-tuning(FT)。每个都有其独特的功能。根据对外部知识的依赖和模型调整的要求,它们各自有适合的场景。

RAG就像给了模型一本定制信息检索的教科书,非常适合特定的查询。另一方面,FT 就像学生随着时间的推移内化知识,更适合模仿特定的结构、风格或格式。FT 可以通过增强基础模型的知识、调整输出和教授复杂指令来提高模型的性能和效率。然而,它不擅长整合新知识或快速迭代新用例。RAG 和 FT 并不互斥;它们是互补的,一起使用可能会产生最佳效果。

RAG整体框架

如何评估 RAG 的有效性?

评估方法

1 独立评估

1.1 检索
  • 评估查询检索的文本块的质量指标:MRP,命中率,NDCG;
1.2 生成/合成
  • 检索文档增强的上下文质量评价指标:上下文相关性。

2 端到端评估

2.1 评估模型最终生成的内容
  • 由带有标签的生成内容:EM,无标签的准确性:保真,相关性,无害;
  • 采用人工评价方法进行自动评价(LLM评估)。

关键指标和能力

RAG的评估方法多样,主要包括三个质量分数:上下文相关性答案忠实度答案相关性。此外,评估涉及四个关键能力:噪声鲁棒性拒答能力信息整合能力反事实鲁棒性。这些评估维度结合了传统的定量指标和针对RAG特性的专业评估标准,尽管这些标准尚未标准化。

在评估框架方面,有RGB和RECALL等基准,以及RAGAS、ARES和TruLens等自动化评估工具,它们有助于全面衡量RAG模型的性能。

RAG框架总结

RAG面临的挑战

RAG目前面临的挑战:

  • 上下文长度:检索内容过多超出窗口限制、因过长导致中间部分丢失、如果LLMs的上下文窗口不再受限,RAG应该如何改进?
  • 鲁棒性:如何处理检索到的错误内容?如何过滤和验证检索到的内容?如何提高模型的抗毒性和抗噪声性能?
  • 协作微调:如何同时利用RAG和FT的效果,它们应该如何协调、组织,是串联、交替还是端到端?
  • 缩放定律:RAG模型是否满足缩放定律?在什么情况下RAG可能会出现逆缩放定律现象?
  • LLMs角色:LLMs可以用于检索(用LLMs的生成或搜索LLMs的记忆替换搜索)、生成、评估。如何进一步探索LLMs在RAG中的潜力?
  • 生产准备:如何减少超大规模语料库的检索延迟?如何确保LLMs不会泄露检索到的内容?

RAG 生态系统

RAG的应用不再局限于问答系统;其影响力正在扩展到更多领域。现在推荐系统信息提取报告生成等各种任务开始受益于RAG技术的应用。

与此同时,RAG 衍生出 LangchainLlamaIndex等知名工具。

引用

  • https://github.com/Tongji-KGLLM/RAG-Survey
  • https://arxiv.org/pdf/2312.10997.pdf


关于我们

老刘,刘焕勇,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。

老刘说NLP,将定期发布语言资源、工程实践、技术总结等内容,欢迎关注。

对于想加入更优质的知识图谱、事件图谱、大模型AIGC实践、相关分享的,可关注公众号,在后台菜单栏中点击会员社区->会员入群加入。

相关推荐

  • 20240313大模型进展早报:兼论大模型FAQ生成及RAG多轮问答
  • 深度学习训练过程可视化(附github源码)
  • 深度学习模型加速方法详解:以ERNIE工业化部署为例(速度提升7倍)
  • 大厂年终奖也太…只发了4.5个月,准备跑路了…
  • IP地址无所遁形!试试这个3k星热门开源查询神器!
  • 从 ChatGPT 到 Sora,国内的大模型追赶之路到底有多远?
  • 台大李宏毅老师新课:生成式人工智能导论
  • 大厂学妹整理的 2024 顶会论文,已经碾压同事了!
  • 我重构了第三方登录
  • 最强 Java 面试题库,堪称涨薪天花板!
  • V8引擎Promise源码全面解读(深度好文)
  • 互联网大厂都在用 Linux 系统优化指南
  • IDEA 接口调试神器,贼好用!
  • 当 React 核心开发者逐渐离开 ,React 在社区还有未来吗?
  • 时间序列和时空数据大模型综述!
  • 提高大模型微调效率最新SOTA,性能强大易复现!
  • 详解 Spark Core 调优之数据倾斜调优(建议收藏)
  • 性能优化的PDCA
  • “毒舌”CTO又来了:知识工程才是未来!
  • 有奖征文丨探索AI绘画,赢机械键盘、耳机与鹅厂开发者周边