大语言模型落地的关键技术:RAG

news2025/1/14 2:46:29

1、什么是RAG?

RAG 是检索增强生成(Retrieval-Augmented Generation)的简称,是当前最火热的大语言模型应用落地的关键技术,主要用于提高语言模型的效果和准确性。它结合了两种主要的NLP方法:检索(Retrieval)和生成(Generation)

  • 检索(Retrieval):这一部分的工作是从大量的文本数据中检索出与输入问题最相关的信息。它通常使用一个检索系统,用于大规模的文档集合(例如维基百科)中寻找与输入相关的文段。
  • 生成(Generation):生成部分则使用类似GPT的语言模型,它会根据检索到的信息来生成响应或回答。这个过程涉及理解检索到的内容,并在此基础上生成连贯、相关且信息丰富的文本。

RAG模型的关键在于它结合了这两种方法的优点:检索系统能提供具体、相关的事实和数据,而生成模型则能够灵活地构建回答,并融入更广泛的语境和信息。这种结合使得RAG模型在处理复杂的查询和生成信息丰富的回答方面非常有效。这种技术在问答系统、对话系统和其他需要理解和生成自然语言的应用中非常有用。

2、RAG发展历程

RAG于2020年中期由Lewis等人提出,是LLMs领域中的一种范式,可增强生成任务。具体而言,RAG包括一个初始的检索步骤,LLMs在此步骤中查询外部数据源以获取相关信息,然后才回答问题或生成文本。这个过程不仅为后续的生成阶段提供信息,还确保回答基于检索到的证据,从而显著提高了输出的准确性和相关性。

在推断阶段动态检索来自知识库的信息使RAG能够解决生成事实错误内容的问题,通常被称为“幻觉”。将RAG整合到LLMs中已经迅速被采用,并成为完善聊天机器人能力和使LLMs更适用于实际应用的关键技术。

RAG的演进轨迹在四个不同阶段展开,如下图所示。

在2017年的创始阶段,与Transformer架构的出现相一致,主要重点是通过预训练模型(PTM)来吸收额外的知识以增强语言模型。这个时代见证了RAG的基础工作主要集中在优化预训练方法上。在这个初始阶段之后,出现了相对沉寂的时期,与RAG相关的研究进展较少。随后ChatGPT的出现标志着LLMs领域的重要时刻,社区的重点转向利用LLMs的能力来实现更高的可控性和解决不断变化的需求。

因此,大部分RAG工作集中在推断上,只有少数工作致力于微调过程。随着LLMs能力的不断提高,特别是GPT-4的推出,RAG技术的格局发生了重大变化。重点转向了RAG和微调的优势相结合的混合方法,同时也有少数人继续关注优化预训练方法。

3、RAG的工作流

下图中展示了一个典型的 RAG 应用工作流程:

用户向 ChatGPT 查询最近引起广泛关注的事件,这些事件引发了大量的公众讨论。作为最著名和广泛使用的LLMs,受限于其预训练数据,ChatGPT缺乏对最新事件的了解。RAG通过从外部知识库中检索最新的文档摘录来解决这一问题。在这种情况下,它获取了与查询相关的一些新闻文章。这些文章连同最初的问题被合并成一个丰富的提示,使ChatGPT能够合成一个知情的回答。


这个示例说明了RAG的过程,展示了它通过实时信息检索来增强模型的响应能力。从技术上讲,RAG已经通过各种创新方法得到丰富,这些方法解决了关键问题,例如“要检索什么”、“何时检索”和“如何使用检索到的信息”。


关于“要检索什么”的研究已经从简单的标记检索和实体检索发展到更复杂的结构,如块和知识图研究重点放在检索的粒度和数据结构的级别上。粗粒度带来更多的信息,但精度较低。检索结构化文本提供了更多信息,但效率较低。关于“何时检索”的问题已经产生了各种策略,从单一检索到自适应检索和多次检索,再到高频率检索的方法。

4、RAG增强检索的框架

RAG研究范式不断发展,我们将其分为三种类型:基础RAG(Naive RAG)、高级RAG(Advanced RAG)模块化RAG(Modular RAG)。下图简单的说明了这三种RAG的工作流程:

