RAG 详解

原文:GitHub - Tongji-KGLLM/RAG-Survey

目录

  • RAG调查
    • 什么是RAG?
    • RAG的范式
      • 幼稚的 RAG
      • 高级 RAG
      • 模块化 RAG
    • 如何进行增强?
    • RAG 还是微调?
    • 如何评估 RAG?
    • 前景
      • 严峻的挑战
      • 多式联运扩展
      • RAG的生态系统
  • RAG论文清单
    • 增强阶段
      • 预训练
      • 微调
      • 推理
    • 增强源
      • 非结构化数据
      • 结构化数据
      • LLM 生成的内容
    • 增强过程
      • 一次检索
      • 迭代检索
      • 递归检索
      • 自适应检索
    • 杂项
      • 可视化
    • 确认

什么是RAG?

大型语言模型 (LLM) 已成为我们生活和工作不可或缺的一部分,通过其惊人的多功能性和智能性改变了我们与信息交互的方式。

尽管它们的能力令人印象深刻,但它们并非没有缺陷。这些模型会产生误导性的“幻觉”,依赖可能过时的信息,在处理特定知识时效率低下,在专业领域缺乏深度,并且在推理能力方面不足。

在实际应用中,数据需要不断更新以反映最新发展,并且生成的内容必须透明且可追溯,以管理成本并保护数据隐私。因此,仅仅依靠这些“黑匣子”模型是不够的;我们需要更精细的解决方案来满足这些复杂的需求。

在这种背景下,检索增强生成(RAG)作为人工智能时代的开创性趋势而声名鹊起。

RAG在问答中的典型应用。(例如,向 chatGPT 询问 OpenAI 首席执行官 SAM Altman 😆 被解雇和重新聘用一事)

RAG 在生成语言模型的答案之前,首先从外部文档数据库中检索相关信息,从而显著提高了内容的精确度和相关性。

RAG的范式

Lewis 于 2020 年推出的 RAG 概念发展迅速,标志着其研究之旅的不同阶段。最初,该研究旨在通过在预训练阶段为语言模型注入额外的知识来支持语言模型。ChatGPT 的推出引发了人们对利用大型模型进行深入上下文理解的浓厚兴趣,加速了 RAG 在推理阶段的发展。随着研究人员对大型语言模型 (LLM) 功能的深入研究,重点转向增强其可控性和推理能力,以跟上不断增长的需求。GPT-4 的出现标志着一个重要的里程碑,它以一种新颖的方法彻底改变了 RAG,该方法将其与微调技术相结合,同时继续完善预训练策略。

RAG研究的时间线树

在RAG的技术发展中,我们从技术范式的角度将其演进归纳为以下几个阶段:

幼稚的 RAG

经典的 RAG 过程(也称为 Naive RAG)在前面的示例中进行了演示。它主要包括三个基本步骤:

  1. 索引 - 将文档语料库拆分为较短的块,并通过编码器构建矢量索引。
  2. 检索 - 根据问题和块之间的相似性检索相关文档片段。
  3. 生成 - 根据检索到的上下文生成问题的答案。

高级 RAG

朴素RAG在检索、生成和增强方面面临多重挑战。随后提出了高级 RAG 范式,并涉及检索和检索的额外处理。在检索之前,可以使用查询重写、路由和扩展等方法来对齐问题和文档块之间的语义差异。检索后,对检索到的文档语料进行重新排序可以避免“中途丢失”现象,也可以对上下文进行过滤和压缩,以缩短窗口长度。

模块化 RAG

随着RAG技术的进一步发展和演进,突破了传统的朴素RAG检索生成框架,产生了模块化RAG的概念。在结构上,它更加自由和灵活,引入了更具体的功能模块,如查询搜索引擎和多个答案的融合。在技术上,它将检索与微调、强化学习和其他技术集成在一起。在流程方面,RAG 模块经过设计和编排,产生了各种 RAG 模式。

然而,模块化RAG并不是突然出现的。这三种范式之间存在着继承与发展的关系。Advanced RAG 是 Modular RAG 的特例,而 Naive RAG 是 Advanced RAG 的特例。

