RAG综述 《Retrieval-Augmented Generation for Large Language Models: A Survey》笔记

news2024/10/2 22:18:13

文章目录

    • 概述
    • RAG 的定义
    • RAG的框架
      • Naive RAG
      • Advanced RAG
        • pre-retrieval process
        • Retrieval
        • post-retrieval process
      • Modular RAG
    • Retrieval
      • Enhancing Semantic Representations
        • chunk 优化
      • 微调向量模型
      • Aligning Queries and Documents
      • Aligning Retriever and LLM
    • Generation
    • Augmentation in RAG
      • RAG in Augmentation Stages
      • Augmentation Source
      • Augmentation Process
      • RAG vs Fine-Tuning
    • RAG Evaluation
      • Evaluation Targets
      • Evaluation Aspects
      • Evaluation Benchmarks and Tools
    • Llamaindex的cheet sheet
    • 参考资料

RAG(Retrieval-Augmented Generation)综述 Retrieval-Augmented Generation for Large Language Models: A Survey 粗略笔记,笔记中的图片大部分来自论文。

概述

LLM令人赞叹的能力之外也面临着幻觉、过时的知识、不透明、无法回溯的推理过程等挑战,RAG(Retrieval-Augmented Generation,检索增强)在2023年以来是解决这些LLM面临的挑战的热门解决方法。

综述《Retrieval-Augmented Generation for Large Language Models: A Survey》对RAG的发展和相关技术作了全面的总结。作者们将RAG范式进展概括为三个部分:Naive RAG, the Advanced RAG, the Modular RAG。将RAG相关研究演变分为如下图的四个阶段,这四个阶段是伴随着大模型的能力来演进的,其共性都是为了让模型更好的利用知识。
在这里插入图片描述

作者总结的RAG生态图

在这里插入图片描述

RAG 的定义

下图的RAG使用案例展示了RAG的工作流程:

  • Indexing: 语料被切分成块,进行向量编码后建立索引
  • Retrieval: 检索与问句相似度高的相关文档
  • Generation: LLM基于检索到的上下文生成对应问题的回答

在这里插入图片描述

RAG关键问题:

  • what to retrieve,从simple token --> entity retrieval --> chunk --> knowledge graph 粒度逐渐变粗。
  • when to retrieve,从single --> adaptive --> multiple retrieval method检索频次增加。
  • how to use the retrieved information, 结合方式从 input–> intermedia --> output layers 发展

RAG的框架

Naive RAG

Naive RAG的三个主要流程Indexing、Retrieval、Generation如前一节所述。实际应用时它在Retrieval、Generation、Augmentation这三个地方面临着一些挑战:

  • 检索质量面临的挑战:低精度可能会造成幻觉、低召回可能使LLM无法全面回答问题
  • 生成质量可能产生幻觉
  • 增强过程面临着如何有效结合检索到的上下文到生成任务的挑战,可能会生成杂乱无章和不一致的输出。此外还有信息冗余和重复的问题
  • 如何区分多个检索文档的重要性和相关度,如何调和不同写作风格和语调确保输出的一致性
  • 如何避免模型只是重复检索的内容而不提供有价值的信息

Advanced RAG

为了克服Naive RAG的缺点,对于检索质量,Advanced RAG采用了一些检索前(pre-retrieval)和检索后(post-retrieval)策略,对于索引使用了滑动窗口、细粒度分隔和metadata等。

pre-retrieval process

这一过程主要是优化数据索引,目的是为了提高被索引内容的质量,有五个主要策略:

  • 增加数据粒度(Enhancing data granularity):去掉不相关信息、消除实体和词项的模糊性、确认事实准确性、更新过期文档。
  • 优化索引结构(Optimizing index structures): 调整分块chunk的大小、查询多个索引、利用图结构来捕捉相关信息
  • 添加元数据信息(Adding metadata information):添加相关元数据信息如日期、目的等用来过滤chunk,以及参考文献的章节和分段信息来提高检索效率。
  • 对齐优化(Alignment optimization): 引入”假设问题“来对齐文档(HyDE)
  • 混合检索
