---
layout: post
title: 全面了解 RAG 检索增强生成,深入探讨其核心范式、关键技术及未来趋势
description: 这里分享同济大学Haofen Wang的关于检索增强生成的报告《Retrieval-Augmented Generation (RAG): Paradigms, Technologies, and Trends》,全面了解RAG 范式、技术和趋势
keywords: RAG,语言模型
author: admin
date: 2024-10-12 11:31
category: 网络技术
tags: RAG
---

大型语言模型(LLMs)已经成为我们生活和工作的一部分,它们以惊人的多功能性和智能化改变了我们与信息的互动方式。然而,尽管它们的能力令人印象深刻,但它们并非无懈可击。这些模型可能会产生误导性的 “幻觉”,依赖的信息可能过时,处理特定知识时效率不高,缺乏专业领域的深度洞察,同时在推理能力上也有所欠缺。

在现实世界的应用中,数据需要不断更新以反映最新的发展,生成的内容必须是透明可追溯的,以便控制成本并保护数据隐私。因此,简单依赖于这些 “黑盒” 模型是不够的,我们需要更精细的解决方案来满足这些复杂的需求。正是在这样的背景下,检索增强生成技术(Retrieval-Augmented Generation,RAG)应时而生,成为 AI 时代的一大趋势。

RAG 通过在语言模型生成答案之前,先从广泛的文档数据库中检索相关信息,然后利用这些信息来引导生成过程,极大地提升了内容的准确性和相关性。RAG 有效地缓解了幻觉问题,提高了知识更新的速度,并增强了内容生成的可追溯性,使得大型语言模型在实际应用中变得更加实用和可信。RAG 的出现无疑是人工智能研究领域最激动人心的进展之一。

本篇综述将带你全面了解 RAG,深入探讨其核心范式、关键技术及未来趋势,为读者和实践者提供对大型模型以及 RAG 的深入和系统的认识,同时阐述检索增强技术的最新进展和关键挑战。这里分享同济大学 `Haofen Wang`的关于检索增强生成的报告:《Retrieval-Augmented Generation (RAG): Paradigms, Technologies, and Trends》 ,RAG 范式、技术和趋势。

RAG 概述
------

为什么会有`RAG`, 主要是缘于LLM的一些不足:

* 幻觉
* 过时的信息
* 参数化知识效率低
* 缺乏专业领域的深入知识
* 推理能力弱

对在企业里的真实的应用,需要综合考虑:

* 领域支持的精准回答
* 数据频繁更新的需求
* 生成内容需要可追溯可解释
* 可控的成本
* 隐私数据保护

因此有了RAG(Retrieval-Augmented Generation 检索增强生成),RAG的基本流程是,当回答问题时,首先从大量文档中检索到相关信息,然后基于这些信息,让LLMs生成答案。这样通过附加一个外部知识库,无需为每个特定任务重新训练整个大型模型。

