一问讲透什么是 RAG,为什么需要 RAG?

news2024/11/14 17:30:49

一. 为什么要用 RAG ?

如果使用 pretrain 好的 LLM 模型,应用在你个人的情境中,势必会有些词不达意的地方,例如问 LLM 你个人的信息,那么它会无法回答;这种情况在企业内部也是一样,例如使用 LLM 来回答企业内部的规章条款等。

这种时候主要有三种方式来让 LLM 变得更符合你的需求:

  1. Promt Enginerring: 输入提示来指导 LLM 产生所需回应。 例如常见的 In-context Learning,通过在提示中提供上下文或范例,来形塑模型的回答方式。 例如,提供特定回答风格的示例或包含相关的情境信息,可以引导模型产生更合适的答案。

  2. Fine tuning: 这个过程包括在特定数据集上训练 LLM,使其响应更符合特定需求。 例如,一家公司可能会使用其内部文件 Fine tuning ChatGPT ,使其能够更准确地回答关于企业内部规章条款等问题。 然而,Fine tuning需要代表性的数据集且量也有一定要求,且 Fine tuning 并不适合于在模型中增加全新的知识,或应对那些需要快速迭代新场景的情况。

  3. RAG (Retrieval Augmented Generation): 结合了神经语言模型和撷取系统。 撷取系统从数据库或一组文件中提取相关信息,然后由语言模型使用这些信息来生成回应。 可以把RAG想像成给模型提供一本教科书,让它根据特定的问题去找信息。 此方法适用于模型需要整合实时、最新或非常特定的信息非常有用。 但RAG并不适合教会模型理解广泛的领域或学习新的语言、格式或风格。

RAG 与方法的比较[

](https://arxiv.org/abs/2312.10997)Gao, Yunfan et al. “Retrieval-Augmented Generation for Large Language Models: A Survey.” (2023).

目前的研究已经表明,RAG 在优化 LLM 方面,相较于其他方法具有显著的优势 (Shuster et al. , 2021 ; Yasunaga et al. , 2022; Wang et al. , 2023c; Borgeaud et al. , 2022),主要的优势可以体现在以下几点:

    1. RAG 通过外部知识来提高答案的准确性,有效地减少了虚假信息,使得产生的回答更加准确可信。
    1. 使用撷取技术能够识别到最新的信息(用户提供),这使得 LLM 的回答能保持及时性
    1. RAG 引用信息来源是用户可以核实答案,因此其透明透非常高,这增强了人们对模型输出结果的信任。
    1. 透过获取与特定领域数据,RAG能够为不同领域提供专业的知识支持,定制能力非常高。
    1. 安全性和隐私管理方面,RAG 通过数据库来存储知识,对数据使用有较好控制性。 相较之下,经过 Fine tuning 的模型在管理数据存取权限方面不够明确,容易外泄,这对于企业是一大问题。
    1. 由于 RAG 不需更新模型参数,因此在处理大规模数据集时,经济效率方面更具优势。

不过虽然RAG有许多优势在,但这3种方法并不是互斥的,反而是相辅相成的。 结合 RAG 和 Fine tuning ,甚至 Promt Enginerring 可以让模型能力的层次性得增强。 这种协同作用特别在特定情境下显得重要,能够将模型的效能推至最佳。 整体过程可能需要经过多次迭代和调整,才能达到最佳的成效。 这种迭代过程涵盖了对模型的持续评估和改进,以满足特定的应用需求。

RAG 实际应用的过程[

](https://arxiv.org/abs/2312.10997)Gao, Yunfan et al. “Retrieval-Augmented Generation for Large Language Models: A Survey.” (2023).

二. 什么是 RAG ?

这篇章旨在介绍 RAG 的过程与其使用的相关技术。 总结来说RAG有两个关键技术:撷取与生成

    1. 撷取(Retrieval):从大量知识库中撷取出最相关的前几个文件
    1. 生成(Generation):将撷取到的信息转成为自然流畅的文字。

提取(Retrieval)

为了使 RAG 技术中的撷取更准确,关键在于如何获得准确的语意空间、匹配查询和文件的语意空间,以及如何使撷取器的输出与大型语言模型的偏好相协调,我们在以下分别探讨:

a.) 如何获得准确的语意空间

通常我们会把查询和文件映射的多维空间,称之为语意空间(semantic space),而进行撷取时,我们是在语意空间中进行,因此若映射的不够好,那么对于整个RAG系统是个大灾难。 这边介绍2步建立准确语意空间的方法。

    1. 区块优化 (Chunk optimization)

在处理外部文档时,首先需要将其拆分成更小的碎块以提取细粒度特征,然后将这些特征嵌入(embedded)以表达其语义。 然而,嵌入过大或过小的文本碎块可能会导致较差的结果,因此需要考虑几个重要的因素,例如撷取内容的性质、嵌入模型及其最佳块大小、用户查询的预期长度和复杂性,以及具体应用对撷取结果的利用方式。 因此目前有许多研究提出多种区块优化方法:

    1. Sliding window technology:通过合并跨多个撷取过程的全球相关信息,实现分层撷取。
    1. small2big:它在初始搜索阶段使用小文本块,然后提供较大的相关文本块供语言模型处理。
    1. **Abstract embedding:**优先考虑基于文档摘要(或摘要)的前K次撷取,提供对整个文档内容的全面理解。
    1. Metadata Filtering:技术通过文件的元资料进行过滤。
    1. Graph Indexing:将实体和关系转化为节点和连接,显著提高了相关性,特别是在多跳问题的情境下。

2. 微调嵌入模型Fine-tuning Embedding Models)

