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:…

使用Tesseract-OCR对PDF等图片文件进行文字识别

安装 用 Homebrew 来安装 Tesseract brew install tesseract 2. 完成 tessearact 的安装后,还需要安装中文数据包,执行以下两个操作, brew info tesseract 执行这个指令的目的,是找到 Homebrew 把 tesseract 安装在文件夹内&am…

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…

黑白名单方案

通用黑白名单方案 背景 设计一套灵活的黑白名单机制,要求无需修改代码即可修改黑白名单逻辑的切换。使用场景如下,比如原先一个新功能上线,我们期望给部分企业使用;等功能成熟后,我们一般会开放给所有的企业一起使用…

【C++】6-10 输出最大值 分数 10

6-10 输出最大值 分数 10 全屏浏览 切换布局 作者 范鹏程 单位 内蒙古师范大学 根据给定的程序,写成相关的成员函数,完成指定功能。 函数接口定义: 定义max函数,实现输出最高成绩对应的学号以及最高成绩值。 裁判测试程序样…

安装及管理docker

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

设计一个订单管理系统(OMS)系统100问?

发一个订单管理系统(OMS)是为了帮助企业有效管理订单流程、提升客户体验、优化供应链管理。一个完善的订单管理系统不仅仅是简单地记录和处理订单信息,更需要考虑到订单的全生命周期管理,包括订单的创建、支付、配送、售后等环节。在设计和开发订单管理系…

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

AcWing 4261.孤独的照片

这道题其实也是和子串分值的题是一样的,运用贡献法的思路来算的。 这里需要强调一一点:这里的说的是不小于3的子序列,而不是全部序列。 所以,在我们算出来这个值之后,需要进行减法处理,首先需要减去只有一…

R语言——采用主成分分析PCA方法下的“S 模式 “矩阵从同步分类中提取度量指标

本教程将向您展示如何根据我们的综合分类计算一些指标。 PCA PCA(Principal Component Analysis,主成分分析)是一种常用的数据降维技术,用于从高维数据中提取最重要的特征。它通过将原始数据转换为一组新的正交变量,称为主成分,以捕捉数据中最大的方差。 PCA的具体步骤…

2024年华为OD机试真题-万能字符单词拼写-Java-OD统一考试(C卷)

题目描述: 有一个字符串数组words和一个字符串chars。 假如可以用chars中的字母拼写出words中的某个“单词”(字符串),那么我们就认为你掌握了这个单词。 words的字符仅由 a-z 英文小写字母组成。 例如: abc chars 由 a-z 英文小写字母和 “?”组成。其中英文问号“?”表…

UE5.2 SmartObject使用实践

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

C++_可变参数模板

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