4.1 基础RAG

基础RAG是检索增强生成(RAG)范式的最早形式之一,其基本概念是将外部检索与大型语言模型(LLMs)的生成能力结合在一起。在基础RAG中,检索通常是基于查询的,并且用于检索外部知识库或数据源中的相关信息。一旦获得了检索到的信息,它们可以与LLMs的内部知识结合在一起,以生成更准确和相关的文本或回答。


然而,基础RAG虽然在改善LLMs的性能方面取得了一定的成功,但也存在一些限制和不足之处。其中一些主要限制包括:

  • 不适应多模态数据:基础RAG主要关注文本数据的检索和生成,对于多模态数据(例如图像、音频)的处理能力有限。
  • 缺乏对话性:基础RAG通常是单向生成,难以实现复杂的对话或多轮问答。
  • 效率低下:在某些情况下,基础RAG可能需要大量的检索操作,导致效率下降。

由于这些限制,研究人员开始探索更高级的RAG范式,以克服这些问题并提高RAG的性能和适用性。这导致了高级RAG和模块化RAG的发展,这些范式在各种应用中得到了广泛的应用。
 

4.2 高阶RAG

高级RAG是检索增强生成(RAG)范式的进化形式,其目的是克服基础RAG的一些限制,并进一步提高性能和适用性。在高级RAG中,研究人员采用了一系列创新性方法和技术,以应对复杂的自然语言处理任务和挑战。


以下是高级RAG的一些关键特点和创新:

  • 多模态支持:高级RAG不仅限于文本数据,还可以处理多模态数据,例如图像、音频和视频。这使得高级RAG在各种多媒体应用中具有广泛的用途。
  • 对话性增强:高级RAG具备更强大的对话处理能力,可以实现更复杂的对话和多轮问答。这使其在聊天机器人和虚拟助手等应用中表现出色。
  • 自适应检索策略:高级RAG引入了更智能的检索策略,可以根据上下文和任务自动调整何时进行检索以及何时使用检索到的信息。这提高了效率和性能。
  • 知识融合:高级RAG能够更好地将外部知识与内部知识融合,以生成更具洞察力和相关性的文本。这对于知识密集型任务特别有用。

高级RAG代表了RAG范式的进一步发展,具有更广泛的应用领域和更强大的性能。它在自然语言处理和人工智能领域中取得了重要的突破,并在各种实际应用中得到了广泛的采用。

4.3 模块化RAG

模块化RAG是检索增强生成(RAG)的另一种演进形式,目的是提供更大的定制性和灵活性,以满足不同应用场景的需求。与基础RAG和高级RAG相比,模块化RAG更注重将RAG系统分解为各种独立的组件,每个组件负责特定的任务或功能。


以下是模块化RAG的一些关键特点和概念:

  • 组件化架构:模块化RAG将RAG系统分解为多个独立的组件,例如检索组件、生成组件和评估组件。这些组件可以根据需要进行组合和替换,以实现定制化的RAG系统。
  • 可插拔性:模块化RAG允许研究人员或开发者轻松地添加新的组件或替换现有的组件,以适应不同的任务和数据源。这提高了系统的可扩展性和适应性。
  • 自定义管道:模块化RAG允许用户构建自定义的处理管道,根据特定的任务需求配置不同的组件。这使得RAG系统可以灵活地应对各种应用场景。
  • 集成外部工具:模块化RAG还支持集成外部工具和资源,例如不同的知识库、检索引擎或生成模型。这扩展了系统的数据和功能来源。

模块化RAG强调了灵活性和可定制性,使研究人员和开发者能够更好地适应不同的应用需求。这种方法在构建复杂的自然语言处理系统时非常有用,可以根据具体任务的要求构建定制的RAG系统。

5、RAG中的核心组件

RAG的核心组件分为三个部分检索(Retrieval)、增强(Augmentation)、生成(Generation),其分类结构如下图:

5.1 RAG中的检索(Retrieval)