三种 RAG 范式之间的比较。

如何进行增强?

为了构建一个好的RAG系统,其中增强部分是关键,需要考虑三个关键问题:

  1. 检索什么?
  2. 何时取回?
  3. 如何使用检索到的内容?

从以上三个问题出发,我们组织增强如下:

  • 增强阶段。检索增强可以在预训练微调推理阶段进行,这决定了外部知识的参数化程度,并对应所需的不同计算资源。

  • 增强源。增强可以利用各种形式的数据,包括非结构化数据,例如文本段落、短语或单个单词。也可以使用结构数据,例如索引文档、三元组数据或子图。另一种方法是不依赖外部信息源,而是充分利用LLM的内在功能,从LLM本身生成的内容中检索。

  • 增强过程。最初的检索是一个一次性的过程,但在RAG的发展中逐渐出现了迭代检索、递归检索和自适应检索方法,其中LLM自行决定检索的时间。

  • 具有不同增强方面的技术树。

RAG核心组件的分类

RAG 还是微调?

除了 RAG,LLM 的主要优化策略还包括 Prompt Engineering 和 Fine-tuning (FT)。每个都有自己独特的功能。根据他们对外部知识的依赖和模型调整的要求,他们每个人都有合适的场景。

RAG就像是给模型一本自定义信息检索的教科书,非常适合特定的查询。另一方面,FT 就像学生随着时间的推移内化知识,更适合模仿特定的结构、风格或格式。FT 可以通过增强基础模型的知识、调整输出和教授复杂的指令来提高模型的性能和效率。但是,它不擅长集成新知识或快速迭代新用例。RAG 和 FT 并不相互排斥;它们是互补的,一起使用可能会产生最佳结果。

RAG 与微调象限图

如何评估 RAG?

RAG的评价方法多种多样,主要包括三种质量评分:语境相关性、答案保真度答案相关性。此外,评估还涉及四个关键能力:噪声鲁棒性、拒绝能力、信息集成和反事实鲁棒性。这些评估维度将传统的定量指标与RAG特征的专业评估标准相结合,尽管这些标准尚未标准化。

在评估框架方面,有RGB、RECALL等基准测试,也有RAGAS、ARES、TruLens等自动化评估工具,有助于全面衡量RAG模型的性能。

前景

RAG的发展正在蓬勃发展,有几个问题值得进一步研究。我们可以从三个方面来期待这些:

严峻的挑战

旨在进一步解决RAG当前面临的挑战;

  • 上下文长度。当检索到的内容过多且超出窗口限制时该怎么办?如果 LLM 的上下文窗口不再受限,那么应该如何改进 RAG?
  • 稳健性。如何处理检索到的错误内容?如何过滤和验证检索到的内容?如何增强模型的抗中毒和抗噪能力?
  • 与微调的协调。如何同时利用 RAG 和 FT 的效果,它们应该如何协调、组织,无论是串联、交替还是端到端?
  • 标度定律:RAG 模型是否满足标度定律?RAG是否会在什么情况下遇到逆标度定律现象?
  • LLM的作用。LLM 可用于检索(用 LLM 的生成代替搜索或搜索 LLM 的内存)、生成、评估。如何进一步挖掘LLM在RAG中的潜力?
  • 生产就绪。如何降低超大规模语料库的检索延迟?如何确保检索到的内容不会被 LLM 泄露

多式联运扩展

如何将 RAG 不断发展的技术和概念扩展到其他数据模式,例如图像、音频、视频或代码?一方面,这可以增强单一模态内的任务,另一方面,它可以通过RAG的思想融合多模态。

RAG的生态系统

RAG的应用不再局限于问答系统;它的影响力正在扩展到更多领域。现在,各种任务,如研究系统、信息提取报告生成,都开始受益于RAG技术的应用。

与此同时,RAG技术栈正在经历蓬勃发展。除了 Langchain 和 LlamaIndex 等知名工具外,市场上还出现了更有针对性的 RAG 工具,例如:针对特定用例定制以满足更集中的场景需求的 RAG 工具;那些简化用于进一步降低进入门槛的措施;以及那些专门从事功能的,逐渐瞄准生产环境。