确定了Chunk的适当大小之后,我们需要通过一个嵌入模型(Embedding model)将 Chunk 和查询嵌入到语意空间中。 因此,嵌入模型是否能有效代表整个语料库变得极为重要。 传统常用的嵌入模型有以下两种:

  • Sentence-Transformers: 是一种 python 的 BERT NLP 套件,提供各种训练好的BERT 模型套件,适合单个句的处理。

  • text-embedding-ada-002: OpenAI 提出的新嵌入模型,适合处理包含256 或 512 Token 的文字区块。

而如今,一些出色的嵌入模型已经问世,例如 AngIE(Li and Li, 2023)、Voyage(VoyageAI, 2023)、BGE(BAAI, 2023) 等,这些模型已经在大型模语料库上 pre-training。 然而,当应用于特定领域时,它们准确捕捉领域特定信息的能力可能会受到限制。

此外我们还得对嵌入模型进行 Fine tuning,以确保模型能理解用户查询,这步对下游应用是必不可少的。 嵌入模型 Fine tuning 的方法主要有 2 种:

  1. 领域知识 Fine tuning: 嵌入模型的 Fine tuning 与 LLM 的 Fine tuning 不一样,主要差别在嵌入模型的数据集包括查询(Queries)、语料库(Corpus)和相关文件(Relevant Docs)。 资料集收集的过程非常繁杂,因此 LlamaIndex 专门为此引入了一系列关键的类别和函数,旨在简化工作流程。

  2. 针对下游任务 Fine tuning: 目前有研究使用 LLM 来 Fine tuning 嵌入模型。 例如,PROMPTAGATOR (Dai et al. , 2022),如此可以解决一些由于数据不足而难以 Fine tuning 的问题。

b.) 如何协调查询和文件的语意空间?

在RAG应用中,有些撷取器用同一个嵌入模型来处理查询和文档,而有些则使用两个不同的模型。 此外,用户的原始查询可能表达不清晰或缺少必要的语义信息。 RAG 使用 2 种关键技术,来实现这个目标:

  1. Query Rewriting

方法如 Query2Doc 和 ITER-RETGEN 利用 LLMs,通过将原始查询与额外的指导信息相结合,创建一个虚拟文档(Wang et al. , 2023;Shao et al. , 2023)。 其他还有如 HyDE (Gao et al. , 2022)、RRR (Ma et al. , 2023)、STEP-BACKPROMPTING (Zheng et al. , 2022)等。

  1. Embedding Transformation