检索是检索增强生成(RAG)框架的核心组件之一,它负责从外部数据源或知识库中获取与用户查询相关的信息。检索的质量和效率对于RAG系统的性能至关重要,因为它直接影响生成的文本或回答的准确性和相关性。

以下是与检索相关的一些关键概念和技术:

  • 检索策略:RAG系统需要确定何时进行检索以及如何选择要检索的信息。检索策略可以根据任务和上下文进行调整,以提高系统的效率和性能。
  • 检索粒度:检索可以以不同的粒度进行,从单个标记或实体到更大的文本块或知识图。选择适当的检索粒度取决于任务的要求和数据的结构。
  • 检索方法:有多种检索方法可供选择,包括基于关键字的检索、实体检索、自然语言查询和知识图检索等。每种方法都有其适用的情境和优势。
  • 检索效率:高效的检索是关键因素之一,尤其是在实时应用中。优化检索过程以降低延迟和资源消耗是重要任务之一。
  • 外部数据源:RAG系统可以从各种外部数据源中进行检索,包括互联网上的文档、知识库、数据库和API。选择合适的数据源对于获取准确和丰富的信息至关重要。

在RAG框架中,检索与生成和增强技术密切合作,以生成最终的文本或回答。因此,检索的质量和效率对于整个RAG系统的性能和效果至关重要。

5.2 RAG中的增强(Augmentation)

RAG中的增强技术是RAG框架的第二个核心组件,它的作用是进一步提升生成的质量和效果,以确保生成的文本或回答准确、相关且合乎要求。增强技术通过不同方式与检索和生成协同工作,以优化RAG系统的性能。

以下是与RAG中的增强技术相关的一些关键概念和方法:

  • 文本修正:增强技术可以用于修正生成的文本,以确保其准确性和合理性。这可以通过自动文本校对、语法纠正和事实验证等方式实现。
  • 知识融合:一些RAG系统具备将外部知识融合到生成文本中的能力。这可以通过将检索到的知识与生成的文本进行有机结合来实现。
  • 上下文增强:增强技术可以利用上下文信息来优化生成文本的相关性。这包括利用对话历史、用户偏好和任务上下文等信息。
  • 控制生成风格:一些RAG系统允许用户控制生成文本的风格、语气和表达方式。这提供了更高度定制化的生成能力。
  • 多模态增强:在生成多模态内容时,增强技术可以确保不同模态之间的一致性和相关性,以提供更丰富的用户体验。
  • 实时更新:一些RAG系统具备实时更新的能力,可以从外部数据源获取最新信息,并及时反映在生成的文本中。这对于需要及时更新的任务非常重要。

增强技术的选择和应用取决于特定任务和应用场景的要求。通过合理利用增强技术,RAG系统可以提供更具洞察力和相关性的生成文本,从而提高用户满意度和系统的实用性。

5.3 RAG中的生成(Generation)

生成是检索增强生成(RAG)框架的另一个核心组件,它负责根据检索到的信息和用户查询生成最终的文本或回答。生成的质量和效果直接影响着RAG系统的性能和可用性。
 

以下是与生成相关的一些关键概念和技术:

  • 生成模型:RAG系统通常使用生成模型来生成文本或回答。这些模型可以是预训练的语言模型(如GPT系列),也可以是其他生成模型。生成模型的选择取决于任务的要求和性能需求。
  • 文本生成:生成模型将检索到的信息和用户查询转化为自然语言文本。生成文本的质量取决于模型的能力以及输入信息的准确性和相关性。
  • 控制生成:一些RAG系统具备生成文本的控制能力,允许用户指定特定的风格、语气或其他要求。这提供了更高度定制化的生成能力。
  • 多模态生成:一些高级RAG系统具备生成多模态内容的能力,包括图像、音频和视频。这拓展了RAG的应用领域。
  • 对话生成:一些RAG系统用于对话生成,能够实现复杂的对话和多轮问答。这在聊天机器人和虚拟助手等应用中特别有用。
  • 评估生成:生成的质量通常需要经过评估来衡量,以确保生成的文本准确、相关且合乎要求。评估方法和指标对于RAG系统的性能评估至关重要。

