新乡企业网站建设公司/工具
原文: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)在前面的示例中进行了演示。它主要包括三个基本步骤:
- 索引 - 将文档语料库拆分为较短的块,并通过编码器构建矢量索引。
- 检索 - 根据问题和块之间的相似性检索相关文档片段。
- 生成 - 根据检索到的上下文生成问题的答案。
高级 RAG
朴素RAG在检索、生成和增强方面面临多重挑战。随后提出了高级 RAG 范式,并涉及检索前和检索后的额外处理。在检索之前,可以使用查询重写、路由和扩展等方法来对齐问题和文档块之间的语义差异。检索后,对检索到的文档语料进行重新排序可以避免“中途丢失”现象,也可以对上下文进行过滤和压缩,以缩短窗口长度。
模块化 RAG
随着RAG技术的进一步发展和演进,突破了传统的朴素RAG检索生成框架,产生了模块化RAG的概念。在结构上,它更加自由和灵活,引入了更具体的功能模块,如查询搜索引擎和多个答案的融合。在技术上,它将检索与微调、强化学习和其他技术集成在一起。在流程方面,RAG 模块经过设计和编排,产生了各种 RAG 模式。
然而,模块化RAG并不是突然出现的。这三种范式之间存在着继承与发展的关系。Advanced RAG 是 Modular RAG 的特例,而 Naive RAG 是 Advanced RAG 的特例。
三种 RAG 范式之间的比较。
如何进行增强?
为了构建一个好的RAG系统,其中增强部分是关键,需要考虑三个关键问题:
- 检索什么?
- 何时取回?
- 如何使用检索到的内容?
从以上三个问题出发,我们组织增强如下:
-
增强阶段。检索增强可以在预训练、微调和推理阶段进行,这决定了外部知识的参数化程度,并对应所需的不同计算资源。
-
增强源。增强可以利用各种形式的数据,包括非结构化数据,例如文本段落、短语或单个单词。也可以使用结构数据,例如索引文档、三元组数据或子图。另一种方法是不依赖外部信息源,而是充分利用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.基于检索增强编码器-解码器语言模型的上下文学习[论文]
相关文章:

RAG 详解
原文:GitHub - Tongji-KGLLM/RAG-Survey 目录 RAG调查 什么是RAG?RAG的范式 幼稚的 RAG高级 RAG模块化 RAG如何进行增强?RAG 还是微调?如何评估 RAG?前景 严峻的挑战多式联运扩展RAG的生态系统RAG论文清单 增强阶段 …...

【llm 部署运行videochat--完整教程】
# 申请llama权重 https://ai.meta.com/resources/models-and-libraries/llama-downloads/ -> 勾选三个模型 -> 等待接收右键信息 # 下载llama代码库 git clone https://github.com/facebookresearch/llama.git cd llama bash download.py -> email -> url …...

Talking about likes
Tutorial Hi! Tim here with another 925English lesson! In today’s lesson, we’re learning how to talk about likes and preferences. Why It’s Important: Talking about things we like is common in various situations, from meetings to casual chats over lunch…...

DeepSeek 发布全新开源大模型,数学推理能力超越 LLaMA-2
自从 LLaMA 被提出以来,开源大型语言模型(LLM)的快速发展就引起了广泛研究关注,随后的一些研究就主要集中于训练固定大小和高质量的模型,但这往往忽略了对 LLM 缩放规律的深入探索。 开源 LLM 的缩放研究可以促使 LLM…...

代码随想录算法训练营第二十一天| 回溯 216. 组合总和 III 17. 电话号码的字母组合
216. 组合总和 III 可以参考77.组合中关于选取数组的相关操作。 递归函数的返回值以及参数:一般为void类型 递归函数终止条件:path这个数组的大小如果达到k,说明我们找到了一个子集大小为k的组合了,然后当n为0的时候࿰…...