相较于 Query Rewriting,这是一个更微观的技术。 LlamaIndex 在查询编码器后加入一个特殊的适配器,并对其进行微调,从而优化查询的嵌入表示,使之更适合特定的任务。

c.) 根据 LLM 的需求调整撷取结果

上述的方法旨在帮助我们提升撷取的效果,但是那些做法可能不能提升 LLM 模型的准确度,原因在于撷取的结果可能不是很符合 LLM 的偏好,因此如何让撷取结果往 LLM 的偏好靠齐,是一个重要的领域。

  1. Fine-tuning Retrievers

核心概念是通过从 LLM 获得的回馈信号来调整嵌入模型,也就是使用 LLM 提供的分数来指导撷取器的训练,这相当于用大语言模型来对数据集进行标注。 近期的方法如 AAR (Yu et al. , 2023)

  1. Adapters

上述的 Fine tuning 方法在实现上会有难度,如 API 的实现与算力的考量。 因此,一些研究选择外接Adapters来进行模型对齐。 PRCA (Yang et al. , 2023) 在上下文提取阶段和奖励驱动阶段训练适配器,并通过基于 Token 的autoregressiv 策略来优化撷取器的输出。

生成(Generation)

生成器是 RAG 的关键之一,它负责将撷取到的信息转换为连贯和流畅的文本。 在 RAG 中,生成器的输入不仅包括典型的上下文信息,还包括通过检索器获得的相关文本片段。 这种全面的输入使生成器能够深入理解问题的上下文,从而产生更具信息性和上下文相关性的回答。 生成器会根据撷取到的文字来指导内容的生成,确保产生的内容与撷取信息一致。

但撷取的内容五花八门,因此目前有一系列研究在探讨生成器的适应性,让其能应付来自查询和文件的输入资料。

a). 如何优化撷取到的讯息?

目前大宗做法是依赖无法调整但训练完好的 LLM 模型(如 ChatGPT-4)来生成,不过这些 LLM 仍然存在一些问题,例如上下文长度限制和对冗余信息的敏感度。 为了解决这个问题,目前一些研究开始专注在撷取后处理(post-retrieval processing),这个作法是将经由撷取器得到的信息去做进一步的处理、过滤或最佳化,提高撷取结果的品质,主要有 2 种主流作法:

    1. 信息压缩 (Information Compression)

即使撷取器能很棒的从庞大的知识库中撷取到相关信息,但管理大量的撷取信息仍是一个挑战。 目前做法是扩大LLM的上下文长度来解决此问题,但这并不能很有效解决问题,上下文长度限制仍是一大问题。 因此,压缩信息变得必要。 信息压缩对减少噪声、解决上下文长度限制和增强生成效果具有重要意义。

PRCA 通过训练一个信息撷取器来解决这个问题(Yang et al. , 2023)。 在上下文撷取阶段,提供输入文字 Sinput 时,它能够产生一个输出序列 Cextracted,代表从输入文件中压缩得到的上下文。 训练过程旨在最小化 Cextracted 和实际上下文 Ctruth 之间的差异。

其他如 RECOMP (Xu et al. , 2023) 或 Filter-Ranker (Ma et al. , 2023)。 Filter-Ranker 结合了大语言模型 (LLM) 和小语言模型 (SLM) 的优点。 SLM 充当过滤器,LLM 则作为排序器。 研究表明,指导 LLM 重排 SLM 识别出的挑战性样本,能够在各种信息提取 (IE) 任务中带来显著的改进。

  1. 重排序 (Reranking)

主要功能是优化撷取的信息集合。 LLM常常在引入额外上下文时面临性能下降,而Reranking有效地解决了这一问题。 其核心概念涉及重新排列文档记录,以使最相关的项目优先排在最前,从而限制文档的总数量。 这不仅解决了检索过程中上下文窗口扩展的挑战,而且还提升了检索效率和响应速度。