RAG论文清单

增强阶段

预训练

1.通过从数万亿个令牌中检索来改进语言模型 [论文][代码]

2.基于检索增强语言模型的少样本学习 [论文]

3.Toolformer:语言模型可以自学使用工具[论文]

4.复印就是你所需要的[纸张]

5.基于检索增强编码器-解码器语言模型的上下文学习[论文]

6.我们是否应该用检索来预训练自回归语言模型?[论文]

7.Demonstrate-Search-Predict: Composing retrieval and language models for knowledge-intensive NLP[论文]

微调

1.面向开放领域问答的密集段落检索[论文]

2.UPRISE: Universal Prompt Retrieval for Improving Zero-Shot Evaluation[论文][代码]

3.从读者到检索者进行知识的提炼,用于问答[论文]

4.RA-DIT: Retrieval-Augmented Dual Instruction Tuning[论文]

5.Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection[论文]

6.基于知识的对话生成知识图谱增强语言模型[论文]

7.结构感知语言模型预训练改进结构化数据的密集检索 [论文] [代码]

8.Replug: Retrieval-augmented black-box language models [论文]

9.增强适应的猎犬提高了语言的泛化能力 模型作为通用插件 [论文][代码]

推理

1.通过记忆进行泛化:最近邻语言模型[论文]

2.演示-搜索-预测: 为知识密集型 NLP 编写检索和语言模型 [论文][代码]

3.关键字增强检索:与语音界面集成的信息检索新框架。[论文]

4.将检索与思维链推理交织在一起,用于知识密集型多步骤问题。[纸张][代码]

5.生成而不是检索:大型语言模型是强大的上下文生成器 [论文] [代码]

6.In-Context Retrieval-Augmented Language Models [论文]

增强源

非结构化数据

1.UPRISE: Universal Prompt Retrieval for Improving Zero-Shot Evaluation[论文][代码]

2.从分类到生成:跨语言检索增强ICL的见解[论文]

3.复印就是你所需要的[纸张]

结构化数据

1.FABULA:使用检索增强叙事结构生成情报报告[论文]

2.基于知识的对话生成知识图谱增强语言模型[论文]

3.KnowledGPT: Enhancing Large Language Models with Retrieval and Storage Access on Knowledge Bases [论文]

4.Graph-ToolFormer:通过ChatGPT的提示增强赋予LLMs图推理能力[论文]

LLM 生成的内容

1.Lift Yourself Up: Retrieval-Augmented Text Generation with Self-Memory [论文]

2.演示-搜索-预测: 为知识密集型 NLP 编写检索和语言模型 [论文]

3.背诵增强语言模型[论文]

4.生成而不是检索:大型语言模型是强大的上下文生成器 [论文]

5.大型语言模型的自知引导检索增强 [论文]

增强过程

一次检索

1.知识密集型NLP任务的检索增强生成[论文]

2.UPRISE: Universal Prompt Retrieval for Improving Zero-Shot Evaluation [论文]

3.基于参数化知识指导的增强大型语言模型 [论文]

4.学习检索大型语言模型的上下文示例。[论文]

5.Few-shot Learning with Re-trieval Augmented Language Models [论文] 6.Replug: Retrieval-augmented black-box language models [论文]

7.背诵增强语言模型[论文]

迭代检索

1.演示-搜索-预测: 为知识密集型 NLP 编写检索和语言模型 [论文][代码]

2.Retrieve-and-Sample: Document-level Event Argument Extraction via Hybrid Retrieval Augmentation [论文]

3.Enhancing Retrieval-Augmented Large Language Models with Iterative Retrieval-Generation Synergy[论文]

4.检索生成协同增强大型语言模型[论文]

递归检索

1.Interleaving Retrieval with Chain-of-Reasoning for Knowledge-Intensive Multi-Step Questions [论文][代码]

2.Tree of Clarifications: Answering Ambiguous Questions with Retrieval-Augmented Large Language Models [论文]