微服务架构最佳实践
我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版,欢迎购买。点击进入详情 构建和管理微服务是一项艰巨的任务。这是因为微服务就像多个并行的整体应用程序,它们都必须处于同步通信和并发运行时间。因此,在设计和构建…...

国内首款支持苹果Find My芯片-伦茨科技ST17H6x
深圳市伦茨科技有限公司(以下简称“伦茨科技”)发布ST17H6x Soc平台。成为继Nordic之后全球第二家取得Apple Find My「查找」认证的芯片厂家,该平台提供可通过Apple Find My认证的Apple查找(Find My)功能集成解决方案。…...

linux 01 centos镜像下载,服务器,vmware模拟服务器
https://www.bilibili.com/video/BV1pz4y1D73n?p3&vd_source4ba64cb9b5f8c56f1545096dfddf8822 01.使用的版本 国内主要使用的版本是centos 02.centos镜像下载 这里的是centos7 一.阿里云官网地址:https://www.aliyun.com/ 二. -----【文档与社区】 —【…...

Linux安装RabbitMq明白纸(无图)
Linux安装RabbitMq步骤 安装环境Erlang和RabbitMQ版本对照安装包下载地址登录Linux服务器创建安装目录将之前下载的两个rpm文件上传到这个目录下,并解压安装Erlang安装完成后,查看Erlang版本安装socat(RabbitMq安装需要这个)解压并…...

Android - CrashHandler 全局异常捕获器
官网介绍如下:Thread.UncaughtExceptionHandler (Java Platform SE 8 ) 用于线程因未捕获异常而突然终止时调用的处理程序接口。当线程由于未捕获异常而即将终止时,Java虚拟机将使用thread . getuncaughtexceptionhandler()查询该线程的UncaughtExceptio…...

商品源数据如何采集,您知道吗?
如今,电子商务已经渗透到了人们生活的方方面面。2020年新冠肺炎突如其来,打乱了人们正常的生产生活秩序,给经济发展带来了极大的影响。抗击疫情过程中,为避免人员接触和聚集,以“无接触配送”为营销卖点的电子商务迅速…...

输入输出流、字符字节流、NIO
1、对输入输出流、字符字节流的学习,以之前做的批量下载功能为例 批量下载指的是,将多个文件打包到zip文件中,然后下载该zip文件。 1.1下载网络上的文件 代码参考如下: import java.io.*; import java.net.URL; import java.n…...

js中对数字,超大金额(千位符,小数点)格式化处理
前言 这个问题的灵感来自线上一个小bug,前两天刚看完同事写的代码,对数字类型处理的很好,之前一直都是用正则和toFixed(2)处理数字相关,后面发现使用numeral.js处理更完美。 对于下面这种数据的处理,你能想到几种方法…...

Android 打开热点2.4G系统重启解决
Android 打开热点2.4G系统重启解决 文章目录 Android 打开热点2.4G系统重启解决一、前言二、过程分析1、Android 设备开机后第一次打开热点2.4G系统重启2、日志分析3、设备重启原因 三、解决方法四、其他1、wifi/有线网 代理信息也可能导致系统重启2、Android13 热点默认5G频道…...

全链路压力测试有哪些主要作用
全链路压力测试是在软件开发和维护过程中不可或缺的一环,尤其在复杂系统和高并发场景下显得尤为重要。下面将详细介绍全链路压力测试的主要作用。 一、全链路压力测试概述 全链路压力测试是指对软件系统的全部组件(包括前端、后端、数据库、网络、中间件等)在高负载…...

【python基础教程】print输出函数和range()函数的正确使用方式
嗨喽,大家好呀~这里是爱看美女的茜茜呐 print()有多个参数,参数个数不固定。 有四个关键字参数(sep end file flush),这四个关键字参数都有默认值。 print作用是将objects的内容输出到file中,objects中的…...

LeetCode255.用队列实现栈
题目传送门:Leetcode255.用队列实现栈 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。 实现 MyStack 类: void push(int x) 将元素 x 压…...