Retrieval

检索阶段主要是计算查询与chunk的相似性,而向量模型对这个过程很关键,优化向量模型的方法:

  • 微调向量模型,使用大模型如GPT-3.5-turbo基于文档chunk来生成一些问题后组成的语料对可作为微调语料。
  • Dynamic Embedding,即相同的词对应到不同的上下文会有不同的向量表示。(对作者列的这一点有些疑问,现在主流的向量模型都是动态Embedding了,为啥要在这里单独列出来?)
post-retrieval process

如果直接将检索到的所有信息都喂给LLM,可能会超过LLM的上下文窗口限制,并且也可能会引入噪声使LLM不能专注在主要信息上。现在的检索后处理方法有:

  • Re-Ranking. 对检索到的信息进行重排序,可以使用bge-rerank、cohereAI rerank等,也可以使用LostInTheMiddleRanker(将最不重要的内容放在prompt的中间)、Diversity Ranker(按照片段多样性来排序)等策略
  • Prompt Compression. 压缩prompt中的不相关信息,相关研究有Selective Context、LLMLingua、Recomp、Context、Walking in the Memory Maze等

Modular RAG

在这里插入图片描述

作者所定义的RAG的三个范式概览如上图所示,虽然概念上有做区分,但是Modular RAG不是孤立的,Advanced RAG 是Modular RAG的特殊形式,Naive RAG 是Advanced RAG 的特殊形式。

modular RAG 包括的新模块:

  • 搜索模块(Search),除相似性检索外,还包括搜索引擎、数据库、知识图谱等
  • 记忆模块(Memory),利用LLM的记忆能力来辅助检索,代表工作如Selfmem
  • 融合模块(Fusion),将查询扩展为multi-query,代表工作如RAG-Fusion
  • 路由模块(Routing),对于用户请求决定接下来的行为,比如是否要搜索特定数据库、是否要进行摘要等等
  • 预测模块(Predict),使用LLM来生成上下文,而不是直接先去检索
  • 任务适配模块(Task Apapter),使RAG适应不同的下游任务,相关工作有UPRISE和 PROMPTAGATOR 。

相比于Naive RAG 和Advanced RAG由固定的一些模块组成,modular RAG的模式更多样和灵活,目前的研究主要分两块:Adding or Replacing Modules和Adjusting the Flow between Modules.

RAG的Pipeline涉及到的优化工作:

  • Hybrid Search Exploration,应用不同的检索技术:keyword-based search, semantic search, vector search
  • Recursive Retrieval and Query Engine,既检索小chunk,也检索更大chunk
  • StepBack-prompt,鼓励LLM考虑更大的概念
  • Sub-Queries,不同的查询策略如树查询、向量查询、chunk的依次查询
  • Hypothetical Document Embeddings,HyDE(使用LLM根据查询语句生成假设的问句,使用假设问句来进行相似度检索)

Retrieval

创建有效的检索器设计到的三个基础问题:1. 怎么得到有效的语义表征?2. 哪些方法可对齐查询和文档的语义空间?3.怎么使检索器的输出对齐大模型的偏好?

Enhancing Semantic Representations

chunk 优化

chunk太大或者太小都可能会造成次优结果,所以选择合适chunk大小很重要,选择合适的chunk大小要考虑以下因素:

  • 索引内容的特性
  • 向量模型和其最佳编码长度,比如sentence-transformer更适合句子编码,而text-embedding-ada-002更适合大小为256或512个token的文本块
  • 用户查询请求的长度和复杂性
  • 检索结果的应用场景,比如语义搜索或问答
  • 所使用的LLM的上下文窗口大小

目前RAG相关的块优化方法:

  • 滑动窗口技术,使得可以合并多个检索过程的相关结果
  • small2big,在初始检索阶段使用小的文本块,接着将相关的更大的文本块喂给LLM处理
  • abstract embedding technique,排序基于文档摘要的top K 个检索结果,提供了对文档更综合的理解
  • 基于metadata的文档过滤
  • 图索引技术,将实体与关系转变成节点和连接,可提升相关度,特别是对于多跳问题很有帮助。