在RAG框架中,生成与检索和增强技术协同工作,以生成最终的输出。生成的能力和质量对于RAG系统的整体性能和用户体验至关重要。

6、RAG vs. Fine-Tuning

RAG(检索增强生成)与微调(Fine-Tuning)是两种不同的大型语言模(LLM)优化方法,它们在应用和效果上有所不同:


RAG与其他模型优化方法的比较:


 

RAG的优势:

  • 更灵活的知识获取:RAG允许从外部数据源实时检索信息,因此可以获取最新的、领域特定的知识,而微调通常依赖于静态的预训练数据。
  • 避免“幻觉”问题:RAG通过检索外部信息来验证生成的文本,可以减少生成不准确信息的问题,这在微调中可能更容易出现。
  • 多模态支持:RAG可以轻松支持多模态内容的生成,包括文本、图像、音频等,而微调通常专注于文本生成。

微调的优势:

  • 更高的一致性:微调通常可以生成更一致的文本,因为它基于预训练模型,而RAG的一致性取决于检索的准确性。
  • 更广泛的应用:微调适用于各种自然语言处理任务,包括文本分类、命名实体识别、情感分析等,而RAG更侧重于生成任务。
  • 训练效率:微调可以比RAG更高效,因为不需要在每个查询上进行检索操作。

总的来说,RAG和微调各有其优势和适用场景,RAG 的优势在于通用性、知识引用、即时性和可解释性,而微调在特定任务上可能更适用,但同时需要更多的任务特定数据和训练选择使用哪种方法,应根据具体的应用需求和任务来决定。未来的发展可能会探索两种方法的结合,以充分利用它们的优势,并改进大型语言模型的性能。

7、RAG系统的评估

RAG(检索增强生成)系统的评估是确保其性能和效果的关键步骤。这里将介绍RAG系统的评估方法和指标,以帮助衡量其生成文本或回答的质量和相关性。

以下是与RAG评估相关的一些关键概念和方法:

  • 生成质量评估:评估RAG生成的文本的质量是重要任务之一。常用的评估方法包括自动评估指标(如BLEU、ROUGE等)、人工评估和事实验证。这些方法可以帮助衡量生成文本的流畅性、准确性和相关性。
  • 检索效果评估:评估RAG检索的效果是另一个关键方面。这包括检索的准确性、召回率和效率。检索效果的好坏直接影响生成文本的质量。
  • 用户满意度评估:了解用户对RAG系统的满意度和体验也是重要的评估维度。这可以通过用户调查、用户反馈和用户交互数据来实现。
  • 多模态评估:对于生成多模态内容的RAG系统,评估方法需要考虑不同模态之间的一致性和相关性。这可以通过多模态评估指标来实现。
  • 实时性评估:对于需要实时更新的RAG任务,评估方法需要考虑信息更新的及时性和效率。
  • 基准测试集:为了进行客观的评估,通常会使用基准测试集来进行实验和比较不同的RAG系统。这些基准测试集包含了多样化的任务和查询,以涵盖不同的应用场景。

评估方法和指标的选择取决于具体的任务和应用场景。综合使用多种评估方法可以更全面地了解RAG系统的性能和效果。评估结果可以指导系统的改进和优化,以满足用户的需求。

8、未来展望

RAG(检索增强生成)技术在不断发展和演进,未来有许多潜在的发展方向和前景。

  • 挑战识别和解决:未来的研究可以致力于识别和解决RAG技术面临的挑战,特别是在知识检索、生成文本质量和多模态支持方面的挑战。这包括改进检索准确性、提高生成文本的一致性和深化多模态整合。
  • 多模态扩展:随着多模态内容的需求不断增长,未来的研究可以探索如何更好地支持多模态生成,包括文本、图像、音频等。这涉及到跨模态信息的有效整合和生成技术的改进。
  • 实时知识更新:对于需要及时更新的任务,未来的研究可以集中在如何实现实时知识检索和更新,以确保生成的文本始终保持最新和准确。
  • 增强RAG生态系统:RAG技术的发展可以促进建立更加完善的RAG生态系统,包括更多的开源工具、资源和应用场景。这将有助于更广泛地推广和应用RAG技术。
  • 融合知识图谱:未来的研究可以考虑如何更好地融合知识图谱等结构化知识源,以进一步提高RAG系统的性能和效果。

