RAG综述性论文: Retrieval-Augmented Generation for Large Language Models: A Survey

原文链接: [2312.10997] Retrieval-Augmented Generation for Large Language Models: A Survey (arxiv.org)

Introduction:

  1. 近年来大语言模型(LLM)在NLP领域展现了强大的能力, 在多个评估基准上展现了卓越的语言掌握和知识理解能力; 但在处理特定领域, 知识密集型任务, 时代型知识时, 大语言模型可能无法提供准确答案, 产生严重的幻觉, 这种黑盒式, 已训练好的模型不能及时的获取相关的知识.

  2. 微调解决上述问题取得了显著成效, 即将大量的特定领域专有知识灌输给LLM, 对该模型进行微调, 将知识参数化. 尽管SFT操作取得显著成效, 但是却有着许多的局限性: 需要消耗大量的计算资源, 成本很高, 在这种高成本消耗的情况下难以适应不断变化的信息环境; SFT将知识参数化训练给LLM, LLM将这种参数化的知识转化为不同参数的权重存储, 这导致在数据库中不常见但又很具体的知识难以保留在大语言模型中;

  3. 为了解决Fine-turning所带来的问题, RAG(检索增强生成)被提出. RAG动态地从外部知识库中检索信息, 并利用检索到的数据作为组织答案的参考(添加至prompt中), 这项技术极大地提高了答案的准确性与相关性, 且允许将已经微调好的基础大模型应用于不同的专业领域/最新知识库中, 即将LLM的强大语言理解功能与检索模块的灵活性相结合起来.

RAG总览:

RAG的一个典型应用实例如Fig.2. 将chatGPT与RAG相结合.

RAG的发展历程主要分为3个部分: 初级RAG, 高级RAG, 模块化RAG. 如Fig.3

初级RAG(Naive RAG):

  1. 三个主要步骤:

    1. 指标化(Indexing): 将不同格式的原始数据进行清洗, 提取, 转化为统一的纯文本格式, 将文本转化为语块, 通过Embedding模型将语块编码为向量表示并存储在向量数据库中;

    2. 检索(Retrieval): 计算查询向量(也就是User的Query)与检索语料库中语块的向量间相似度分数, 并将top_k个块排序后送入prompt中;

    3. 生成(Generation): 大语言模型负责根据prompt来制定相关的相应.

  2. 局限性:

    1. 检索质量: 检索库中的文档库相关度低而导致的信息错误; 数据冗余而导致的信息不准确.

    2. 回应生成质量: 这part的问题多种多样, 主要问题是缺乏足够的上下文而导致的幻觉(虚构答案).

    3. 增强过程: 最重要的挑战即如何有效地将文端的上下文融入至当前的生成任务中. 如果处理不当会导致生成内容的逻辑性不足.

高级RAG(Advanced RAG):

以提高检索质量方面为核心, 引入了预检索(Pre-Retrieval)和后检索(Post-Retrieval)的方法.

  1. 预检索阶段(两大方向):

    1. 优化索引结构, 提升标号数据的质量.

    2. 优化原始查询(Original Query), 使用户的原始问题更加清晰, 更加适合检索任务.

  2. 后检索阶段(两大方向):

    如果一次性向LLM展示所有相关文档可能会超出上下文窗口限制.

    1. 重新排序(ReRank): 将最相关的信息置于prompt的前后边缘, 这一思路已在LlamaIndex, LangChain等框架中应用.

    2. Prompt压缩: 检索文档中的噪音会对RAG性能造成不利影响, 在该阶段将无关紧要的上下文压缩, 凸显关键段落.

模块化RAG(Modular RAG):

模块化 RAG 结构打破了传统的RAG框架,这个框架原本仅涉及索引, 检索, 生成. 现在提供了更广泛的多样性和更高的灵活性, 它集成了各种方法来丰富功能模块.

检索器(Retrieval):

RAG中的R即为Retrieval, 如何从大量知识库中检索出最相关的top_k个文档至关重要. 三个关键问题: 准确的语义表示; 匹配Query和文档的语义空间; 协调Retrieval与LLM间的偏好.

概念扫盲_语义空间: Embedding模型将文本或者语言表达的意义映射到一个多维向量空间。在这个向量空间里,每个单词、短语或文档都被表示为一个向量,这些向量的位置反映了它们之间的语义关系。具体来说,语义相似的项在向量空间中会距离较近,而不相似的项则距离较远。

  1. 准确的语义表示

    1. 块优化: 找到合适语料库文档的最佳块大小, 如滑动窗口技术, 摘要嵌入技术, 元数据过滤技术.

    2. 微调Embedding模型: 确定了Chunk的适合大小后, 通过Embedding模型将Chunk和Query嵌入至语义空间中. 通过微调Embedding模型来更好的满足下游应用是很重要的.

  2. 匹配Query和文档的语义空间:

    1. 查询重写

    2. Embedding变换

  3. 调整Retrieval来使用LLM的需求:

    1. LLM监督下的训练

    2. 插入适配器

生成组件(Generation):

将检索到的信息转化为自然流畅的文本。这一设计灵感源自于传统语言模型,但不同于一般的生成式模型,RAG 的生成组件通过利用检索到的信息来提高文本的准确性和相关性。

  1. 在 RAG 中, 生成组件的输入不仅包括传统的上下文信息, 还有通过检索器得到的相关文本片段。这使得生成组件能够更深入地理解问题背后的上下文, 并产生更加信息丰富的回答.

  2. 生成组件会根据检索到的文本来指导内容的生成, 确保生成的内容与检索到的信息保持一致.

  3. 优化生成组件的输入数据主要通过后检索处理.

增强过程(Argumentation):

在该过程中主要涉及到一系列的策略和技术, 以提升RAG技术的性能, 准确度, 生成文本的相关性和丰富性. 主要是通过优化检索过程来增强(Fig.5):

  1. 迭代检索(Iterative): 在检索和生成之间不断交替, 允许在每一步/每次交替都可以有效地从知识库中获得更丰富和更有针对性的上下文.

  2. 递归检索(Recursive): 逐步细化用户查询, 将问题分解为子问题, 通过检索和生成不断解决复杂问题.

  3. 自适应检索(Adaptive): 自适应检索侧重于使RAG技术能够自主地决定是否需要外部知识检索以及何时停止检索和生成, 通常利用LLM生成的特殊令牌进行控制.

未来展望:

RAG技术取得了显著进展, 但在垂直领域仍有几个重点方向.

  1. 上下文处理问题: RAG在生成内容时受限于LLM的上下文窗口大小. 但目前LLM的上下文尺度在不断扩张, RAG如何适应这一变化是一个重点问题.

  2. 如何进一步克服噪声.

  3. RAG与Fine-turning的协同作用. RAG技术是为了解决Fine-turning的弊端, 但两者相结合可以产生更好的效果.


 目前为研0新生补基础ing, 由于LLM项目中用到了RAG技术, 故来学习一下这方面的知识. 该博客是很浅薄的一些理解旨在帮助构建理解RAG技术的整体框架, 如有错误请大佬们指点, 文中差错与不足会在知识学习层次更进一步时来修改.

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值