![image.png](https://s2.loli.net/2024/03/15/2gKdfksac9oVXFu.png)

**因此RAG模型特别适合于知识密集型任务。**

### RAG 还是 Fine-tuning

要优化大模型,可以通过提示词优化(Prompt Engineering),RAG 和 Fine-tuning方法。 RAG 和 FT有什么区别?根据对外部知识的依赖程度和模型调整的需求,他们都有适合自己的应用场景。

![image.png](https://s2.loli.net/2024/03/15/ED82ViYpfvuX1nN.png)

RAG就像是为模型提供了一本定制的带有信息检索的教科书,非常适合特定领域的查询。另一方面,FT就像是随着时间的积累将知识内化的学生,因此更适合模仿特定的结构、风格或格式。FT可以通过增强基础模型的知识、调整输出和教授复杂指令来提高模型的性能和效率。然而,它不擅长整合新知识或快速迭代新的使用案例。RAG和FT并不是相互排斥的,它们是互补的,结合起来使用会产生更佳的效果。

### RAG 应用

RAG 非常适合下面的场景:

* 长尾数据
* 频繁更新的知识
* 需要验证和可追溯性的答案
* 专业领域知识
* 数据隐私保护

![image.png](https://s2.loli.net/2024/03/15/LDhMF89BQKTkq1R.png)

RAG 范式的演变
---------

作者将RAG分为`Naive RAG`,`Advanced RAG`,和`Modular RAG`三种范式。

`Naive RAG` 就是传统的RAG 流程,先**Indexing**,然后**Retrieval**,最后**Generation**。`Naive RAG`在检索、生成和增强方面面临着许多挑战,因此随后提出了`Advanced RAG`范式,增加了`预检索`和`检索后处理`中的额外处理。在检索之前,可以使用`query改写`、`routing路由`和`query扩展`等方法来对齐问题和文档块之间的语义差异。检索后,对检索到的doc进行一个`rerank`,可以避免“中间丢失”现象,也可以对上下文进行过滤压缩,缩短窗口长度。

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

然而,模块化RAG也不是突然出现的,三种方式存在继承与发展的关系。可以这么理解`Advanced RAG`是模块化RAG的一个特例,而`Naive RAG`是`Advanced RAG`的特例。

![image.png](https://s2.loli.net/2024/03/15/4FUaI1rteNLKXDO.png)

### RAG的三个关键问题

* 检索粒度 可以是token、短语,还是chunk,段落、实体或者知识图谱
* 什么时候检索
* 如何利用检索到的信息

![image.png](https://s2.loli.net/2024/03/15/d5uoz7AmDcrkQyT.png)

关于检索什么层级的内容,我们可以从检索粒度的粗细,以及数据结构化的高低来看业界研究结果。

![image.png](https://s2.loli.net/2024/03/15/qOxAvzmug1eGd5j.png)

X轴结构化从低到高,Y轴从精细到粗粒度。
三个代表:

* Chunk级别,非结构化数据,搜索会召回大量信息,但是准确度低,会包含冗余信息
* 知识图谱,丰富的语义和结构化数据,检索效率低,效果严重依赖KG的质量
* KNN-LMM 擅长处理长尾和跨域问题,计算效率高,但需要大量存储

**如何使用检索到的内容**

在推理过程中,将检索到的信息集成到生成模型的不同层中

![image.png](https://s2.loli.net/2024/03/15/38v42HZIoxbuiJN.png)

**检索的时机**

按照检索的频率从低到高,有:

![image.png](https://s2.loli.net/2024/03/15/u4U2TpfvKAQGWOs.png)

* 一次检索,只检索一次,效率高,但可能导致检索结果相关度低
* 自适应检索,平衡效率和检索效果
* 每N个token检索1次,会导致检索次数过多,并召回大量冗余信息

**RAG 技术发展树**

![image.png](https://s2.loli.net/2024/03/15/zU716QZ5JXSwrTD.png)

RAG 关键技术
--------

### 数据索引优化

* 核心是chunk的策略:
* Small-2-Big 在sentense级别做embedding
* Slidingwindow 滑动窗口,让chunk覆盖整个文本,避免语义歧义
* Summary 通过摘要检索文档,然后从文档中检索文本块。
* 另外为了提升效果,还可以添加一些额外的meta信息,例如page,时间,类型,文档标题等。
* 有了meta,就能进行过滤,或者增强信息量

![image.png](https://s2.loli.net/2024/03/15/5W7KC4J3D8joRZF.png)

Small 2 Big方法:

![image.png](https://s2.loli.net/2024/03/15/WK5BLsytkTJYaq2.png)

Abstract方法

![image.png](https://s2.loli.net/2024/03/15/bXiE6JHzsrhweZj.png)

伪metadata方法,也就是`HyDE`,y将用户的原始查询转换为一个或多个假设性文档。这些文档是针对查询构建的文本片段,它们包含了可能回答查询所需的信息,然后用这些文档计算embedding,从真实文档库检索真实的文档,识别出与原始查询最相关的文档,检索到的真实文档被用作生成响应的上下文信息,可以辅助语言模型生成更准确、更相关的回答。

![image.png](https://s2.loli.net/2024/03/15/ZAtOkeNC3o6wzDK.png)

meta过滤方法:

![image.png](https://s2.loli.net/2024/03/15/khdNX8LRQUo4fTb.png)

核心就是数据很多,通过meta过滤,可以减少范围,提高精度。

### **结构化检索文档库**

可以分层组织检索文档库

* Summary → Document方法, 用摘要检索取代文档检索,不仅可以检索最直接相关的节点,还可以探索与这些节点相关的其他节点。

![image.png](https://s2.loli.net/2024/03/15/qR6uxgG7A42wSbY.png)

* Document → Embedded Objects 比如一个PDF文档具有嵌入对象(如表、图表),首先检索实体引用对象,然后查询底层对象,如文档块、数据库、子节点

![image.png](https://s2.loli.net/2024/03/15/ySloDAqsgpREOJW.png)

### KG作为召回数据源

GraphRAG 从用户的输入查询中提取**实体**,然后**构建子图**以形成上下文,并最终将其输入到大模型中进行生成

* 使用LLM 从问题中提取关键entity
* 基于提取的到entity实体,检索子图,并深入到一定的深度,比如2跳或者更多
* 利用获得的上下文通过LLM生成答案

![image.png](https://s2.loli.net/2024/03/15/Liv8O1VtYyrQHDE.png)

下面是一个具体的案例:
![image.png](https://s2.loli.net/2024/03/15/ZUAlKQoGqmRzX3p.png)

### **Query 优化**

问题和答案并不总是具有很高的语义相似性,所以我们可以适当的调整query,以便获得更佳的检索效果,可以通过`Query Rewriting`改写技术和`Query Clarification` 澄清技术。

* Query 改写: 将query改写成一个或者多个search query,分别查询,这样可以得到更佳的召回效果,比如下面例子中,问两个人的共同`profession`职业,那么可以先分别查询各自的,然后让大模型去解决。

![image.png](https://s2.loli.net/2024/03/15/tfvTONHnilLhDbP.png)

* Query Clarification

![image.png](https://s2.loli.net/2024/03/15/dkRwsgFrfLbv9pM.png)

### Embedding 嵌入模型优化

* 一方面,可以选择一个合适的商用embedding 供应商,比如:

![](https://s2.loli.net/2024/03/15/Uc4w7rF3PGp2ktH.png)

* 另外一方面,可以自己微调embedding模型,现在业界有很多还不错的embedding模型,比如BAAI的BGE模型

![image.png](https://s2.loli.net/2024/03/15/bkGK9PZndq5OpWR.png)

* 微调的方法,可以通过领域数据和下游任务需要去微调

![image.png](https://s2.loli.net/2024/03/15/mVBKaxGATE4U1Js.png)

### **检索流程优化**

在检索流程方面,可以有`Iterative`迭代式检索,也可以Adaptive自适应检索

![image.png](https://s2.loli.net/2024/03/15/ePVps8qvUcDwoy9.png)

### Hybrid (RAG+Fine-tuning) 融合RAG和FT

既可以检索FT,也可以生成FT,还可以进行检索,生成联合FT

![image.png](https://s2.loli.net/2024/03/15/pRWIJAQHDP8zetE.png)

### 相关研究总结

![image.png](https://s2.loli.net/2024/03/15/CaWpDAZhPE753Jw.png)

RAG 评估
------

* 评测方法层面,可以检索和生成独立评测,也可以端到端进行评测
* RAG 的评估办法很丰富,主要包括三个质量分数:**上下文相关度、答案忠实度、答案相关度**
* 评估涉及四项核心能力:鲁棒性、拒识能力、信息整合能力和反事实解释
* 评估框架方面,有 RGB、RECALL 等基准指标,以及 RAGAS、ARES、TruLens 等自动化评估工具,可以较全面地衡量 RAG 模型的性能。

![image.png](https://s2.loli.net/2024/03/15/EaT3tZ9hUzNB7Yv.png)

下面补充一些信息:

![image.png](https://s2.loli.net/2024/03/15/IVDNeK1zaolyTu4.png)

具体来说,评估方法主要围绕其两个关键组件:检索(Retrieval)和生成(Generation)。评估这些组件的性能涉及到多个质量分数和能力,这些分数和能力共同反映了 RAG 模型在信息检索和生成过程中的效率。

### 检索质量评估指标:

1. **Hit Rate (HR)**:命中率,衡量检索结果中相关文档的比例。高命中率意味着检索系统能够更准确地找到用户查询相关的信息。
2. **Mean Reciprocal Rank (MRR)**:平均倒数排名,衡量检索结果中相关文档的平均排名的倒数。MRR 越高,表示检索系统的性能越好。
3. **Normalized Discounted Cumulative Gain (NDCG)**:归一化折扣累积增益,用于衡量检索结果列表中相关文档的排名质量。NDCG 考虑了文档的相关性和排名位置。
4. **Precision**:精确率,衡量检索结果中被正确识别为相关的文档的比例。
5. **Recall**:召回率,衡量检索系统找到的相关文档占所有相关文档的比例。
6. **R-Rate (Reappearance Rate)**:再次出现率,衡量检索结果中信息在后续生成文本中的出现频率。

### 生成质量评估指标:

1. **Context Relevance**:上下文相关性,评估生成的文本与检索到的上下文之间的相关性。
2. **Answer Faithfulness**:答案忠实度,确保生成的答案忠实于检索到的上下文,保持一致性。
3. **Answer Relevance**:答案相关性,要求生成的答案直接相关于提出的问题,有效解决问题。
4. **Accuracy**:准确性,衡量生成的信息的准确性。

RAG 技术栈与工业界实践
-------------

当前有LangChain、LlamaIndex、AutoGen等流行的开发框架,可以方便开发RAG应用。

![image.png](https://s2.loli.net/2024/03/15/OoHTMZzPR3IYjCx.png)

工业界也有很多RAG应用。

![image.png](https://s2.loli.net/2024/03/15/MxZKr9WYy4UnSBv.png)

总结与展望
-----

### RAG 技术框架

![image.png](https://s2.loli.net/2024/03/15/Sk6mgsKFuzJPyrN.png)

### RAG 的三个研究热点

![image.png](https://s2.loli.net/2024/03/15/zj7AmBVOIe5WL2U.png)

### RAG 的挑战

* 长上下文
* 与FT的协同
* 如何应用好LLM,充分挖掘利用LLM
* 提升鲁棒性,比如如何处理错误的召回内容,如何过滤和验证召回内容
* RAG 是否也遵循Scaling Law
* 最佳工程实践,比如提升在大数据量下的检索延迟,如何保障隐私的检索内容不被LLM泄露

![image.png](https://s2.loli.net/2024/03/15/L9b6at48WTOnBDd.png)

### 多模态扩展

将RAG从文本扩展到多模态

![image.png](https://s2.loli.net/2024/03/15/rxOjqaiUZcJE1tD.png)

### RAG 开发生态建设

扩展RAG下游任务,改善生态建设

![image.png](https://s2.loli.net/2024/03/15/AJtDsSQp4iWTfVo.png)