Retrieval-Augmented Generation for Large Language Models: A Survey

2024-01-07 17:04

本文主要是介绍Retrieval-Augmented Generation for Large Language Models: A Survey,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

PS: 梳理该 Survey 的整体框架,后续补充相关参考文献的解析整理。本文的会从两个角度来分析总结,因此对于同一种技术可能在不同章节下都会有提及。第一个角度是从整体框架的迭代来看(对应RAG框架章节),第二个是从RAG中不同组成部分来看(对应 Retriever,Generator 和 Augmentation in RAG)。

https://arxiv.org/abs/2312.10997

Introduction

传统上,神经网络通过微调模型来参数化知识,从而适应特定领域或专有信息。虽然这项技术产生了显著的结果,但它需要大量的计算资源,成本高昂,并且需要专门的技术专业知识,使其不太适应不断变化的信息环境。参数化知识和非参数化知识发挥着不同的作用。

  • 参数知识:是通过训练LLM获得的,并存储在神经网络权重中,代表模型对训练数据的理解和概括,形成生成响应的基础。
  • 非参数知识:存在于矢量数据库等外部知识源中,不直接编码到模型中,而是作为可更新的补充信息处理。

纯参数化语言模型(LLM)将从大量语料库中获取的世界知识存储在模型的参数中。其局限性如下:

  1. 首先很难保留训练语料库中的所有知识,尤其是不太常见和更具体的知识。
  2. 由于模型参数不能动态更新,参数知识很容易随着时间的推移而过时。
  3. 参数的扩展导致训练和推理的计算费用增加。
    为了解决纯参数化模型的局限性,语言模型可以采用半参数化方法,将非参数化语料库数据库与参数化模型相集成。

检索增强生成(RAG, Retrieval-Augmented Generation) 最早由Lewis等人于2020引入,将预先训练的检索器与预先训练的seq2seq模型(生成器)相结合,并进行端到端的微调,以更可解释和模块化的方式获取知识。

在大型模型出现之前,RAG主要专注于端到端模型的直接优化。在检索端进行密集检索,例如Karpukhin等人使用基于向量的密集通道检索(DPR, Dense Passage Retrieval) ,以及在生成端训练较小的模型是常见的做法。由于总体参数较小,检索器和生成器通常都会进行同步的端到端训练或微调。

在LLM出现后,生成语言模型成为主流,在各种语言任务中表现出令人印象深刻的性能。然而,LLM仍然面临挑战,如幻觉、知识更新和数据相关问题。这影响了LLM的可靠性,使其在某些严重的任务场景中举步维艰,尤其是在需要获取大量知识的知识密集型任务中,如开放领域问答和常识推理。参数内的隐性知识可能是不完整和不充分的。在随后的研究发现,将RAG引入大型模型的上下文学习(ICL, In-Context Learning)可以缓解上述问题,具有显著且易于实施的效果。

在这里插入图片描述

背景知识

RAG 的定义

在大型语言模型时代,RAG的具体定义是指在回答问题或生成文本时,首先从大量文档中检索相关信息的模型。随后,它利用这些检索到的信息来生成响应或文本,从而提高预测的质量。RAG方法允许开发人员避免为每个特定任务重新训练整个大型模型。

总之,RAG系统由两个关键阶段组成:

  • 利用编码模型基于问题检索相关文档,如BM25、DPR、ColBERT和类似方法
  • 生成阶段:使用检索到的上下文作为条件,系统生成文本

RAG vs Fine-tuning

在这里插入图片描述

PS. 在某些情况下,将这两种技术相结合可以实现最佳的模型性能。

现有研究表明,与其他优化大型语言模型的方法相比,检索增强生成(RAG)具有显著的优势:

  1. RAG通过将答案与外部知识联系起来,减少语言模型中的幻觉问题,并使生成的回答更加准确可靠,从而提高准确性。
  2. 使用检索技术可以识别最新信息。与仅依赖训练数据的传统语言模型相比,RAG保持了响应的及时性和准确性。
  3. 透明度是RAG的一个优势。通过引用来源,用户可以验证答案的准确性,增加对模型输出的信任。
  4. RAG具有定制功能。通过对相关文本语料库进行索引,可以针对不同领域定制模型,为特定领域提供知识支持。
  5. 在安全和隐私管理方面,RAG凭借其在数据库中内置的角色和安全控制,可以更好地控制数据使用。相比之下,微调后的模型可能缺乏对谁可以访问哪些数据的明确管理。
  6. RAG的可扩展性更强。它可以处理大规模数据集,而无需更新所有参数和创建训练集,使其更经济高效。
  7. RAG产生的结果更值得信赖。RAG从最新数据中选择确定性结果,而微调模型在处理动态数据时可能会出现幻觉和不准确,缺乏透明度和可信度。

在这里插入图片描述

RAG 框架

Naive RAG

Naive RAG涉及传统的过程:索引、检索和生成,因此也被概括为 “Retrieve”-“Read” 框架。

Indexing