总的来说,RAG技术具有广阔的研究前景和应用前景。未来的研究将继续探索新的方法和技术,以不断改进和扩展RAG系统的功能和性能,从而更好地满足各种知识密集型任务和应用场景的需求。

参考论文:

  1. 《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》
  2. 《Retrieval-Augmented Generation for Large Language Models: A Survey》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1572988.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【智能排班系统】AOP实现操作日志自动记录

文章目录 操作日志介绍自动保存操作日志基本实现思路定义注解枚举业务类型枚举操作人员类型枚举 AOP具体实现方法上添加注解 日志增删改查日志表sql实体类ServiceControllerVo 操作日志介绍 操作日志是对系统或应用程序中所有用户操作、系统事件、后台任务等进行详细记录的文本…

代码随想录算法训练营Day46|LC139 单词拆分

一句话总结:完全背包! 原题链接:139 单词拆分 动态规划之完全背包五部曲: 确定dp数组与下标含义:表示字符串长度为i时,dp[i] true 的话,可以拆分为一个或多个在字典中出现的单词。确定递归公…

贪心算法|122.买卖股票的最佳时机II

力扣题目链接 class Solution { public:int maxProfit(vector<int>& prices) {int result 0;for (int i 1; i < prices.size(); i) {result max(prices[i] - prices[i - 1], 0);}return result;} }; 贪心思路出来了&#xff0c;代码居然如此简单啊&#xff0…

16.Python多线程

如果想让我们的程序同时执行多个任务&#xff0c;就需要使用多线程技术了 。到目前为止&#xff0c;我们编写的程序都是单线程的&#xff0c;在运行时一次只能执行 一个任务。 1 线程相关的知识 1.1 进程 一个进程就是一个正在执行的程序&#xff0c;每一个进程都有自己独立…

软考高级架构师:嵌入式处理器体系结构

一、AI 讲解 嵌入式处理器体系结构中&#xff0c;冯诺依曼结构和哈佛结构是两种最基本的设计模式&#xff0c;它们各有特点和典型应用场景。 结构定义特点典型应用冯诺依曼结构一种将程序存储器和数据存储器合并在同一存储器中的计算机体系结构。这意味着指令和数据共享同一个…

基于javassm实现的水果销售管理网站

开发语言&#xff1a;Java 框架&#xff1a;ssm 技术&#xff1a;JSP JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclip…

【C++航海王:追寻罗杰的编程之路】C++的类型转换

目录 1 -> C语言中的类型转换 2 -> 为什么C需要四种类型转换 3 -> C强制类型转换 3.1 -> static_cast 3.2 -> reinterpret_cast 3.3 -> const_cast 3.4 -> dynamic_cast 4 -> RTTI 1 -> C语言中的类型转换 在C语言中&#xff0c;如果赋值运…

【攻防世界】FlatScience

dirsearch 扫描发现四个文件 在login.php 中发现 输入 http://61.147.171.105:61912/login.php/?debug 发现源码 <?php if(isset($_POST[usr]) && isset($_POST[pw])){$user $_POST[usr];$pass $_POST[pw];$db new SQLite3(../fancy.db);$res $db->query(…

【STM32】存储器和位带映射(bit band mapping)

文章目录 0 前言1 关于地址和存储器2 STM32内部存储器3 位带映射&#xff08;bit band mapping&#xff09;4 扩展&#xff1a;IAP 0 前言 最近在研究stm32标准库&#xff0c;对使用宏定义实现位操作的函数非常感兴趣&#xff0c;简单的一句PAout(1) 0;就能实现某个引脚电平的…

【JavaWeb】Day35.MySQL概述——数据库设计-DDL(二)

表操作 关于表结构的操作也是包含四个部分&#xff1a;创建表、查询表、修改表、删除表。 1.创建 语法 create table 表名( 字段1 字段1类型 [约束] [comment 字段1注释 ], 字段2 字段2类型 [约束] [comment 字段2注释 ], ...... 字段n 字段n类型 [约束] [comment …