自适应检索

1.主动检索增强生成[论文][代码]

2.Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection [论文]

3.基于检索增强编码器-解码器语言模型的上下文学习[论文]

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++多线程学习[二]:线程的传参以及传参的一些坑

一、线程的传参 #include<iostream> #include<thread> #include<string> using namespace std; void threadtest(int a,double b,string str) {this_thread::sleep_for(100ms);cout << a << " " << b << " " &…

【Linux】编写第一个小程序:进度条

文章目录 1. 预备知识1.1 简单认识几个函数1.1.1 sleep()1.1.2 fflush()1.1.3 usleep()1.1.4 memset() 1.2 缓冲区1.3 回车与换行 2. 编写入门版的进度条2.1 基本逻辑2.2 美化效果2.3 代码实现2.4 执行效果 3. 编写升级版的进度条3.1 代码实现3.2 执行效果 1. 预备知识 1.1 简…

C++每日一练(15):简单幂计算

题目描述 输入两个数a和b&#xff0c;求a的b次方。 输入 输入两个整数a&#xff0c;b&#xff08;1<a<10&#xff0c;1<b<15&#xff09;。 输出 输出一个正整数&#xff0c;该值<1000000000000。 输入样例 3 3 输出样例 27 参考答案 #include<bits/stdc.h&…

企业级iptalbes防火墙

一、IPtables介绍 Iptables是unix/linux自带的一款开源的基于包过滤(对OSI模型的四层或者是四层以下进行过滤)的防火墙工具&#xff0c;它的功能十分强大&#xff0c;可以对流入和流出服务器的数据包进行很精细的控制。 iptables其实并不是真正的防火墙&#xff0c;我们可以把…

【AI绘画】全网最强midjourney使用方法!新手必收藏!!

手把手教你入门绘图超强的AI绘画程序Midjourney&#xff0c;用户只需要输入一段图片的文字描述&#xff0c;即可生成精美的绘画。下面是Midjourney注册和使用的方法。给大家带来了全新保姆级教程资料包**&#xff08;文末可获取&#xff09;** 第一步&#xff1a; 先注册一个D…

10 sping核心技术验证(Validation) 数据绑定(Data Binding)

Validation Spring提供了一个Validator接口&#xff0c;您可以使用它来验证对象。Validator接口通过使用Errors对象来工作&#xff0c;以便在进行验证时&#xff0c;验证器可以向Errors对象报告验证失败public class Person {private String name;private int age;// the usua…

代码随想录算法训练营第三天| LeetCode203.移除链表元素、707.设计链表、206.反转链表

文章目录 一、203. 移除链表元素感受代码二、707.设计链表感受代码206.反转链表感受总结一、203. 移除链表元素 感受 我对这道题。从理论上来说太熟悉了。咸鱼讲数据结构常用的方法他都会讲。但是我没上机没写过。到后面上机还是写不出来。giao。 代码 第一次写,想说一下,…

Blazor中使用impress.js

impress.js是什么&#xff1f; 你想在浏览器中做PPT吗&#xff1f;比如在做某些类似于PPT自动翻页&#xff0c;局部放大之类&#xff0c;炫酷无比。 官方示例直接放到Blazor中是不可用的。几经尝试&#xff0c;用以下方法可以实现。 &#xff08;写文不易&#xff0c;请点赞、…

Java常用类---日期时间类

日期时间类 Date类 简介 在Java中&#xff0c;Date类用来封装当前的日期和时间。Date类提供两个构造函数来初始化对象&#xff0c;如下所示。 通过Date() 使用当前日期和时间来初始化对象。 通过Date(long millisec) 来初始化对象&#xff0c;其中的参数是从1970年1月1日起…

RS触发器

转自&#xff1a;【基础】RS触发器_两个或非门构成rs触发器-CSDN博客 RS触发器为什么能 “保持上一状态” 触发器就是在常规的门电路的基础上加入了反馈&#xff0c;这样触发器就实现了存储数据的功能。这也是上面章节 “RS触发器实验” 的 RS触发器特征表 中第3条 “保持上一…