b). 如何根据撷取到的讯息优化生成器?

在使用一般 LLM 时,输入通常只会有一段文字查询。 但在 RAG 中,输入不仅结合了查询,还包括了撷取器撷取到的各种文档,其中包含结构化与非结构化的信息。 这个额外的信息会显著影响 LLM 的理解,特别是对于较小的 LLM。

在这种情况下,Fine tuning 模型以适应 「查询+撷取文档」的输入变得至关重要。 RAG 中生成器的 Fine tuning 方法与 LLM 的一般微调方法基本一样。 接下来,我们将简要描述一些涉及数据(格式化/非格式化)和优化功能的代表性工作。

  1. 通用优化流程 (General Optimization Process)

Self-mem (Cheng et al. , 2023) 采用了传统训练方法。 其中给定输入 x,撷取讯息 z,然后结合(x, z),模型生成输出 y。 论文探讨了两种主流 Fine tuning方法,分别为 Joint-Encoder (Arora et al. , 2023, Wang et al. , 2022b, Lewis et al. , 2020) 和 Dual-Encoder (Xia et al. , 2019, Cai et al. , 2021, Cheng et al. , 2022)。

在Joint-Encoder中,使用基于encoder-decoder的标准模型。 其中,encoder 首先对输入进行编码,decoder 通过注意力机制结合编码结果,并以自回归方式生成 Token。 另一方面,在 Dual-Encoder 中,系统设置了两个独立的 encoder,每个 encoder 分别对输入 (查询、上下文) 和文档进行编码,之后将输出依序经由 decoder,进行双向交叉注意力处理。 这两种架构都利用 Transformer 作为基础。

  1. 利用对比学习 (Utilizing Contrastive Learning)

在为 LLM 准备训练数据的阶段中,通常会建立输入和输出的配对。 这种传统方法可能导致「暴露偏差」,即模型仅在个别正确的输出示例上进行训练,接触到单一的正确反馈,无法了解其他可能的生成 Token。 这种限制可能会阻碍模型在真实世界中的表现,因为它可能过度适应训练集中的特定示例,从而降低了其在不同上下文中泛化的能力。

为了缓解暴露偏差,SURGE (Kang et al., 2023) 提出使用图文对比学习。 这种方法包括一个对比学习目标,促使模型产生一系列可行且连贯的回应,扩展到训练数据中遇到的实例之外。 这种方法在减少过度适应和加强模型的泛化能力方面至关重要。

三. RAG 生态系 ?

RAG 的生态系蓬勃发展,在水平领域,从最初的文本问答领域以外,RAG 的应用逐渐拓展到更多模态数据,包括图像、代码、结构化知识、影音等。 在这些领域,已经涌现许多相关研究成果。

而相关的Technical Stack发展也满迅速,如有名的LangChain和LLamaIndex这样的关键工具,随着ChatGPT的出现迅速获得了人气,它们提供了广泛的与RAG相关的API,并成为LLM领域的佼佼者。

同时新兴的Technical Stack也逐渐在发展,例如,Flowise AI10优先考虑低代码方法,用户能够通过简单的拖曳界面部署包括RAG在内的AI应用。 其他技术如 HayStack、Meltano11 和 Cohere Coral12 也因其在该领域的独特贡献而受到关注。

除了专注于 AI 的提供者之外,传统软件和云服务提供商也在扩大其服务范围,包括以 RAG 为中心的服务。 如向量数据库公司Weaviate推出的Verba7专注于个人助理应用,而亚马逊的Kendra提供智能企业搜索服务,允许用户使用内置连接器在各种内容存储库中导航。

最后的最后

感谢你们的阅读和喜欢,我收藏了很多技术干货,可以共享给喜欢我文章的朋友们,如果你肯花时间沉下心去学习,它们一定能帮到你。

因为这个行业不同于其他行业,知识体系实在是过于庞大,知识更新也非常快。作为一个普通人,无法全部学完,所以我们在提升技术的时候,首先需要明确一个目标,然后制定好完整的计划,同时找到好的学习方法,这样才能更快的提升自己。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

