为什么RAG能解决AI幻觉?技术原理深度剖析
近年来,随着人工智能技术的发展,大型语言模型(LLMs)已经成为许多自然语言处理任务中不可或缺的一部分。
近年来,随着人工智能技术的发展,大型语言模型(LLMs)已经成为许多自然语言处理任务中不可或缺的一部分。然而,这些模型仍然存在一些限制,尤其是在知识密集型任务方面,大模型可能会因为缺少实时更新的信息或领域知识,从而产生“幻觉”问题。为了解决大模型幻觉问题,一种名为 Retrieval-Augmented Generation (RAG) 的技术应运而生。
什么是RAG?
RAG 技术通过从外部知识库中检索相关文档片段来增强 LLM 的能力,从而提高生成文本的准确性和可信度。这种方法不仅可以减少产生不正确的内容的风险,还可以帮助 LLM 更好地应对复杂的知识密集型任务。因此,RAG 技术已成为 LLM 应用于实际场景的重要手段之一。
RAG发展历程
在图1中,大模型时代RAG的发展轨迹具有几个明显的阶段特征。最初,RAG的诞生与Transformer架构的兴起相吻合,通过预训练模型(PTM)将额外的知识融入语言模型,从而增强语言模型。这个早期阶段的特点是以改进预训练技术为目标的基础工作。随后ChatGPT的到来标志着一个关键的时刻,LLM展示了强大的上下文学习(ICL)能力。RAG的研究转向为LLM提供更好的信息,以便在推断阶段回答更复杂、知识密集型的任务,导致RAG研究的快速发展。随着研究的进展,RAG的提升不再局限于推理阶段,而是开始更多地融入LLM微调技术。
RAG 的概述
RAG 的一个典型应用如图 2 所示。在这里,用户向 ChatGPT 提出关于最近广泛讨论的新闻的问题。由于 ChatGPT 依赖于预训练数据,因此它最初缺乏提供最新发展的能力。RAG 通过从外部数据库中获取并整合知识来填补这一信息缺口。在这种情况下,它会收集与用户查询相关的相关新闻文章。这些文章与原始问题相结合,形成了一个全面的提示,使 LLM 能够生成一个明智的答案。
RAG 研究范式正在不断发展,我们将其分为三个阶段:Naive RAG、Advanced RAG 和Modular RAG,如图 3 所示。
Naive RAG
Naive RAG遵循传统的索引、检索和生成过程,这也可以称为“检索-读取”框架。
- 索引:从清洗和提取多种格式的原始数据开始,例如PDF、HTML、Word 和 Markdown,然后将其转换为统一的纯文本格式。为了适应语言模型的上下文限制,文本被分割成更小、更容易消化的部分。这些部分随后通过嵌入模型编码为矢量表示,并存储在矢量数据库中。这一阶段对于在后续检索阶段实现高效的相似度搜索至关重要。
- 检索:当接收到用户查询时,RAG 系统会使用在索引阶段使用的相同编码模型将查询转换为向量表示形式。然后,它计算查询向量与索引语料库中片段向量之间的相似度得分。系统优先考虑并检索出最相关的 K 个片段,这些片段与查询具有最高的相似度。随后,这些片段用作提示中的扩展上下文。
- 生成:所提出的查询和选定的文档被综合为一个连贯的提示,大型语言模型的任务是制定响应。根据任务特定的标准,该模型对回答的方法可能有所不同,使其能够利用其固有的参数知识或限制其响应在提供的文档中包含的信息内。对于正在进行的对话,在提示中可以集成任何现有的对话历史记录,使模型能够有效地进行多轮对话交互。
然而,Naive RAG 有一些明显的缺点:
- 检索挑战。检索阶段常常难以精确地检索信息并返回,导致选择不匹配或不相关的块,并遗漏关键信息。
- 生成困难。在生成响应时,模型可能会遇到幻觉问题,即它产生的内容没有得到检索上下文的支持。这个阶段也可能受到输出中的不相关性、毒性或偏见的影响,从而降低了响应的质量和可靠性。
- 增强障碍。 将检索的信息与不同的任务相结合可能具有挑战性,有时会导致支离破碎或不连贯的输出。 该过程还可能会遇到冗余,因为从多个来源检索到类似信息,导致重复响应。 确定各种段落的重要性和相关性并确保文体和语调的一致性会增加复杂性。 面对复杂的问题时,仅根据原始查询执行一次检索可能不足以获取足够的上下文信息。
此外,还有一个担忧是生成模型可能过于依赖增强信息,导致输出的内容只是简单地重复检索到的内容,而没有添加任何洞察力或合成的信息。
Advanced RAG
Advanced RAG引入了特定的改进,以克服Naive RAG的局限性。它专注于提高检索质量,并使用预检索和后检索策略。为了解决索引问题,Advanced RAG通过使用滑动窗口方法、精细分割和元数据集成来优化其索引技术。此外,它还包含几个优化方法来简化检索过程。
- 检索前处理。在这个阶段,主要关注优化索引结构和原始查询。索引优化的目标是提高被索引的内容的质量。这包括策略:细化数据粒度、优化索引结构、添加元数据、对齐优化和混合检索。而查询优化的目标是使用户的原始问题更清晰,并使其更适合检索任务。常用的方法包括查询改写、查询转换、查询扩展和其他技术。
- 后检索过程。 一旦获取了相关信息,就有必要有效地将其与查询进行整合。 后检索过程的主要方法包括重新排序块和语境压缩。 将检索到的信息重新排名以将最相关的内容移到提示的边缘是一项关键策略。 这个概念已经被实现为诸如LlamaIndex2、LangChain3和HayStack之类的框架。 将所有相关的文档直接馈入 LLM 可能会导致信息过载,用不相关的内容稀释对关键细节的关注。为此,后检索工作侧重于选择重要信息、强调关键部分并缩短要处理的上下文。
Modular RAG
Modular RAG 架构超越了之前的两个 RAG 模式,提供了增强的适应性和多功能性。它集成了各种策略来改进其组件,例如添加搜索模块以进行相似度搜索,并通过微调对检索器进行精炼。引入了重组的 RAG 模块 和重新排列的 RAG 管道 来解决特定挑战。向Modular RAG 方法的转变正在变得越来越普遍,在其组件中支持顺序处理和端到端训练。尽管具有独特性,但Modular RAG 建立在Advanced RAG和Naive RAG 的基础原则上,展示了 RAG 家族中的一个进步和改进。
- 新模块:分块RAG框架引入了额外的专业组件,以增强检索和处理能力。
- 搜索模块适应特定场景,使用生成的代码和查询语言直接在各种数据源(如搜索引擎、数据库和知识图谱)之间进行搜索。
- RAG融合通过采用多查询策略来解决传统搜索方法的局限性,该策略将用户查询扩展到不同的视角,并利用并行向量搜索和智能重排来发现显式和转换性的知识。
- 记忆模块利用模型的记忆来指导检索,创建一个无界的内存池,其中包含来自模型的大量预测结果。通过迭代自我增强,使文本与数据分布更加吻合。
- RAG 系统中的路由在各种数据源之间导航,为查询选择最佳路径,无论是摘要、特定数据库搜索还是合并不同的信息流。
- 预测模块旨在通过 LLM 直接生成上下文来减少冗余和噪声,确保相关性和准确性。
- 最后,任务适配器模块针对各种下游任务定制 RAG,自动化零样本输入的提示检索,并通过少量查询生成创建任务特定的检索器。这种全面的方法不仅简化了检索过程,还显著提高了检索到的信息的质量和相关性,满足了广泛的任务和查询需求,具有更高的精度和灵活性。
- 新模式:可组装的 RAG 通过允许模块替换或重新配置来解决特定挑战,从而提供显著的适应性。这超出了Naive RAG和Advanced RAG 的固定结构,其特点是简单的“检索”和“读取”机制。此外,可组装的 RAG 通过集成新的模块或将现有模块之间的交互流程调整为更灵活的形式,从而扩大了这种灵活性,使其在不同的任务中具有更强的应用性。
- Rewrite-Retrieve-Read 模型等创新利用了 LLM 的能力,通过重写模块和基于语言模型的反馈机制来改进检索查询,从而提高任务性能。类似地,Generate-Read方法用 LLM 生成的内容取代传统的检索,而Recite-Read方法强调从模型权重中检索,增强了模型处理知识密集型任务的能力。Hybrid retrieval策略结合关键字、语义和向量搜索以满足不同查询。此外,使用子查询和假设文档嵌入(HyDE)寻求通过关注生成答案与真实文档之间的嵌入相似性来提高检索相关性。
- 模块排列和交互的调整,如 Demonstrate-Search-Predict (DSP) 框架和迭代检索-阅读-检索-阅读流程的 ITER-RETGEN 展示了动态使用模块输出来增强另一个模块的功能,展示了对增强模块协同作用的复杂理解。Modular RAG 流程的灵活编排展示了通过诸如 FLARE 和 Self-RAG 等技术进行自适应检索的好处。这种方法超越了固定的 RAG 检索过程,根据不同的场景评估检索的必要性。灵活架构的另一个好处是,RAG 系统可以更容易地与其他技术(例如微调或强化学习)集成。例如,这可能包括为获得更好的检索结果而微调检索器、为生成更个性化的输出而微调生成器,或者参与协作微调。
RAG 和 Fine-tuning 的关系
由于其日益普及,大模型引起了人们的极大关注。在优化方面,用于 LLM 的方法,RAG 经常与微调 (FT) 和提示工程进行比较。
如图 4 所示,每种方法都具有不同的特征。我们使用一个四分之一图来说明这三个方法在两个维度上的差异:外部知识需求和模型适应性要求。提示工程利用了模型固有的能力,对外部知识和模型适应性的需求最少。RAG 可以被类比为为信息检索提供给定模型定制教科书,非常适合精确的信息检索任务。相比之下,FT 相当于学生随着时间推移内化知识,适用于需要复制特定结构、风格或格式的情况。
RAG 在动态环境中表现出色,因为它可以提供实时知识更新,并有效利用具有高可解释性的外部知识源。然而,它在数据检索方面带来了更高的延迟和道德考虑。另一方面,FT 更静态,需要重新训练以进行更新,但使模型的行为和风格能够深度定制。它需要大量的计算资源来准备数据集和训练,虽然它可以减少幻觉,但它可能面临不熟悉的数据带来的挑战。
在对不同主题的各种知识密集型任务进行多次评估时,虽然无监督微调显示出一些改进,但 RAG 在训练中遇到的所有现有知识以及全新的知识方面始终优于它。此外,发现 LLM 通过无监督微调很难学习新的事实信息。选择 RAG 还是FT 取决于应用程序上下文中数据动力学、定制和计算能力的具体需求。RAG 和 FT 不是对立的,可以相互补充,提高模型的不同层次的能力。在某些情况下,它们的联合使用可能会导致最佳性能。涉及 RAG 和 FT 的优化过程可能需要多个迭代才能实现令人满意的结果。
检索
在RAG语境中,高效地从数据源检索相关文档至关重要。有几个关键问题需要考虑,比如检索源、检索粒度、检索预处理以及选择相应的嵌入模型。
RAG 依赖外部知识来增强 LLM,而检索源的类型和检索单元的粒度都影响最终生成的结果。
- 数据结构:最初,文本是检索的主要来源。随后,检索源扩大到包括半结构化数据(PDF)和结构化数据(知识图谱,KG),以增强检索功能。除了从原始外部来源进行检索外,最近的研究还越来越倾向于利用来自LLMs自身生成的内容来实现检索和增强目的。
- 非结构化数据,如文本,是最广泛使用的检索源,主要来自语料库。对于 开放域问答 (ODQA) 任务,主要的检索源包括维基百科数据库 dump,当前的主要版本包括 HotpotQA 4(2017 年 10 月 1 日发布)和 DPR5(2018 年 12 月 20 日发布)。除了百科全书数据外,常见的非结构化数据还包括 跨语言文本 和特定领域的数据(例如医学领域 和法律领域)。
- 半结构化数据。通常指包含文本和表格信息的数据,如PDF。处理半结构化数据对传统的基于规则和语法(RAG)系统构成了挑战,主要有两个原因。首先,文本拆分过程可能会意外地分离表格,在检索期间导致数据损坏。其次,将表格合并到数据中会增加语义相似性搜索的复杂性。在处理半结构化数据时,一种方法是利用语言模型的代码功能来执行针对数据库中的表的文本到SQL查询,例如TableGPT。或者,可以使用基于文本的方法将表格转换为文本格式以供进一步分析。然而,这两种方法都不是最佳解决方案,这表明在这个领域还有大量的研究机会。
- 结构化数据,如知识图谱(KG),通常经过验证,并且可以提供更精确的信息。KnowledGPT 生成KB搜索查询并存储在个性化基中,增强了RAG模型的知识丰富性。针对LLMs在理解文本图形以及回答问题方面的局限性,G-Retriever 集成了图神经网络,LLM和RAG,通过使用 LLM 的软提示来增强图理解能力和问答能力,并采用集奖斯坦纳树(PCST)优化问题来进行目标图检索。相反,它需要额外的努力来构建、验证和维护结构化数据库。
- 生成式模型的内容。鉴于 RAG 的外部辅助信息有限,一些研究侧重于利用生成式模型的内部知识。SKR [58] 将问题分类为已知或未知,并选择性地应用检索增强器。GenRead [13] 用生成式模型替换检索器,发现由于与因果语言建模预训练目标更好地对齐,生成式模型产生的上下文通常包含更准确的答案。Selfmem [17] 使用一个检索增强型生成器迭代创建一个无界的内存池,并使用一个内存选择器来选择那些作为原始问题的双重问题的输出,从而自我增强生成模型。这些方法强调了 RAG 中创新数据源使用的广泛性,旨在提高模型性能和任务有效性。
- 检索粒度:除了检索源的数据格式之外,另一个重要因素是检索数据的粒度。粗粒度检索单元理论上可以为问题提供更相关的信息,但也可能包含冗余的内容,这可能会分散下游任务中检索器和语言模型的注意力。另一方面,细粒度检索单元会增加检索负担,并不能保证语义完整性和满足所需的知识。在推理过程中选择合适的检索粒度,可以成为提高密集检索器检索性能和下游任务性能的一种简单而有效的策略。在文本中,检索粒度从细到粗包括:Token、短语(Phrase)、句子(Sentence)、命题(Proposition)、 Chunk 和文档(Document)。其中,DenseX 提出了使用命题作为检索单元的概念。命题被定义为文本文本中的原子表达式,每个命题封装一个独特的事实段,并以简明、自包含的自然语言格式呈现。这种方法旨在提高检索精度和相关性。在知识图谱 (KG) 中,检索粒度包括实体 (Entity)、三元组 (Triplet) 和子图 (Sub-Graph)。检索粒度也可以适应下游任务,例如在推荐任务中检索项目 ID 和句子对。
索引优化
在索引阶段,文档将被处理、分段并转换为嵌入式向量以存储在矢量数据库中。 索引质量决定了检索阶段是否能获得正确的上下文。
- 分块策略:最常用的方法是在固定数量的标记(例如,100、256 或 512)上将文档分成块。较大的块可以捕获更多的上下文信息,但也会产生更多的噪声,需要更长的处理时间和更高的成本。然而,较小的块可能无法完全传达必要的上下文信息,但它们产生的噪声较少。然而,分块会在句子内部导致截断,这促使优化递归拆分和滑动窗口方法,使多个检索过程之间全局相关的信息合并以实现分层检索。然而,这些方法仍然不能在语义完整性和上下文长度之间取得平衡。因此,提出了 Small2Big 等方法,在这些方法中,句子(小)用作检索单元,并为语言模型提供前后句子作为(大)上下文。
- 元数据附件:块可以被丰富为元数据信息,如页码、文件名、作者、类别时间戳。随后,检索可以根据这些元数据进行过滤,限制检索范围。在检索时对文档的时间戳赋予不同的权重,可以实现基于时间的RAG,确保知识的新鲜度并避免过时的信息。除了从原始文档中提取元数据外,还可以人工构造元数据。例如,添加段落摘要以及引入假设性问题。这种方法也被称为反向HyDE。具体来说,使用 LLM 生成文档可以回答的问题,然后在检索过程中计算原始问题与假设性问题之间的相似度以减少问题与答案之间的语义鸿沟。
- 结构指数:提升信息检索效果的有效方法之一是为文档建立分层结构。通过构建这种结构,RAG 系统可以加快相关数据的检索和处理。
- 层次索引结构。文件以父子关系排列,每个节点都链接到块。每个节点存储数据摘要,帮助快速遍历数据,并帮助RAG系统确定要提取哪些块。这种方法还可以缓解块提取问题造成的幻觉。
- 知识图谱索引。在构建文档层次结构时使用KG有助于保持一致性。它界定了不同概念和实体之间的联系,显著降低了潜在的误解可能性。另一个优势是将信息检索过程转化为LLM可以理解的指令,从而提高知识检索的准确性,并使LLM能够生成上下文连贯的响应,从而提高RAG系统的整体效率。为了捕获文档内容与结构之间的逻辑关系,KGP提出了一种使用KG在多个文档之间建立索引的方法。该KG由节点(表示文档中的段落或结构,如页面和表格)和边(表示段落之间的语义/词汇相似性或文档结构内的关系)组成,有效地解决了多文档环境下的知识检索和推理问题。
查询优化
Naive RAG 的一个主要挑战在于它直接依赖于用户最初的查询作为检索的基础。精确且清晰地提出问题很困难,草率的查询会导致检索效果不佳。有时,问题本身就很复杂,语言表达也不清楚。另一个困难在于语言复杂性歧义。语言模型在处理专业术语或具有多种含义的模糊缩写时常常遇到困难。例如,它们可能无法区分“LLM”是指大型语言模型还是法律语境下的法学硕士。
- 查询扩展:将单个查询扩展为多个查询可以丰富查询的内容,提供更多的上下文来解决任何缺乏具体细微差别的问题,从而确保生成的答案的相关性最佳。
- 多查询。通过使用提示工程来通过 LLM 扩展查询,然后可以并行执行这些查询。查询的扩展不是随机的,而是经过精心设计的。
- 子查询。 子问题规划过程代表了在组合时生成必要的子问题以对上下文进行建模并完全回答原始问题的过程。 通常,添加相关背景的过程与查询扩展相似。 具体而言,可以使用从少到多提示方法将复杂的问题分解为一系列较简单的子问题。
- 验证链(CoVe)。 扩展查询通过 LLM 进行验证,以实现减少幻觉的效果。 验证后的扩展查询通常具有更高的可靠性。
- 查询变换:核心思想是基于转换后的查询而非用户的原始查询来检索片段。
- 查询重写。 原始查询并不总是最适合 LLM 检索,特别是在现实世界的情况下。 因此,我们可以提示 LLM 重写查询。除了使用 LLM 进行查询重写之外,还可以使用专门针对较小语言模型(例如 RRR(重写检索读取))。淘宝中查询重写方法的实现称为 BEQUE,已显著提高了长尾查询的召回效果,从而导致 GMV 的增长。
- 另一种查询转换方法是使用提示工程让 LLM 基于原始查询生成后续检索所需的查询。HyDE构建假设文档(对原始查询的假定答案)。它关注的是答案之间的嵌入相似性,而不是问题或查询之间的嵌入相似性。通过使用 Step-back 提示方法,将原始查询抽象化以生成一个高级概念问题(Step-back 问题)。在 RAG 系统中,Step-back 问题和原始查询都用于检索,并且两个结果都被用作语言模型生成答案的基础。
- 查询路由:根据不同的查询,路由到不同的 RAG 管道,该管道适合于设计用于适应不同场景的通用 RAG 系统。
- 元数据路由器/过滤器。第一步是从查询中提取关键字(实体),然后根据关键字和分块中的元数据进行过滤,以缩小搜索范围。
- 语义路由器 是另一种利用查询语义信息进行路由的方法。请参阅 Semantic Router 6 了解具体实现。当然,也可以使用混合式路由方法,结合语义和元数据方法以增强查询路由。
嵌入Embedding
在 RAG 中,检索通过计算问题嵌入和文档块嵌入之间的相似度(例如余弦相似度)来实现,在这里嵌入模型的语义表示能力发挥着关键作用。这主要包括稀疏编码器 (BM25) 和密集检索器 (BERT 架构预训练语言模型)。最近的研究引入了 AngIE、Voyage、BGE 等显着的嵌入模型,这些模型受益于多任务指令微调。Hugging Face 的 MTEB 领导板对 8 个任务进行了评估,覆盖了 58 个数据集。此外,C-MTEB 专注于中国的能力,涵盖了 6 个任务和 35 个数据集。对于“使用哪个嵌入模型”的问题,没有一种通用答案。然而,一些特定的模型更适合某些用例。
- 混合检索:稀疏嵌入和密集嵌入方法捕获不同的相关性特征,并且可以通过利用互补的相关信息来受益。例如,可以使用稀疏检索模型来用于训练密集检索模型的初始搜索结果。此外,预训练语言模型(PLMs)可用于学习术语权重以增强稀疏检索。具体而言,它还表明稀疏检索模型可以提高密集检索模型的零样本检索能力,并帮助密集检索器处理包含罕见实体的查询,从而提高鲁棒性。
- 微调嵌入模型:如果上下文与预训练语料库有显著差异,特别是在医疗保健、法律实践和其他充斥着专有名词的领域等高度专业化的学科中,那么在自己的域数据集上对嵌入模型进行微调就变得至关重要,以减少这种不匹配。除了补充领域知识外,微调的另一个目的是对检索器和生成器进行对齐,例如使用 LLM 的结果作为微调的监督信号,称为 LSR(基于语言模型的检索器)。PROMPTAGATOR 使用 LLM 作为元查询生成器来创建特定任务的检索器,解决了有监督微调中的挑战,特别是在数据稀缺的领域。另一种方法,LLM-Embedder 利用 LLM 在多个下游任务中生成奖励信号。检索器通过两种类型的监督信号进行微调:数据集的硬标签和来自 LLM 的软奖励。这种双信号方法促进了一个更有效的微调过程,使嵌入模型能够适应各种下游应用。REPLUG 利用一个检索器和一个 LLM 计算检索文档的概率分布,然后通过计算KL散度来进行有监督训练。这种简单而有效的方法利用了语言模型作为监督信号,提高了检索模型的性能,无需具体的注意力机制。此外,受RLHF(强化学习从人类反馈)启发,利用基于语言模型的反馈通过强化学习增强检索器。
适配器
微调模型可能会带来挑战,比如通过 API 整合功能或解决由有限本地计算资源产生的限制。因此,一些方法选择包含外部适配器来帮助对齐。
为了优化 LLM 的多任务功能,UP-RISE 训练了一个轻量级提示检索器,该检索器可以自动从预构建的提示池中检索与给定零样本输入相适应的提示。AAR(增强适配器)引入了一个通用适配器,旨在容纳多个下游任务。PRCA添加了一个可插拔的基于奖励的上下文适配器,以提高特定任务的性能。BGM保持检索器和 LLM 固定,并在两者之间训练一个桥接 Seq2Seq 模型。桥接模型旨在将检索的信息转换为 LLM 可有效处理的格式,使其不仅可以重新排名,还可以针对每个查询动态选择段落,并可能使用更高级的策略,例如重复。此外,PKG介绍了一种新颖的方法,通过指令微调将知识集成到白盒模型中。这种方法直接替换检索模块以根据查询生成相关文档。该方法有助于解决在微调过程中遇到的困难,并提高模型性能。
生成
检索后,不建议直接将所有检索到的信息输入到 LLM 中以回答问题。接下来将从两个角度介绍两种调整方法:调整检索的内容和调整 LLM。
内容策划
冗余信息可能会干扰 LLM 的最终生成,而过长的上下文也会导致 LLM 遭遇“迷失在中间”的问题。和人类一样,LLM 通常只关注长文本的开头和结尾,而忘记中间部分。因此,在 RAG 系统中,我们通常需要进一步处理检索到的内容。
- 重排序:重排序从根本上重新排列文档块,以首先突出显示最相关的结果,有效地减少整个文档库,发挥双重作用信息检索,充当增强器和过滤器,为更精确的语言模型处理提供精炼的输入。 重排序可以使用基于规则的方法来执行,这些方法依赖于预定义的度量标准(如多样性、相关性和MRR),或模型方法,例如来自BERT系列的编码器-解码器模型(例如SpanBERT),专门用于重排的模型(例如Cohere rerank或bge-raranker-large),以及通用大型语言模型(例如GPT)。
- 上下文选择/压缩:在 RAG 过程中常见的误解之一是,尽可能检索并连接更多相关文档以形成一个冗长的检索提示是有益的。然而,过多的上下文可能会引入更多的噪音,降低 LLM 对关键信息的理解。(长篇)LLMLingua 使用小型语言模型 (SLMs),如 GPT-2 Small 或 LLaMA-7B,来检测并删除不重要的标记,使其转化为人类难以理解但 LLM 可以很好地理解的形式。这种方法为提示压缩提供了直接而实用的方法,消除了对 LLM 的额外训练的需求,同时平衡了语言完整性和压缩比。PRCA 通过训练一个信息提取器解决了这个问题。类似地,RECOMP 采用了一种相似的方法,通过对比学习训练了一个信息凝练器。每个训练数据点由一个正样本和五个负样本来组成,并且编码器在整个过程中都使用对比损失进行训练。
除了压缩上下文,减少文档数量 也有助于提高模型答案的准确性。马等人提出了“过滤器-重排器”范式,它结合了 LLM 和 SLM 的优势。在这种范式中,SSL 模型充当过滤器,而 LLM 作为重新排序代理。研究表明,指导 LLM 对 SSL 模型识别出的具有挑战性的样本进行重新排列,在各种信息提取(IE)任务中带来了显著的改进。另一种直接且有效的方法是在生成最终答案之前让 LLM 评估检索的内容。这使得 LLM 能够通过 LLM 批评来过滤掉相关性差的文档。
用小模型微调 (Fine-tuning)
基于场景和数据特征对 LLM 进行有针对性的微调可以带来更好的效果。这也是使用本地 LLM 的最大优势之一。当 LLM 在特定领域缺乏数据时,可以通过微调为模型提供额外的知识。Huggingface 的微调数据也可以作为初始步骤。
微调的另一个好处是能够调整模型的输入和输出。例如,它可以让 LLM 适应特定的数据格式,并根据指令以特定的方式生成响应。对于涉及结构化数据的检索任务,SANTA 框架实现了一个三阶段训练方案,有效地封装了结构和语义细微差别。初始阶段侧重于检索器,在其中利用对比学习来细化查询和文档嵌入。
通过强化学习使 LLM 输出与人类或检索器偏好保持一致是一种潜在的方法。例如,手动标记最终生成的答案,然后通过强化学习提供反馈。除了与人类偏好对齐外,还可以与微调模型和检索器的偏好对齐。当无法访问强大的专有模型或更大的参数开源模型时,一种简单而有效的方法是对更强大的模型(例如 GPT-4)进行蒸馏。可以协调 LLM 的微调和检索器的微调以对齐偏好。一种典型的方法,如RA-DIT ,使用KL散度对Retriever和Generator之间的打分函数进行对齐。
在 RAG 中进行增强处理
在RAG领域,标准做法通常涉及一个(一次)检索步骤,然后生成,这可能导致效率低下,并且有时对需要多步推理的复杂问题通常是不足够的,因为它提供了有限的信息范围。许多研究已经针对这个问题优化了检索过程,我们在图5中总结了这些方法。
迭代检索
迭代检索是一种过程,它根据初始查询和到目前为止生成的文本多次搜索知识库,提供更全面的知识。这种方法已经被证明通过多次检索迭代提供额外的上下文参考,从而增强了后续答案生成的鲁棒性。然而,它可能会受到语义不连续性和无关信息积累的影响。ITER-RETGEN 使用协同方法,在需要再现特定信息的任务中利用“增强检索生成”和“增强生成检索”。该模型利用输入任务所需的内容作为检索相关信息的上下文依据,进而促进后续迭代中生成更优回答。
递归检索
递归检索常用于信息检索和自然语言处理中,以提高搜索结果的深度和相关性。该过程涉及根据先前搜索的结果迭代地细化查询。递归检索旨在通过反馈循环逐渐收敛到最相关的信息,从而增强搜索体验。IRCoT使用思维链引导检索过程,并用获取的检索结果来优化思维链。ToC创建一个澄清树,系统地优化查询中的模糊部分。它在用户需求不完全明确或所寻求的信息高度专业化或微妙的情况下可能特别有用。该过程的递归性质允许不断学习和适应用户的需要,通常会导致对搜索结果的满意度提高。
为了处理特定的数据场景,我们使用了递归检索和多步检索技术。递归检索是指检索涉及一个结构化的索引,以分层方式处理和检索数据,这可能包括在基于此摘要执行检索之前对文档或冗长PDF进行摘要。随后,文档内的二次检索会细化搜索,体现过程的递归性质。相比之下,多跳检索旨在深入挖掘图结构的数据源,提取相关信息。
适应性检索
自适应检索方法,如 Flare 和 Self-RAG ,通过使 LLM 能够主动确定检索的最佳时机和内容来细化 RAG 框架,从而提高信息来源的效率和相关性。
这些方法代表了更广泛的趋势,即在模型代理(如AutoGPT、ToolFormer 和Graph-ToolFormer)中使用积极判断来运行。例如,Graph-ToolFormer 将其检索过程分为几个步骤,在此过程中,LLMs 主动使用检索器,应用自我询问技术,并使用少量提示启动查询。这种主动的态度使 LLM 能够决定何时搜索所需信息,就像代理使用工具一样。
WebGPT将强化学习框架整合到 GPT-3 模型中,使其在文本生成过程中能够自主使用搜索引擎进行训练。它通过特殊标记来导航这一过程,从而促进搜索查询、浏览结果和引用参考等操作,通过利用外部搜索引擎来扩展 GPT-3 的功能。Flare 通过监控生成过程中的置信度(生成术语的概率)来自动检索时间。当概率低于某个阈值时,检索系统会激活以收集相关信息,从而优化检索循环。Self-RAG引入了“反思标记”,使模型能够检查其输出。这些标记有两种类型:“检索”和“评论”。模型自主决定何时激活检索,或者预先定义的阈值可以触发该过程。在检索过程中,生成器会在多个段落之间进行片段级束搜索,以得出最连贯的序列。评论分数用于更新子部分分数,并且可以在推断期间灵活地调整这些权重,以定制模型的行为。Self-RAG的设计消除了对额外分类器的需求或对自然语言推理(NLI)模型的依赖,从而简化了决策过程,即何时启动检索机制并提高了模型自动生成准确响应的能力。
普通人如何抓住AI大模型的风口?
领取方式在文末
为什么要学习大模型?
目前AI大模型的技术岗位与能力培养随着人工智能技术的迅速发展和应用 , 大模型作为其中的重要组成部分 , 正逐渐成为推动人工智能发展的重要引擎 。大模型以其强大的数据处理和模式识别能力, 广泛应用于自然语言处理 、计算机视觉 、 智能推荐等领域 ,为各行各业带来了革命性的改变和机遇 。
目前,开源人工智能大模型已应用于医疗、政务、法律、汽车、娱乐、金融、互联网、教育、制造业、企业服务等多个场景,其中,应用于金融、企业服务、制造业和法律领域的大模型在本次调研中占比超过 30%。
随着AI大模型技术的迅速发展,相关岗位的需求也日益增加。大模型产业链催生了一批高薪新职业:
人工智能大潮已来,不加入就可能被淘汰。如果你是技术人,尤其是互联网从业者,现在就开始学习AI大模型技术,真的是给你的人生一个重要建议!
最后
只要你真心想学习AI大模型技术,这份精心整理的学习资料我愿意无偿分享给你,但是想学技术去乱搞的人别来找我!
在当前这个人工智能高速发展的时代,AI大模型正在深刻改变各行各业。我国对高水平AI人才的需求也日益增长,真正懂技术、能落地的人才依旧紧缺。我也希望通过这份资料,能够帮助更多有志于AI领域的朋友入门并深入学习。
真诚无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发
大模型全套学习资料展示
自我们与MoPaaS魔泊云合作以来,我们不断打磨课程体系与技术内容,在细节上精益求精,同时在技术层面也新增了许多前沿且实用的内容,力求为大家带来更系统、更实战、更落地的大模型学习体验。
希望这份系统、实用的大模型学习路径,能够帮助你从零入门,进阶到实战,真正掌握AI时代的核心技能!
01 教学内容
-
从零到精通完整闭环:【基础理论 →RAG开发 → Agent设计 → 模型微调与私有化部署调→热门技术】5大模块,内容比传统教材更贴近企业实战!
-
大量真实项目案例: 带你亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事!
02适学人群
应届毕业生: 无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。
零基础转型: 非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界。
业务赋能突破瓶颈: 传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型。
vx扫描下方二维码即可
本教程比较珍贵,仅限大家自行学习,不要传播!更严禁商用!
03 入门到进阶学习路线图
大模型学习路线图,整体分为5个大的阶段:
04 视频和书籍PDF合集
从0到掌握主流大模型技术视频教程(涵盖模型训练、微调、RAG、LangChain、Agent开发等实战方向)
新手必备的大模型学习PDF书单来了!全是硬核知识,帮你少走弯路(不吹牛,真有用)
05 行业报告+白皮书合集
收集70+报告与白皮书,了解行业最新动态!
06 90+份面试题/经验
AI大模型岗位面试经验总结(谁学技术不是为了赚$呢,找个好的岗位很重要)
07 deepseek部署包+技巧大全
由于篇幅有限
只展示部分资料
并且还在持续更新中…
真诚无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发
更多推荐
所有评论(0)