phpstorm设置头部注释和自定义注释内容

先说设置位置&#xff1a; PhpStorm中文件、类、函数等注释的设置在&#xff1a;setting-》Editor-》FIle and Code Template-》Includes-》PHP Function Doc Comment下设置即可&#xff0c;其中方法的默认是这样的&#xff1a; /** ${PARAM_DOC} #if (${TYPE_HINT} ! "…

SpringBoot新增员工模块开发

需求分析与设计 一&#xff1a;产品原型 一般在做需求分析时&#xff0c;往往都是对照着产品原型进行分析&#xff0c;因为产品原型比较直观&#xff0c;便于我们理解业务。 后台系统中可以管理员工信息&#xff0c;通过新增员工来添加后台系统用户。 新增员工原型&#xf…

4.1 JavaScript的使用

JavaScript有两种使用方式&#xff1a;一是在HTML文档中直接添加代码&#xff1b;二是将JavaScript脚本代码写到外部的JavaScript文件中&#xff0c;再在HTML文档中引用该文件的路径地址。 这两种使用方式的效果完全相同&#xff0c;可以根据使用率和代码量选择相应的开发方式。…

【ControlNet v3版本论文阅读】

网络部分最好有LDM或者Stable Diffusion的基础&#xff0c;有基础的话会看的很轻松 Abstract 1.提出了一种网络结构支持额外输入条件控制大型预训练的扩散模型。利用预训练模型学习一组不同的条件控制。 2.ControlNet对于小型&#xff08;<50k&#xff09;或大型&#xff…

经典机器学习模型(九)EM算法在高斯混合模型中的应用

经典机器学习模型(九)EM算法在高斯混合模型中的应用 EM算法的推导可以参考&#xff1a; 经典机器学习模型(九)EM算法的推导 若随机变量X服从一个数学期望为 μ μ μ、方差为 σ 2 σ^2 σ2的正态分布&#xff0c;可以记为 N ( μ &#xff0c; σ 2 ) N(μ&#xff0c;σ2)…

二叉树进阶——手撕二叉搜索树

troop主页&#xff1a;troop 手撕二叉搜索树 1.二叉搜索树的定义2.实现&#xff08;非递归&#xff09;补充结构2.1查找2.2插入2.3删除&#xff08;重要&#xff09;情况1(无孩子&&一个孩子&#xff09; 3.二叉搜索树的应用3.1K模型3.2KV模型3.2.1KV模型的实现 总结二叉…

「每日跟读」英语常用句型公式 第4篇

「每日跟读」英语常用句型公式 第4篇 1. I’ve decided to ____ 我决定要____了 I’ve decided to take a vacation (我决定要去度假) I’ve decided to change my lifestyle (我决定要改变我的生活方式) I’ve decided to adopt a dog (我决定要收养一条狗了) I’ve dec…

【AOSP】手把手教你编译和调试AOSP源码

一、下载AOSP源码 在开始之前&#xff0c;我们先安装编译AOSP需要的一些系统基本依赖&#xff0c;如下命令 sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g-multilib libc6-dev-i386 lib32ncurses5-dev x11proto…

三子棋游戏----C语言版【超级详细 + 视频演示 + 完整源码】

㊙️小明博客主页&#xff1a;➡️ 敲键盘的小明 ㊙️ ✅关注小明了解更多知识☝️ 文章目录 前言一、三子棋的实现思路二、三子棋的实现步骤2.1 先显示游戏的菜单2.2 游戏的具体实现2.2.1 棋盘的初始化2.2.2 展示棋盘2.2.3 下棋&#x1f534;玩家下棋&#x1f534;电脑下棋2.2…

OpenHarmony开发-系统烧录

本文详细介绍了烧录OpenHarmony系统到开发板的操作流程。从基础的硬件准备和软件环境设置入手&#xff0c;详细说明了如何配置开发环境、构建系统镜像等过程&#xff0c;详细描述了烧录过程中的关键步骤&#xff0c;以及如何使用专用工具将OpenHarmony系统镜像传输到开发板。同…