大模型知识脑图

为了成为更好的 AI大模型 开发者,这里为大家提供了总的路线图。它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

经典书籍阅读

阅读AI大模型经典书籍可以帮助读者提高技术水平,开拓视野,掌握核心技术,提高解决问题的能力,同时也可以借鉴他人的经验。对于想要深入学习AI大模型开发的读者来说,阅读经典书籍是非常有必要的。

在这里插入图片描述

实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

面试资料

我们学习AI大模型必然是想找到高薪的工作,下面这些面试题都是总结当前最新、最热、最高频的面试题,并且每道题都有详细的答案,面试前刷完这套面试题资料,小小offer,不在话下

在这里插入图片描述

640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

在这里插入图片描述

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

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

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

相关文章

VTK—vtkRectilinearGrid学习

vtkRectilinearGrid理解为沿着坐标轴方向一系列规格的网格,但是网格间距可以不同。需要显式的提供各坐标轴的点数据。单元数据不用指定,会隐式生成。与前面提到的vtkStructuredGrid 类似,但是每个网格线都是直的。 1.给三个坐标分配点&#…

Golang基于DTM的分布式事务SAGA实战

SAGA介绍 SAGA是“长时间事务”运作效率的方法,大致思路是把一个大事务分解为可以交错运行的一系列子事务的集合。原本提出 SAGA 的目的,是为了避免大事务长时间锁定数据库的资源,后来才逐渐发展成将一个分布式环境中的大事务,分…

关于tresos Studio(EB)的MCAL配置之DIO

General Dio Development Error Detect开发者错误检测 Dio Flip Channel Api翻转通道电平接口Dio_FlipChannel是否启用 Dio Version Info Api决定Dio_GetVersionInfo接口是否启用,一般打开就行。 Dio Reverse Port Bits让端口的位(通道)进…

最新号卡推广单页源码/仿制手机卡流量卡号卡代理推广源码/简洁实用/带弹窗公告+后台管理

源码简介: 最新号卡推广单页源码,它是手机卡流量卡号卡代理推广源码量身打造的,不仅设计得简洁实用,而且还有炫酷的弹窗公告功能和强大的后台管理系统哦! 一款号卡推广单页源码,自己仿制来的,…

arcgis-坡度坡向分析

坡向的描述有定性和定量两种方式,定量是以东为0,顺时针递增,南为90,西为180,北为270等,范围在0~35959′59″之间。 定性描述有8方向法和4方向法. 8 方向为东、东南、南、西南、西、西北、北、东…

Linux安装jdk8,tomcat和mysql

目录 Linux安装jdk8 第一步:下载jdk8 第二步:把下载好的压缩包通过finalShell发送到linux虚拟机上 ​编辑 第三步:解压缩 第四步:配置环境变量 第五步:重新加载profile配置文件 第六步:检查是否安装成…

C++ -- 负载均衡式在线OJ (三)

文章目录 四、oj_server模块1. oj_server的功能路由2. 建立文件版的题库3. model模块4.controller模块5.judge模块(负载均衡)6.view模块整体代码结构(前端的东西,不是重点) 五、最终效果项目源码 前面部分请看这里C –…

Unite Shanghai 2024 团结引擎专场 | 团结引擎实时全局光照

在 2024 年 7 月 24 日的 Unite Shanghai 2024 团结引擎专场演讲中,Unity 中国高级技术经理周赫带大家深入解析了团结引擎的实时全局光照系统。该系统支持完全动态的场景、动态材质和动态灯光的 GI 渲染,包括无限次弹射的漫反射和镜面反射 GI。 周赫&…

2024年职场常备!3款高效数据恢复软件免费版,让打工人工作无忧

嘿,职场的朋友们!咱们现在工作,数据就跟空气一样重要,对吧?但有时候,手一滑,文件没了,硬盘突然就挂了,系统也闹点小情绪,那心情,比股市大跌还难受…

