最近
RAG
在日常工作中出现的越来越频繁,网上相关资料很多,今天我们一起来初步认识RAG、了解RAG工作原理、RAG优化的关键技术、如何评估RAG的有效性以及RAG存在的问题挑战。
大型语言模型 (LLM) 已成为我们生活和工作中不可或缺的一部分,通过其惊人的多功能性和智能改变了我们与信息交互的方式。
尽管它们的能力令人印象深刻,但它们并非没有缺陷。这些模型可能会产生误导性的“幻觉”
,依赖可能过时的信息
,在处理特定知识时效率低下
,缺乏专业领域的深度
,并且缺乏推理能力
。
在现实应用中,数据需要不断更新以反映最新发展,并且生成的内容必须透明且可追溯,以管理成本并保护数据隐私。因此,仅仅依靠这些“黑盒子”模型是不够的;我们需要更精细的解决方案来满足这些复杂的需求。
在此背景下,检索增强生成(RAG)
作为人工智能时代的突破性趋势而受到关注。
图中是RAG在问答中的典型应用(向chatGPT询问OpenAI首席执行官SAM Altman的解雇和重新聘用事宜)
RAG 通过在语言模型生成答案之前首先从外部文档数据库检索
相关信息,显著提高了内容的准确性和针对性。
Lewis 于 2020 年提出的 RAG 概念迅速发展,标志着其研究历程的不同阶段。最初,该研究旨在通过在预训练阶段
向语言模型注入额外的知识
来增强语言模型
。ChatGPT 的推出激发了人们对利用大型模型进行深入上下文理解的兴趣,加速了 RAG 在推理阶段
的发展。随着研究人员深入研究大型语言模型 (LLM) 的功能,重点转向增强其可控性和推理技能,以满足不断增长的需求。GPT-4 的出现标志着一个重要的里程碑,它以一种新颖的方法彻底改变了 RAG,将其与微调技术相结合
,同时继续完善预训练策略。
RAG研究的时间轴树
在RAG的技术发展中,从技术范例的角度总结其演变为以下几个阶段:
经典的RAG过程,也称为 Naive RAG,主要包括三个基本步骤:
使用向量相似度搜索检索k个最相关的文档。
将原始查询和检索到的文本组合并输入到LLM中以获得最终答案
Naive RAG 在检索、生成和增强方面面临多重挑战。随后提出了高级 RAG 范式,并涉及Pre-Retrieval 和Post-Retrieval中的附加处理。在检索之前,可以使用查询重写
、路由
和扩展
等方法来对齐问题和文档块之间的语义差异
。检索后,对检索到的文档语料库进行重排
可以避免“Lost in the Middle”现象,或者可以对上下文进行过滤
和压缩
以缩短窗口长度。
随着RAG技术的进一步发展和演进,新的突破超越了传统的Naive RAG Retrieval-Generation框架,产生了Modular RAG的概念。结构上更加自由灵活,引入了更多具体的功能模块,比如查询搜索引擎、多种答案的融合等。从技术上讲,它集成了检索与微调、强化学习和其他技术。在流程方面,RAG 模块经过设计和编排,产生了各种 RAG 模式。
然而,Modular RAG 的出现并不是突然的。三种范式之间存在着继承和发展的关系。Advanced RAG 是 Modular RAG 的特例
,而 Naive RAG 是 Advanced RAG 的特例
。
为了构建一个良好的 RAG 系统,其中增强部分是关键,需要考虑三个关键问题
:
Token、分片、段落、实体、知识图谱等
1、在推理过程中进行一次性检索:检索效率高,但检索文档相关性低;2、平衡效率和信息可能不会产生最优解决方案;自适应地进行搜索;3、每生成N个令牌检索一次信息量大,效率低,信息冗余。
在推理过程中,将检索到的信息集成到生成模型的不同层。1、输入数据层:使用简单,但无法支持检索更多的知识块,且优化空间有限;2、模型中间层:支持更多知识块的检索,但引入了额外的复杂性,并且必须经过训练;3、输出预测层:保证输出结果与检索内容高度相关,但效率较低。
从以上三个问题出发,我们将增强整理如下:
增强来源
:增强可以利用各种形式的数据,包括非结构化数据
,如文本段落、短语或单个单词。也可以使用结构化数据
,如索引文档、三元组数据或子图。另一种方法是不依赖外部信息源,而是充分利用LLMs的内在能力,从LLMs自身生成的内容
中检索。
强化阶段
:检索增强可以在预训练
、微调
和推理
阶段进行,它决定了外部知识的参数化程度,并对应于所需的不同计算资源。
增强过程
:在推理过程中,将检索到的信息集成到生成模型的不同层。最初的检索是一次性过程,但在 RAG 的发展过程中逐渐出现了迭代检索
、递归检索
以及LLMs自行决定检索时机的自适应检索方法
。
Small-2-Big:句子层面的嵌入扩展了生成过程中的窗口。
Slidingwindow:覆盖整个文本,避免语义歧义
摘要:通过摘要检索文档,然后从文档检索文本块。
伪元数据生成:通过为输入的查询生成假设文档和创建文本块可以回答的问题来增强检索。
检索语料库的层次组织
摘要→文档
用摘要检索代替文档检索,不仅检索最直接相关的节点,而且还探索与这些节点相关联的其他节点。
文档→嵌入对象
文档具有嵌入式对象(如表、图表),首先检索实体引用对象,然后查询底层对象,如文档块、数据库、子节点。
根据特定域存储库和下游任务进行微调
微调适配器模块以将Embedding模型与检索数据库对齐
从语料库中迭代检索,以获得更详细、更深入的知识
由LLM动态确定,检索的时间和范围
除了RAG之外,LLM的主要优化策略还包括Prompt Engineering和Fine-tuning(FT)。每个都有其独特的功能。根据对外部知识的依赖和模型调整的要求,它们各自有适合的场景。
RAG就像给了模型一本定制信息检索的教科书,非常适合特定的查询。另一方面,FT 就像学生随着时间的推移内化知识,更适合模仿特定的结构、风格或格式。FT 可以通过增强基础模型的知识、调整输出和教授复杂指令来提高模型的性能和效率。然而,它不擅长整合新知识或快速迭代新用例。RAG 和 FT 并不互斥
;它们是互补
的,一起使用可能会产生最佳效果。
RAG的评估方法多样,主要包括三个质量分数:上下文相关性
、答案忠实度
和答案相关性
。此外,评估涉及四个关键能力:噪声鲁棒性
、拒答能力
、信息整合能力
和反事实鲁棒性
。这些评估维度结合了传统的定量指标和针对RAG特性的专业评估标准,尽管这些标准尚未标准化。
在评估框架方面,有RGB和RECALL等基准,以及RAGAS、ARES和TruLens等自动化评估工具,它们有助于全面衡量RAG模型的性能。
RAG目前面临的挑战:
上下文长度
:检索内容过多超出窗口限制、因过长导致中间部分丢失、如果LLMs的上下文窗口不再受限,RAG应该如何改进?鲁棒性
:如何处理检索到的错误内容?如何过滤和验证检索到的内容?如何提高模型的抗毒性和抗噪声性能?协作微调
:如何同时利用RAG和FT的效果,它们应该如何协调、组织,是串联、交替还是端到端?缩放定律
:RAG模型是否满足缩放定律?在什么情况下RAG可能会出现逆缩放定律现象?LLMs角色
:LLMs可以用于检索(用LLMs的生成或搜索LLMs的记忆替换搜索)、生成、评估。如何进一步探索LLMs在RAG中的潜力?生产准备
:如何减少超大规模语料库的检索延迟?如何确保LLMs不会泄露检索到的内容?RAG的应用不再局限于问答系统
;其影响力正在扩展到更多领域。现在推荐系统
、信息提取
、报告生成
等各种任务开始受益于RAG技术的应用。
与此同时,RAG 衍生出 Langchain
、LlamaIndex
等知名工具。
老刘,刘焕勇,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。
老刘说NLP,将定期发布语言资源、工程实践、技术总结等内容,欢迎关注。
对于想加入更优质的知识图谱、事件图谱、大模型AIGC实践、相关分享的,可关注公众号,在后台菜单栏中点击会员社区->会员入群加入。