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

文章目录

    • 概述
    • 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.mzph.cn/news/734535.shtml

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

相关文章

ES分页查询的最佳实践:三种方案

Elasticsearch(ES)中进行分页查询时,最佳实践取决于具体的使用场景和需求。 以下是对每种分页方法的简要分析以及它们适用的情况: 1. From Size 最常见且直观的方法,通过from参数指定跳过多少条记录,si…

07 数据结构之图

# Makefile CCgcc CFLAGS -g -Wall SRCStest.c graph.c link_queue.c OBJS$(SRCS:.c.o) #variable replace APPtestall:$(OBJS) #指定一个目标, 不然默认目标不会检查依赖文件的时间戳$(CC) $(SRCS) -o $(APP) .PH…

MySQL中常用的操作语句已汇总

目录 一、库语句 1.查询现有数据库 2.创建数据库 3.选中数据库 ​编辑 4.删除数据库 二、初阶表操作 1.查看数据库现有表 2.查看表结构 3.创建表 4.删除表 5.全列查询 6.删除表2 7.修改操作 三、插入操作 1.全列插入 2.指定列插入 3.一次插入多组数据 4.插入…

【AI视野·今日NLP 自然语言处理论文速览 第八十二期】Tue, 5 Mar 2024

AI视野今日CS.NLP 自然语言处理论文速览 Tue, 5 Mar 2024 (showing first 100 of 175 entries) Totally 100 papers 👉上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Key-Point-Driven Data Synthesis with its Enhancement on Mathematica…

微服务---Eureka注册中心

目录 一、服务中的提供者与消费者 二、Eureka工作流程 三、搭建Eureka服务 四、服务拉取 五、总结 1.搭建EurekaServer 2.服务注册 3.服务发现 一、服务中的提供者与消费者 服务提供者:一次业务中,被其他微服务调用的服务。即提供接口给其他微服务。…

Golang + Redis解决缓存击穿(双层缓存)

Golang Redis解决缓存穿透(双层缓存) 代码地址: https://github.com/ziyifast/ziyifast-code_instruction/tree/main/redis_demo/cache_breakdown 1 概念 目前主流方案是在数据库前加一层缓存。类似于DB的防弹衣。 缓存击穿:Re…

chromedriverUnable to obtain driver for chrome using ,selenium找不到chromedriver

1、下载chromedriver chromedriver下载网址:CNPM Binaries Mirror 老版本在:chromedriver/ 较新版本在:chrome-for-testing/ 2、设置了环境变量还是找不到chromedriverUnable to obtain driver for chrome using NoSuchDriverException:…

SRS(Simple Realtime Server)

SRS(Simple Realtime Server - github) SRS 中文官网 docker安装srs ##(安全组放开1935端口、8080端口) docker run --rm -it -p 1935:1935 -p 1985:1985 -p 8080:8080 -p 8000:8000/udp -p 10080:10080/udp ossrs/srs:5推流 ## 不需要加端口 ffmpeg…

安装及管理docker

文章目录 1.Docker介绍2.Docker安装3.免sudo设置4. 使用docker命令5.Images6.运行docker容器7. 管理docker容器8.创建image9.Push Image 1.Docker介绍 Docker 是一个简化在容器中管理应用程序进程的应用程序。容器让你在资源隔离的进程中运行你的应用程序。类似于虚拟机&#…

Vue.js+SpringBoot开发厦门旅游电子商务预订系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 景点类型模块2.2 景点档案模块2.3 酒店管理模块2.4 美食管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 学生表3.2.2 学生表3.2.3 学生表3.2.4 学生表 四、系统展示五、核心代码5.1 新增景点类型5.2 查询推荐的…

H5 简单打赏台多合一支付收款HTML源码

源码名称:简单打赏台多合一支付收款HTML源码 源码介绍:一款简单的三合一收款码源码,只需要替换收款二维码即可 需求环境:H5 下载地址: https://www.changyouzuhao.cn/12170.html

UE5.2 SmartObject使用实践

SmartObject是UE5新出的一项针对AI的功能,可为开发者提供如公园长椅、货摊等交互对象的统一外观封装,如UE的CitySample(黑客帝国Demo)中就运用到了SmartObject。 但SmartObject实践起来较为繁琐,主要依赖于AI及行为树…

C++_可变参数模板

目录 1、可变参数模板的用法 2、参数包展开 2.1 递归方式展开 2.2 逗号表达式形式展开 3、参数包的大小 结语 前言: C11引入了可变参数模板,他的作用是可以让创建的函数模板或者类模板的模板参数可以接收任意数量参数,在C11前&#x…

C语言初学10:typedef

一、作用 为用户定义的数据类型取一个新名字 二、对结构体使用typedef定义新的数据类型名字 #include <stdio.h> #include <string.h>typedef struct Books //使用 typedef 来定义一个新的数据类型名字 {char title[50];} book;int main( ) {//book是typedef定…

【Scrapy】京东商品数据可视化

【Scrapy】京东商品数据可视化 文章目录 【Scrapy】京东商品数据可视化  &#x1f449;引言&#x1f48e;一、爬取数据&#xff1a;1.1 scrapy爬虫库简介&#xff1a;1.2 技术实现&#xff1a;1.2.1搭建框架结构1.2.2 分析网页结构 二、数据保存&#xff1a;三、数据读取以及…

回归预测 | Matlab实现BiTCN-BiGRU-Attention双向时间卷积双向门控循环单元融合注意力机制多变量回归预测

回归预测 | Matlab实现BiTCN-BiGRU-Attention双向时间卷积双向门控循环单元融合注意力机制多变量回归预测 目录 回归预测 | Matlab实现BiTCN-BiGRU-Attention双向时间卷积双向门控循环单元融合注意力机制多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.M…

使用scrapy爬取蜻蜓FM

创建框架和项目 ### 1. 创建虚拟环境 conda create -n spiderScrapy python3.9 ### 2. 安装scrapy pip install scrapy2.8.0 -i https://pypi.tuna.tsinghua.edu.cn/simple### 3. 生成一个框架并进入框架 scrapy startproject my_spider cd my_spider### 4. 生成项目 scrapy …

DFS例题(n皇后问题)C++(Acwing)

代码&#xff1a; #include <iostream>using namespace std;const int N 20;int n; char g[N][N]; bool col[N], dg[N], udg[N];void dfs(int u) {if(u n){for(int i 0; i < n; i) puts(g[i]);puts("");return; }for(int i 0; i < n…

[java入门到精通] 19 网络编程,设计模式

今日目标 网络编程 TCP通信 Junit单元测试 单例设计模式 多例设计模式 工厂设计模式 1 网络编程 1.1 软件架构 C/S结构 &#xff1a;全称为Client/Server结构&#xff0c;是指客户端和服务器结构。常见程序有&#xff31;&#xff31;、迅雷等软件B/S结构 &#xff1a…

【Python数据结构与判断1/7】复杂的多向选择

目录 导入 举个栗子 代码优化 elif 栗子 执行顺序 情况一 情况二 情况三 if-elif-else特性 三种判断语句小结 if if-else if-elif-else 嵌套语句 if嵌套 栗子 执行顺序 相互嵌套 Tips Debug 总结 导入 在前面&#xff0c;我们学习了单向选择的if语句和多项…