微调向量模型

现在的向量模型性能已经比以前更强,但是对于专业领域内的应用仍有力不从心的情况,并且微调向量模型之后可以使得模型更好的理解用户请求。微调向量模型的两种方法:

  • Domain Knowledge Fine-tuning,重要的是构建一个涵盖领域相关的数据集,数据集包括:queries、a corpus、relevant documents.
  • Fine-tuning for Downstream Tasks,代表工作如 PROMPTAGATOR、LLM-Embedder。

Aligning Queries and Documents

  • Query Rewriting ,Query2Doc和ITER-RETGEN将原查询添加额外的指引语句后使用LLM生成伪文档;HyDE生成假设文档;RRR引入一个反转传统检索和阅读顺序的框架。STEP-BACKPROMPTING基于概念使LLM进行抽象的推理和检索。
  • Embedding Transformation,使用一些技巧来转变向量,比如LlamaIndex里演示在query encoder后面添加一个adapter,SANTA也尝试去对齐查询和结构化文档

Aligning Retriever and LLM

  • Fine-tuning Retrievers,利用LLM的反馈来优化检索模型,相关工作有AAR、REPLUG、UPRISE、Atlas等
  • Apapter,训练一个外部adapter来对齐Retriever和LLM,相关工作有PRCA、RECOMP、PKG等

Generation

  • Post-retrieval with Frozen LLM,对检索到的相关文档进行处理,提高检索结果的质量。

    • Information Compression,相关工作有PRCA、RECOMP等

    • Reranking,

  • 对LLM进行微调

Augmentation in RAG

关于Augmentation的想法,它不是RAG的流程中具体的一个部分,而是RAG如何去增强LLM,所以在RAG中各个流程中都有所涉及,在内容上看起来也跟前面介绍的一些内容会有重复之处

在这里插入图片描述

RAG in Augmentation Stages

  • Pre-training Stage,在大模型的预训练阶段进行知识增强,相关工作有REALM、RETRO、Atlas、COG、RETRO++等

  • Fine-tuning Stage,在大模型的微调阶段进行知识增强

  • Inference Stage,在大模型的推理阶段进行知识增强

Augmentation Source

增强的数据来源被分为:

  • Unstructured Data

  • Structured Data

  • LLMs-Generated Content

下图是使用不同数据来源的RAG相关研究的示意(不同的颜色表示不同类别的数据源)
在这里插入图片描述

Augmentation Process

对于检索方式,一次检索的效率可能不够高,所以衍生除了如下三种检索方式(上面图片叶子边框示意了不同类型的检索方式):

  • Iterative Retrieval

  • Recursive Retrieval

  • Adaptive Retrieval

RAG vs Fine-Tuning

在这里插入图片描述

RAG像是给模型一本教科书、而微调像一个学生在不断去内化知识。两者不是互相排斥的而是互补的,在不同的层次上增强大模型的能力。

在这里插入图片描述

RAG Evaluation

Evaluation Targets

RAG的评估主要涉及检索和生成两个关键模块,因此主要评估:

  • Retrieval Quality,评估指标有Hit Rate,MRR、NDGG

  • Generation Quality,分为未标注内容和标注内容两类,对于未标注内容包括:faithfulness, relevance, non-harmfulness of the generated answers。对于标注内容主要是信息的准确度。

Evaluation Aspects

  • Quality Scores

    • context relevance
    • answer faithfulness
    • answer relevance
  • Required Abilities

    • noise robustness
    • negative rejection
    • information integration
    • counterfactual robustness

Context relevance和noise robustness对评估检索质量很重要,answer faithfulness, answer relevance, negative rejection, information integration, counterfactual robustness 对评估生成质量很重要。

在这里插入图片描述

Evaluation Benchmarks and Tools

评估基准和框架总结如下图

在这里插入图片描述