基于Django的boss直聘数据分析可视化系统的设计与实现

研究背景 随着互联网的发展,在线招聘平台逐渐成为求职者与企业之间的重要桥梁。Boss直聘作为国内领先的招聘平台,以其独特的直聊模式和高效的匹配算法,吸引了大量的用户。然而,随着平台用户的增长,海量的招聘数据带来…

基于Faster-RCNN的停车场空位检测,支持图像和视频检测(pytorch框架)【python源码+UI界面+功能源码详解】

功能演示: 基于Faster-RCNN的停车场空位检测系统,支持图像检测和视频检测(pytorch框架)_哔哩哔哩_bilibili (一)简介 基于Faster-RCNN的停车场空位检测系统是在pytorch框架下实现的,这是一个…

YB5214B 同步开关型降压锂电池充电管理芯片

概述: 是一款支持 4.5-16V 输入电压范围,最大输出为 2A 电流的同步降压锂电池充电管理芯片。芯片内部集成了低阻功率 MOSFETS,采用 500kHz的开关频率以实现较小的元件尺寸和较高的充电效率。 内部还集成了多重保护功能,能够最大程…

基于NXP IMX6Q+FPGA全自动血液分析仪解决方案

全自动血细胞分析仪 ,临床又称血常规检测仪、血液分析仪、血球分析仪、血液细胞分析仪、血球计数仪,是指对一定体积全血内血细胞异质性进行自动分析的临床检验常规仪器。 NXP IMX6Q核心板采用四核Cortex-A9架构,主频1GHz,12层PCB…

知识竞赛中风险题环节竞赛规则有哪些设计方案

风险题环节是知识竞赛活动中一个高潮环节,很多时候都是放到最后压轴,选手会根据之前的成绩进行最后一博。那么,常用的风险题环节规则应怎么设计呢?下面列出的这些大家可以参考一下。 1.设置不同分值的题,由选手根据自…

CSS——字体背景(Font Background)

一、字体族 1、字体的相关样式: ① color 用来设置字体颜色(前景颜色) ② font-size 字体的大小 和font-size相关的单位: em 相对于当前元素的一个font-size rem 相对于根元素的一个font-size ③ font-family 字体族&#x…

软件测试第4章 白盒测试方法(逻辑覆盖测试)

一、白盒测试方法 二、白盒测试 VS 静态测试 【在不运行程序的情况下(即静态测试,程序审查)】 三、白盒测试方法 1、程序控制流图 2、逻辑覆盖测试 测试覆盖率 用于确定测试所执行到的覆盖项的百分比,其中覆盖项是指作为测试基础的一个入口或属性&am…

异常信息转储笔记-demangle函数名字符

前情 上一篇笔记留下了两个待解决问题,其中之一是输出的函数名被奇怪字符覆盖了一部分,本篇笔记即将解决这个问题(下图问题1)。 问题描述 如上,使用libunwind输出core堆栈信息时,有部分字符被覆盖&#x…

fetch_20newsgroups报错403的两种解决办法

在使用sklearn机器学习库使用fetch_20newsgroups调用数据集时候(如下方代码所示),报错403怎么办,本人亲测两种方法,分享大家: data fetch_20newsgroup(subset"train")一、第一种方法 1.下载压…

十大护眼落地灯品牌中护眼效果最好的是哪款?落地灯十大知名品牌

根据不完全统计,我国儿童青少年的近视率达到了52.7%,也就是说10个孩子中有5个以上的视力都处于一个亚健康的状态,这和户外运动少及室内灯光差有很大关系,在面临这种现状下,很多家长对日常用眼时的光线质量越来越重视&a…

智慧叉车监管系统,司机权限启动车辆,杜绝无证驾驶!

叉车广泛应用于各种生产场所,是常见的一种作业工具。叉车作业具有较大的危险性,司机的不安全操作行为是导致叉车事故发生的主要原因之一。近年来,由于操作人员无证驾驶、违章作业等原因,国内发生了多起叉车安全事故,造…