Redis的优化

1 Redis的高可用 1.1 高可用的定义 在web服务器中&#xff0c;高可用是指服务器可以正常访问的时间&#xff0c;衡量的标准是在多长时间内可以提供正常服务&#xff08;99.9%、99.99%、99.999%等等&#xff09;。 但是在Redis语境中&#xff0c;高可用的含义似乎要宽泛一些&…

mat数据格式转png

目的 将多个.mat数据格式转化成多个文件夹下的png图片格式 即 一个PAT.mat文件&#xff0c;生成一个PAT文件夹下的图片 方法 1 单文件处理 import scipy.io as scio from PIL import Image import numpy as npdef MatrixToImage(data):data data*255new_im Image.fromarray…

windos exe 以服务的形式运行(开机运行)

windos 品台编写的 小工具 exe 或者 批处理 .bat 经常需要开机自启动&#xff0c;可以直接把它 加在开启启动项&#xff0c;或者做成 windos服务&#xff0c;这样既可以开机自动启动而且还可以 防止误触关闭掉&#xff1b; windos 以服务启动 exe/bat 的通用方式&#xff1…

Word不同部分(分节)设置页眉和页码的使用指南——附案例操作

Word页眉和页码分节设置的使用指南 目录 Word页眉和页码分节设置的使用指南摘要1. 插入分节符2. 设置不同的页眉3. 设置不同的页码4. 调整页码的起始值5. 删除或更改分节6. 预览和调整 摘要 在撰写word文档时&#xff0c;我们经常需要在不同的部分应用不同的页眉和页码格式。在…

androj studio安装及运行源码

抖音教学视频 目录 1、 jdk安装 2、下载安装androj studio 3 、打开源码安装运行相关组件 4、 安装模拟器 1、 jdk安装 安卓项目也是java开发的&#xff0c;运行在虚拟机上&#xff0c;安装jdk及运行的时候&#xff0c;就会自动生成虚拟机&#xff0c; jdk前面已经讲过&…

宏景eHR 多处 SQL注入漏洞复现

0x01 产品简介 宏景eHR人力资源管理软件是一款人力资源管理与数字化应用相融合,满足动态化、协同化、流程化、战略化需求的软件。 0x02 漏洞概述 宏景eHR view、trainplan_tree.jsp等接口处存在SQL注入漏洞,未经过身份认证的远程攻击者可利用此漏洞执行任意SQL指令,从而窃…

C++力扣题目106,105--中序和后序,前序和中序遍历构造二叉树

106.从中序与后序遍历序列构造二叉树 力扣题目链接(opens new window) 根据一棵树的中序遍历与后序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如&#xff0c;给出 中序遍历 inorder [9,3,15,20,7]后序遍历 postorder [9,15,7,20,3] 返回如下的二叉树&am…

从无到有制作docker镜像、容器详细步骤

1、编写一个Dockerfile文件&#xff0c;内容如下 # 基础镜像jdk,jdk里包含里操作系统 FROM openjdk:8u282-jdk# 工作目录&#xff0c;也就是容器里目录 WORKDIR /home/prq/# 添加ppp目录下的文件到容器/home/prq/里 ADD ./ppp /home/prq/# 暴露端口8080 EXPOSE 8080# 启动脚本…

红黑树之概述

红黑树 R-B Tree&#xff0c;全称是 Red-Black Tree&#xff0c;又称为“红黑树”&#xff0c;它一种特殊的二叉查找树。红黑树的每个节点上都有存储位表示节点的颜色&#xff0c;可以是红(Red)或黑(Black)。 红黑树的特性 &#xff08;1&#xff09;每个节点或者是黑色&…

从DETR到Mask2Former(1):DETR-segmentation结构全解析

网上关于DETR做的detection的解析很多&#xff0c;但是DETR做Segmentation的几乎没有&#xff0c;本文结合DETR的论文与代码&#xff0c;对DETR做一个详细的拆解。理解DETR是理解Mask2Former的基础。 首先得把DETR-segmentation给run起来。Github上DETR的repository&#xff0…