Llamaindex的cheet sheet

Llamaindex 针对这篇综述整理了一个Llamaindex 使用的cheet sheet(下面两张图片来自链接网页)
在这里插入图片描述

在这里插入图片描述

参考资料

  1. Gao, Yunfan, Yun Xiong, Xinyu Gao, Kangxiang Jia, Jinliu Pan, Yuxi Bi, Yi Dai, Jiawei Sun, and Haofen Wang. n.d. “Retrieval-Augmented Generation for Large Language Models: A Survey.” 本笔记中大部分图片来自于论文。
  2. 论文对应的github
  3. llama index 针对此篇综述整理的cheet sheet

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

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

相关文章

【工具使用-VScode】VScode如何设置空格和tab键显示

一,简介 在提交代码的时候,行末尾的tab和空格不符合规范,但是如果在vscode中不显示tab和空格的话,不能及时的查看到并改正,导致提交代码之后还需要再次进行修改,效率比较低。 代码编辑界面如图所示&#…

1+x中级题目练习复盘(一)

1、MOD(m,n) 返回m除以n的余数 2、物理备份可以分为冷备份和热备份。冷备份又称脱机备份,是指在关闭数据库后进行的备份;而热备份也称为联机备份,是在数据库运行的同时进行备份,但热备份存在着难以维护等风险。 3、删除表使用…

Elastic Stack--05--聚合、映射mapping

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1.聚合(aggregations)基本概念桶(bucket)度量(metrics) 案例 11. 接下来按price字段进行分组:2. 若想对所…

8核16G服务器支持多少人?2024年腾讯云8核16G18M轻量服务器

腾讯云8核16G轻量服务器CPU性能如何?18M带宽支持多少人在线?轻量应用服务器具有100%CPU性能,18M带宽下载速度2304KB/秒,折合2.25M/s,系统盘为270GB SSD盘,月流量3500GB,折合每天116.6GB流量&…

Qdrant 向量数据库的部署以及如何在 .NET 中使用 TLS 安全访问

本文介绍如何使用 Docker 部署 Qdrant 向量数据库,以及其相关的安全配置,并演示如何使用 .NET 通过 TLS 安全访问 Qdrant 向量数据库。 文章目录 1. 背景2. Qdrant 向量数据库的部署2.1 Qdrant 向量数据库的安全配置2.2 使用 Docker 部署安全的 Qdrant 向…

vulnstack1--红队靶机(第一部分)

环境搭建 Windows7x64 Windows server8(域控) Windows server3 注意密码是hongrisec2019,需要测试是否连通 Kali配置 Eth1是桥接的ip 流程 主机发现 目标应该是193 端口扫描 服务扫描 漏洞扫描 看一下web Win7的系统 目录爆破 web利用 …

【开源】SpringBoot框架开发教学资源共享平台

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 课程档案模块2.3 课程资源模块2.4 课程作业模块2.5 课程评价模块 三、系统设计3.1 用例设计3.2 类图设计3.3 数据库设计3.3.1 课程档案表3.3.2 课程资源表3.3.3 课程作业表3.3.4 课程评价表 四、系统展…

gensim 实现 TF-IDF;textRank 关键词提取

目录 TF-IDF 提取关键词 介绍 代码 textRAnk 提取关键词 这里只写了两种简单的提取方法,不需要理解上下文,如果需要基于一些语义提取关键词用 LDA:TF-IDF,textRank,LSI_LDA 关键词提取-CSDN博客 TF-IDF 提取关键词…

JavaEE进阶(15)Spring原理:Bean的作用域、Bean的生命周期、Spring Boot自动配置(加载Bean、SpringBoot原理分析)

接上次博客:JavaEE进阶(14)Linux基本使用和程序部署(博客系统部署)-CSDN博客 目录 关于Bean的作用域 概念 Bean的作用域 Bean的生命周期 源码阅读 Spring Boot自动配置 Spring 加载Bean 问题描述 原因分析 …

【stm32】hal库学习笔记--定时器输出PWM波