PHPStudy快速搭建网站并结合内网穿透远程访问本地站点
文章目录 [toc]使用工具1. 本地搭建web网站1.1 下载phpstudy后解压并安装1.2 打开默认站点,测试1.3 下载静态演示站点1.4 打开站点根目录1.5 复制演示站点到站网根目录1.6 在浏览器中,查看演示效果。 2. 将本地web网站发布到公网2.1 安装cpolar内网穿透2…...

AI嵌入式K210项目(1)-芯片开发板介绍
系列文章目录 在人工智能大潮滚滚而来的时代,作为一个从事嵌入式行业多年的程序猿倍感焦虑,有被替代的焦虑,也有跟不上新技术步伐的无奈,本系列文章将介绍一个从硬件设计到ai训练、最后到模型部署的完整案例;第一阶段…...

Blazor中使用impress.js
impress.js是什么? 你想在浏览器中做PPT吗?比如在做某些类似于PPT自动翻页,局部放大之类,炫酷无比。 在Blazor中,几经尝试,用以下方法可以实现。写文不易,请点赞、收藏、关注,并在转…...

ros2 ubuntu 20.04 安装 foxy
设置区域设置 确保您有一个支持UTF-8. 如果您处于最小环境(例如 docker 容器)中,则区域设置可能是最小的,例如POSIX. 我们使用以下设置进行测试。但是,如果您使用不同的 UTF-8 支持的区域设置,应该没问题。…...

Blazor 错误笔记
1. 运行时问题 Microsoft.NETCore.App.Runtime.Mono.browser-wasm Microsoft.NETCore.App.Runtime.Mono.browser-wasm 是一个 .NET Core 运行时的包,用于在浏览器中运行 .NET Core 应用程序。它是针对 WebAssembly 架构的 .NET Core 运行时,可以在浏览…...

【深度学习1对1指导】
...

XUbuntu22.04之快速复制绝对路径(二百零五)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…...

21、Kubernetes核心技术 - 高可用集群搭建(kubeadm+keepalived+haproxy)
目录 一、简介 二、高可用集群架构说明 三、部署环境说明 四、高可用集群搭建 (1)、初始化所有节点 (2)、修改host文件 (3)、调整内核参数 (4)、所有节点安装Docker (4-1)、配置 docker 的阿里 yum 源 (4-2)、yum 安装 docker (4-3)、配置 docker 的镜像源 (4-4)…...

使用SpringDataRedis操作Redis
Redis的java客户端 jedisLettuceSpring Data Redis Spring Data redis 是Spring的一部分,对 Redis 底层开发包进行了高度封装。在Spring项目中,可以使用Spring Data Redis来简化操作。 Spring Data Redis使用方式 操作步骤: 导入Spring …...

PyCharm社区版如何创建Django项目并运行
一、配置Django环境 1、使用PyCharm打开一个普通的Python项目 2、为该项目配置Django环境 (1)点击"File"-"Settings" (2)点击"Project:项目名"-"Python Interpreter"-"号" &…...

深度探讨鸿蒙工程师面试题
深度探讨鸿蒙工程师面试题 第一部分:引言 鸿蒙(HarmonyOS)作为华为推出的全场景分布式操作系统,引领着未来智能化时代的潮流。鸿蒙工程师在这一创新性领域中扮演着至关重要的角色。本文将深入研究一系列鸿蒙工程师面试题&#x…...

python数据结构堆栈
堆 堆是一种树形结构:满足两个主要性质 堆是一种完全二叉树:堆中所有层级除了最后一层都是完全填满的,且最后一层的节点都是向左排列堆中的任意节点都不大于(或不小于)其子节点的值,这也是堆的属性 impo…...

从网页连接socket服务器和I/O
1.i/o InputStream和InputStreamReader是Java I/O类库中的两个关键类,用于处理字节流。它们的主要区别在于它们处理数据的方式。 InputStream: InputStream是用于读取字节流的抽象类。它是所有字节输入流类的父类。InputStream的子类可以从不同的数据源读取字节&…...