从源获取数据并为其建立 index 的管道通常处于脱机状态。数据索引的构建包括以下步骤:

  • 数据索引:清理和提取原始数据,将不同的文件格式(如PDF、HTML、Word、Markdown等)转换为纯文本。
  • Chunking: 这包括将加载的文本分成更小的块,因为语言模型通常对其可以处理的上下文数量有限制,因此有必要创建尽可能小的文本块。
  • 嵌入和创建索引:这是通过语言模型将文本编码为矢量的过程。得到的向量将用于后续的检索过程,以计算向量和问题向量之间的相似性。嵌入模型需要很高的推理速度。由于需要对大量语料库进行编码,并在用户提问时实时对问题进行编码。

Retrieve

给定用户的输入,使用与第一阶段相同的编码模型将查询转换为向量。计算问题嵌入和文档块在语料库中的嵌入之间的相似性。基于相似性水平,选择前K个文档块作为当前问题的增强上下文信息。

Generation

给定的问题和相关文档将合并到一个新的提示中。大型语言模型的任务是根据所提供的信息回答问题,根据不同任务的需要,可以决定是允许大型模型使用其知识,还是仅基于给定信息进行回答。

Naive RAG的缺点

Naive RAG在三个领域面临主要挑战:

  • 检索质量
    • 主要问题是精度低,检索集中的所有块都与查询相关,这会导致潜在的幻觉和空中空投问题。
    • 低召回率。当没有检索到所有相关块时,会出现这种情况,从而阻止LLM获得足够的上下文来合成答案。
    • 过时的信息。即数据冗余或过时的数据可能导致不准确的检索结果。
    </

这篇关于Retrieval-Augmented Generation for Large Language Models: A Survey的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/580632

相关文章

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs),如GPT-4、Claude-3和Gemini的快

论文翻译:ICLR-2024 PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS

PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS https://openreview.net/forum?id=KS8mIvetg2 验证测试集污染在黑盒语言模型中 文章目录 验证测试集污染在黑盒语言模型中摘要1 引言 摘要 大型语言模型是在大量互联网数据上训练的,这引发了人们的担忧和猜测,即它们可能已

DBeaver 连接 MySQL 报错 Public Key Retrieval is not allowed

DBeaver 连接 MySQL 报错 Public Key Retrieval is not allowed 文章目录 DBeaver 连接 MySQL 报错 Public Key Retrieval is not allowed问题解决办法 问题 使用 DBeaver 连接 MySQL 数据库的时候, 一直报错下面的错误 Public Key Retrieval is

UML- 统一建模语言(Unified Modeling Language)创建项目的序列图及类图

陈科肇 ============= 1.主要模型 在UML系统开发中有三个主要的模型: 功能模型:从用户的角度展示系统的功能,包括用例图。 对象模型:采用对象、属性、操作、关联等概念展示系统的结构和基础,包括类图、对象图、包图。 动态模型:展现系统的内部行为。 包括序列图、活动图、状态图。 因为要创建个人空间项目并不是一个很大的项目,我这里只须关注两种图的创建就可以了,而在开始创建UML图

速通GPT-3:Language Models are Few-Shot Learners全文解读

文章目录 论文实验总览1. 任务设置与测试策略2. 任务类别3. 关键实验结果4. 数据污染与实验局限性5. 总结与贡献 Abstract1. 概括2. 具体分析3. 摘要全文翻译4. 为什么不需要梯度更新或微调⭐ Introduction1. 概括2. 具体分析3. 进一步分析 Approach1. 概括2. 具体分析3. 进一步分析 Results1. 概括2. 具体分析2.1 语言模型

LLVM入门2:如何基于自己的代码生成IR-LLVM IR code generation实例介绍

概述 本节将通过一个简单的例子来介绍如何生成llvm IR,以Kaleidoscope IR中的例子为例,我们基于LLVM接口构建一个简单的编译器,实现简单的语句解析并转化为LLVM IR,生成对应的LLVM IR部分,代码如下,文件名为toy.cpp,先给出代码,后面会详细介绍每一步分代码: #include "llvm/ADT/APFloat.h"#include "llvm/ADT/S

Python安装llama库出错“metadata-generation-failed”

Python安装llama库出错“metadata-generation-failed” 1. 安装llama库时出错2. 定位问题1. 去官网下载llama包 2.修改配置文件2.1 解压文件2.2 修改配置文件 3. 本地安装文件 1. 安装llama库时出错 2. 定位问题 根据查到的资料,发现时llama包中的execfile函数已经被下线了,需要我们手动修改代码后

高精度打表-Factoring Large Numbers

求斐波那契数,不打表的话会超时,打表的话普通的高精度开不出来那么大的数组,不如一个int存8位,特殊处理一下,具体看代码 #include<stdio.h>#include<string.h>#define MAX_SIZE 5005#define LEN 150#define to 100000000/*一个int存8位*/int num[MAX_SIZE][LEN];void

A Comprehensive Survey on Graph Neural Networks笔记

一、摘要-Abstract 1、传统的深度学习模型主要处理欧几里得数据(如图像、文本),而图神经网络的出现和发展是为了有效处理和学习非欧几里得域(即图结构数据)的信息。 2、将GNN划分为四类:recurrent GNNs(RecGNN), convolutional GNNs,(GCN), graph autoencoders(GAE), and spatial–temporal GNNs(S