【stm32】hal库学习笔记–定时器输出PWM波 PWM波原理 输出比较 输入捕获 驱动函数 定时器驱动函数 PWM波驱动函数 定时器基本不使用DMA方式 定时器中断处理通用函数 HAL_TIM_IRQHandler实验一:输出固定占空比PWM波 时钟树配置 PF9 改为tim14CH1 tim14配置 开启tim14全局中…

基础GamePlay知识-矩形碰撞检测

主要介绍AABB碰撞检测下,矩形该如何和矩形进行碰撞检测/和圆形进行碰撞检测。 直接看图,主要是比较两个矩形的边界线的前后关系。 效果 分析什么时候重合 分析什么时候不重合 完整代码 矩形身上挂载 public class Rectangle : MonoBehaviour {public …

MES数据采集设备

在智能制造日益盛行的今天,MES(制造执行系统)作为连接计划与生产现场的关键环节,其重要性不言而喻。而MES数据采集设备则是MES系统的核心组件,负责实时、准确地获取生产现场的各种数据,为企业的生产决策提供…

内存卡损坏打不开:数据恢复全攻略

在我们的日常生活中,内存卡作为一种常见的存储设备,广泛应用于手机、相机、平板电脑等电子设备中。然而,有时我们会遇到内存卡损坏打不开的问题,导致重要的照片、视频或文件无法读取。面对这种情况,我们该如何应对呢&a…

mac电脑总卡蓝屏是怎么回事,苹果电脑老卡蓝屏怎么办

电脑老卡蓝屏是比较常见的电脑故障之一,导致这一问题的出现很可能是电脑本身的硬件,或电脑上的驱动安装错误,没法运行,当然也不排除其他的一些因素。虽说电脑蓝屏是电脑几乎都会出现的小毛病,不足以致命,但…

短视频文案素材哪里找?推荐几个既好看又好用的素材网站

我们在做短视频的同时,一般需要一些视频,文案,图片,音频,来添加短视频的突出点,那么这些短视频文案去哪里找呢? 蛙学网 想要做出容易上热门的短视频文案,你一定要找到合适的短视频素材&#…

【个人开发】llama2部署实践(三)——python部署llama服务(基于GPU加速)

1.python环境准备 注:llama-cpp-python安装一定要带上前面的参数安装,如果仅用pip install装,启动服务时并没将模型加载到GPU里面。 # CMAKE_ARGS"-DLLAMA_METALon" FORCE_CMAKE1 pip install llama-cpp-python CMAKE_ARGS"…

【C语言】深入理解指针(进阶篇)

一、数组名的理解 数组名就是地址&#xff0c;而且是数组首元素的地址。 任务&#xff1a;运行以下代码&#xff0c;看数组名是否是地址。 #include <stdio.h> int main() {int arr[] { 1,2,3,4,5,6,7,8,9,0 };printf("&arr[0] %p\n", &arr[0]);pri…

PMP-项目管理十大知识领域学习和理解

项目管理十大知识领域&#xff1a; 整合、范围、进度、成本、 质量、资源、沟通、风险、采购、干系人 十大知识领域的理解 十大知识领域裁剪情况&#xff1a; 十大知识领域: 硬技能和软技能

flink 总结

flink 流式api checkpoint state 状态分类 Managed State 和 Raw State Managed State Flink 自己管理&#xff0c;支持多种数据结构 Raw State 用户自己管理&#xff0c; 只支持byte Managed Staste 分为 Keyed State 和 operator State Managed State 只能在Keyed Str…

沁恒CH32V307VCT6开发板记录---kalrry

沁恒CH32V307VCT6开发板记录---kalrry 一、官网申请开发板二、环境准备图一 一、官网申请开发板 1.沁恒官网 二、环境准备 1.数据手册&#xff1a;CH32V307DS0.PDF&#xff0c;CH32FV2x_V3xRM.PDF 2.CH32V307评估板说明及参考应用例程&#xff1a;CH32V307EVT_ZIP 3.集成开…