Abstract
检索增强生成(RAG)通过引入外部知识来缓解大型语言模型(LLM)在开放领域问答任务(OpenQA)中产生的事实错误和幻觉输出的问题。然而,对于复杂的问答任务,现有的 RAG 方法使用 LLM 主动预测检索时机,并直接使用检索到的信息进行生成,而不考虑检索时机是否准确反映了实际的信息需求,或者是否充分考虑了先前检索到的知识,这可能导致信息收集和交互不足,从而产生低质量的答案。为了解决这些问题,我们提出了一种通用的 RAG 方法,称为自适应笔记增强 RAG(Adaptive-Note),用于复杂的问答任务,它包括迭代信息收集器、自适应记忆审查器和任务导向生成器,同时遵循新的 Retriever-and-Memory 范式。具体而言,Adaptive-Note 引入了知识增长的总体视角,以笔记的形式迭代收集新信息,并将其更新到现有的最优知识结构中,从而增强高质量的知识交互。此外,我们采用了一种基于笔记的自适应停止探索策略来决定“检索什么以及何时停止”,以鼓励充分的知识探索。我们在五个复杂的问答数据集上进行了大量实验,结果表明我们的方法及其组件具有优越性和有效性。代码和数据位于 https://github.com/thunlp/Adaptive-Note
。
Introduction
具体而言,Retriever-and-Reader(RAG)系统通常遵循检索器和阅读器的范式,从外部语料库中检索与查询相关的段落,并将其作为上下文与查询一起提供给大型语言模型(LLM),从而生成可靠的答案。然而,普通的 RAG 系统通常无法为复杂的问答任务(如长篇问答和多跳问答)收集足够的信息。这些复杂的问答任务往往涉及广泛或深入的信息检索需求,这些需求可能不会在初始查询中明确体现,也不容易在单次检索尝试中得到满足。例如,在多跳问答中,要回答“丹麦足球联盟所属组织的缩写代表什么?”这个问题,我们必须首先查找缩写“FIFA”,然后查找“FIFA”代表什么。长篇问答也面临类似的挑战,即处理模糊的查询需要探索各种相关方面,并深入挖掘更多细节,以生成全面且长篇的答案。
为解决这一问题,自适应检索增强生成(ARAG)试图自适应地决定“何时以及检索什么”,以灵活地获取更多有价值的知识来回答复杂的问答。尽管其性能有所提升,但主流的 ARAG 方法仍远未令人满意,原因在于两个局限性。首先,每次检索都会立即触发生成,这可能导致每个输出片段仅反映特定检索步骤中的有限知识,而忽略了来自不同检索步骤的信息整合与交互。其次,它们利用大语言模型(LLM)主动预测检索时机;然而,LLM 内部的认知与实际检索需求之间的差异可能导致错过关键的检索时机,从而造成知识收集不足。
为此,我们开发了一种针对复杂问答任务的简单、通用且有效的检索与反馈生成模型(RAG),名为Adaptive Note-Enhanced RAG(Adaptive-Note),它是基于我们提出的一种新颖的范式——检索器与记忆器(Retriever-and-Memory)构建而成的。总体而言,Adaptive-Note 包括两个核心组件,即迭代信息收集器(IIC)和自适应记忆审查器(AMR),它们能够以知识增长的角度自适应地收集信息,并灵活地将新知识与所有已收集的知识进行整合,从而实现良好的性能。首先,为了解决不同检索步骤之间信息交互不佳的问题,IIC 使用笔记作为知识的记忆载体。在检索后不会立即生成结果,而是最大程度地细化与原始查询相关的所有细节,并将其存储在笔记中。然后,新检索到的信息会以任何文本形式自适应地更新到笔记中的现有知识结构中。值得一提的是,知识结构会不断得到细化,并整合之前检索步骤中的所有有效知识。其次,AMR 替换了不确定的主动检索,采用了基于自适应笔记的停止探索策略。它将最优笔记认定为最佳记忆来源,并以此来决定“何时检索以及何时停止”。与对一个陌生领域的学习类似,人类通常会先大量阅读,然后逐渐确定哪些内容要逐渐融入自身已有的知识体系中,直到他们对该领域感到足够熟悉为止。同样地,我们的适应性策略首先允许进行贪婪式探索。如果在某个特定时刻,该笔记不再带来知识增量,那么信息收集就会停止。这种策略有效地避免了主动检索预测中的时间偏差,并确保知识持续获得增量。
Methodology
Task Definition and Overview
受检索器与读者(Retriever-and-Reader)模式的启发,我们提出了一种基于新颖的检索器与记忆(Retriever-and-Memory)模式的自适应笔记增强方法。在实际应用中,我们的方法包含三个组成部分:一个迭代的信息收集器、一个自适应的记忆审查器以及一个任务导向型的生成器。
在 Iterative Information Collector 中,对于输入的问题,我们首先根据从语料库中检索出 top-条相关段落。这条段落被输入到一个大型语言模型(LLM)中生成初始笔记,同时它也充当初始记忆。我们将视为初始阶段的最优记忆。初始化完成后,我们进入迭代阶段。在这个阶段,我们利用当前的最优记忆以及原始查询逐次生成第步的查询集。然后,我们获取新的参考段落,并创建下一个状态 Note,将其称为当前状态 Note。随后,自适应记忆审查器对和进行多维度评估,得出一个二元质量评价标签。该标签决定了的内容是否应当取代现有的记忆成为新的。具体而言,标签值为“真”意味着应该取代记忆中的内容,反之亦然。在审查过程结束后,我们继续迭代信息收集,直至自适应记忆审查器触发迭代终止条件。在迭代结束后,我们使用任务导向生成器通过基于 LLM 的 zero-shot 上下文学习(ICL)生成最终答案,使用 的上下文作为输入。
看上去是在迭代优化query,获取更优信息量的context,最终让context更容易回答初始的query。
Iterative Information Collector (IIC)
Stage 1: Note initialization stage. 我们以问题 开始收集过程,然后将检索任务委托给基于 BM25 或基于 DPR 的检索器,从而获取 条与问题 相关的参考文章。与传统的 RAG 方法不同,在后者中所有检索到的文章都会直接拼接起来作为输入传递给 LLM,而在这里我们初始化一个笔记作为信息载体来记录和整合有价值的检索到的信息。具体而言,我们采用粗粒度的、基于笔记的方法。在这种方法中,我们不对笔记的具体格式或具体信息方面施加限制。同时,我们利用zero-shot的上下文学习来确保语言模型(LLM)能力的多样性。实际上,我们将决策权完全交给了 LLM,只告知它最高层次的目标,即最大限度地收集信息。接下来,我们给出笔记初始化的数学表达式。
笔记初始化阶段的提示模板被定义为 。在此,、 和 分别代表原始查询、“被存储”这一动作以及首次检索到的段落。生成的 直接存储在初始记忆中,充当最优记忆 ,它将作为后续迭代信息收集阶段的输入使用。
Stage 2: Iterative information collection stage. 基于现有信息预测下一个高质量查询对于有效地探索语料库的未知语义空间至关重要。我们利用最优记忆来预测下一个查询。与人类行为类似,我们会基于当前的最佳理解提出新的问题。具体而言,最优记忆 包含了先前检索到的段落中的相关知识,这些知识被简洁且连贯地存储下来,并且从源段落中提取的信息噪声极小。在实际操作中,我们将原始查询 、最优记忆 以及已经提出的问题列表输入进去,以生成下一步检索的高质量查询。我们注意到,如果在前一步中问题没有得到很好的解决,LLMs 往往会再次提出类似的问题。为了避免这种情况,我们引入了已经提出的问题列表,以避免重复或无效的查询。以下是给出的公式。
代表用于生成下一次检索时的新查询的提示模板。已经询问过的查询列表包含了所有先前生成的查询。
Stage 3: Note updating stage. 在这个阶段,我们的目标是利用新的查询来探索语料库中潜在的与查询相关的语义子空间,并将新检索到的段落无缝地整合到现有的知识中。与Note初始化阶段类似,我们没有为将新知识纳入现有知识预先定义特定的模式,例如根据事件进行追加或插入,以避免限制语言模型能力的多样性。相反,我们从“如何稳健地促进有效信息增长”的视角引导语言模型,通过仅使用zero-shot设置来进行复杂的信息收集、细化和更新。为了实现这一点,我们首先使用新的查询来检索个新的段落。接下来,我们将、和传递给语言模型,利用 zero-shot 上下文学习(ICL),最终生成更新后的注释。
表示用于更新笔记的提示模板,它为语言模型(LLM)提供了在三个关键方面提供多维度指导的依据:1)忠实性。所收集的信息应遵循检索到的文档的风格,尽可能利用原始摘录;2)有效性。所收集的信息应有助于解决原始查询;3)扩展性。所收集的信息不应已经在内存中存在;换句话说,只需要添加新的语义内容。我们还提供了一个关于信息增长的视角来描述这个更新过程,在这个过程中,我们基于 的现有知识收集新的信息以生成更新后的 。
在这里, 是通过逐步更新的方式得出的,它会逐步进行比较并选择质量最高的笔记作为记忆内容,而非依赖一次性比较的方式。
Adaptive Memory Reviewer (AMR)
我们的直觉是,在从语料库中检索与问题相关的信息方面存在一个上限。基于这一直觉,自适应记忆审查者专注于两个关键问题:“应将什么内容存储为最优记忆”以及“何时停止检索”。
Trigger1: What to store as the optimal memory. 我们引导语言模型仔细审查在笔记更新阶段生成的更新笔记 的内容以及最优记忆,然后比较它们的内容质量。如果的质量高于,将取代中的原有内存内容,成为最新的最优内存内容。否则, 中的内容保持不变。
其中 表示内容质量比较函数,而 → 表示“存储于”。具体而言,对于 ,我们首先判断 与 相比是否具有新的或额外的非冗余信息。此外,为了进行多维度比较,我们在 的提示模板中以zero-shot设置的方式设计了质量比较的评估标准。这些评估标准包括:1)内容是否包含与问题直接相关的关键信息,2)内容是否具有多个方面,3)内容是否包含足够的细节,以及 4)内容是否足够实用。
Trigger2: When to stop retrieval. 正如之前所述,迭代过程包括持续地从多个来源获取并收集有用信息,并将其整理成笔记,然后将内容质量更高的笔记存储在内存中。我们设置了三个停止条件来自适应地控制笔记更新,从而间接地控制信息收集过程。首先,如果更新后的笔记质量未能超过初始笔记()的质量,那么这一步信息收集过程即被视为无效。因此,我们为无效信息收集的总轮次设定了一个阈值 ,称为无效更新计数(IU)。其次,某些查询可能对应于语料库中的大量长尾知识片段,导致经过多次迭代后笔记的信息内容持续增加。然而,这些详细片段对于回答原始查询可能并非必要。因此,我们分别设定了一个信息收集步骤的最大数量阈值 和一个重复检索段落的最大数量阈值 ,分别命名为收集器迭代次数(CI)**和**重复检索段落数量(RP)。这三个阈值作为停止条件,用于停止迭代过程。迭代过程,满足其中任何一项条件都会导致该过程终止,其数学表达式如下所示:
Task-Oriented Generator
任务导向型生成器读取最优记忆 ,并输出原始查询 的答案 。由于不同的问答任务有不同的输出风格(例如,长生成或短生成),我们调整提示使其具有任务导向性。例如,多跳问答任务需要简短且精确的输出,通常只有几个词,而我们记忆中的知识则以长文本的形式呈现。因此,我们引导 LLM 输出仅关键答案,而不包括无关紧要的词语。相比之下,对于长篇问答任务,我们引导回答风格而非严格的限制。
Results and Analysis
Conclusion
基于名为“检索器与记忆”的小说范式,我们提出了 Adaptive-Note,这是一种适用于复杂问答任务的即插即用且通用的 RAG 方法。我们的方法通过从知识增长的角度迭代收集信息,并根据需要进行自适应更新来模拟人类的学习过程,以提高答案的质量。大量的实验证明了我们的方法及其核心组件的优越性和有效性。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。