RAG(检索增强生成)技术

文章探讨了检索增强LLM如何通过结合外部数据库和信息检索技术改进大语言模型,解决长尾知识、私有数据保护、数据新鲜度和透明度等问题。RAG的关键模块包括数据和索引、查询检索和生成模块。文章还比较了RAG与SFT在不同场景下的优势和适用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.基本概念

检索增强 LLM ( Retrieval Augmented LLM ),简单来说,就是给 LLM 提供外部数据库,对于用户问题 ( Query ),通过一些信息检索 ( Information Retrieval, IR ) 的技术,先从外部数据库中检索出和用户问题相关的信息,然后让 LLM 结合这些相关信息来生成结果。下图是一个检索增强 LLM 的简单示意图。

在这里插入图片描述

传统的信息检索工具,比如 Google/Bing 这样的搜索引擎,只有检索能力 ( Retrieval-only ),现在 LLM 通过预训练过程,将海量数据和知识嵌入到其巨大的模型参数中,具有记忆能力 ( Memory-only )。从这个角度看,检索增强 LLM 处于中间,将 LLM 和传统的信息检索相结合,通过一些信息检索技术将相关信息加载到 LLM 的工作内存 ( Working Memory ) 中,即 LLM 的上下文窗口 ( Context Window ),亦即 LLM 单次生成时能接受的最大文本输入。

2.RAG解决的问题

参考资料:ACL 2023 Tutorial: Retrieval-based Language Models and Applications

(1)长尾知识:

对于一些相对通用和大众的知识,LLM 通常能生成比较准确的结果,而对于一些长尾知识,LLM 生成的回复通常并不可靠。ICML 会议上的这篇论文 Large Language Models Struggle to Learn Long-Tail Knowledge,就研究了 LLM 对基于事实的问答的准确性和预训练数据中相关领域文档数量的关系,发现有很强的相关性,即预训练数据中相关文档数量越多,LLM 对事实性问答的回复准确性就越高。从这个研究中可以得出一个简单的结论 ——** LLM 对长尾知识的学习能力比较弱**。下面这张图就是论文中绘制的相关性曲线。

为了提升 LLM 对长尾知识的学习能力,容易想到的是在训练数据加入更多的相关长尾知识,或者增大模型的参数量,虽然这两种方法确实都有一定的效果,上面提到的论文中也有实验数据支撑,但这两种方法是不经济的,即需要一个很大的训练数据量级和模型参数才能大幅度提升 LLM 对长尾知识的回复准确性。而通过检索的方法把相关信息在 LLM 推断时作为上下文 ( Context ) 给出,既能达到一个比较好的回复准确性,也是一种比较经济的方式

(2)私有数据

ChatGPT 这类通用的 LLM 预训练阶段利用的大部分都是公开的数据,不包含私有数据,因此对于一些私有领域知识是欠缺的。比如问 ChatGPT 某个企业内部相关的知识,ChatGPT 大概率是不知道或者胡编乱造。虽然可以在预训练阶段加入私有数据或者利用私有数据进行微调,但训练和迭代成本很高。此外,有研究和实践表明,通过一些特定的攻击手法,可以让 LLM 泄漏训练数据,如果训练数据中包含一些私有信息,就很可能会发生隐私信息泄露

如果把私有数据作为一个外部数据库,让 LLM 在回答基于私有数据的问题时,直接从外部数据库中检索出相关信息,再结合检索出的相关信息进行回答。这样就不用通过预训练或者微调的方法让 LLM 在参数中记住私有知识,既节省了训练或者微调成本,也一定程度上避免了私有数据的泄露风险。

(3)数据新鲜度

由于 LLM 中学习的知识来自于训练数据,虽然大部分知识的更新周期不会很快,但依然会有一些知识或者信息更新得很频繁。LLM 通过从预训练数据中学到的这部分信息就很容易过时

如果把频繁更新的知识作为外部数据库,供 LLM 在必要的时候进行检索,就可以实现在不重新训练 LLM 的情况下对 LLM 的知识进行更新和拓展,从而解决 LLM 数据新鲜度的问题

(4)来源验证和可解释性

通常情况下,LLM 生成的输出不会给出其来源,比较难解释为什么会这么生成。而通过给 LLM 提供外部数据源,让其基于检索出的相关信息进行生成,就在生成的结果和信息来源之间建立了关联,因此生成的结果就可以追溯参考来源,可解释性和可控性就大大增强。即可以知道 LLM 是基于什么相关信息来生成的回复。

利用检索来增强 LLM 的输出,其中很重要的一步是通过一些检索相关的技术从外部数据中找出相关信息片段,然后把相关信息片段作为上下文供 LLM 在生成回复时参考。有人可能会说,随着 LLM 的上下文窗口 ( Context Window ) 越来越长,检索相关信息的步骤是不是就没有必要了,直接在上下文中提供尽可能多的信息。

3.RAG关键模块

为了构建检索增强 LLM 系统,需要实现的关键模块和解决的问题包括:

  • 数据和索引模块将多种来源、多种类型和格式的外部数据转换成一个统一的文档对象 ( Document Object ),便于后续流程的处理和使用。文档对象除了包含原始的文本内容,一般还会携带文档的元信息 ( Metadata )可以用于后期的检索和过滤
  • 查询和检索模块:如何准确高效地检索出相关信息
  • 响应生成模块:如何利用检索出的相关信息来增强 LLM 的输出

4.几种RAG的调用模式

在这里插入图片描述

模式一:非结构化数据通过Embedding Model把非结构化数据进行embedding存到向量数据库中,然后形成Construct Prompts给到LLM。LLM返回结果给到用户。

模式二:用户提出问题,下一步把问题通过Embedding Model向量化,然后保存到长时记忆数据库(向量数据库)中,然后调用LLM完成问题的回答,接下来将大模型的回答存到长时记忆数据库中,最后返回给用户。

模式三:用户问问题,下一步把问题通过Embedding Model向量化,然后从Cache中(向量数据库)查询类似的问题和答案,返回给用户。如果没有命中,则去和LLM交互。然后把LLM的回答存到Cache中,最后把回答返回给用户。

这三种形式就是典型的RAG的调用模式。它可以解决不同类型的数据如何让大模型知道的问题,同时在性能和效率上得到了提高,解决了长时记忆的问题,幻觉问题也有很大改善。

5.RAG vs. SFT

RAGSFT传统方法
数据动态数据。 RAG 不断查询外部源,确保信息保持最新,而无需频繁的模型重新训练。(相对)静态数据,并且在动态数据场景中可能很快就会过时。 SFT 也不能保证记住这些知识。
外部知识库RAG 擅长利用外部资源。通过在生成响应之前从知识源检索相关信息来增强 LLM 能力。 它非常适合文档或其他结构化/非结构化数据库。SFT 可以对 LLM 进行微调以对齐预训练学到的外部知识,但对于频繁更改的数据源来说可能不太实用。
模型定制RAG 主要关注信息检索,擅长整合外部知识,但可能无法完全定制模型的行为或写作风格。SFT 允许根据特定的语气或术语调整LLM 的行为、写作风格或特定领域的知识。
缓解幻觉RAG 本质上不太容易产生幻觉,因为每个回答都建立在检索到的证据上。SFT 可以通过将模型基于特定领域的训练数据来帮助减少幻觉。 但当面对不熟悉的输入时,它仍然可能产生幻觉。
透明度RAG 系统通过将响应生成分解为不同的阶段来提供透明度,提供对数据检索的匹配度以提高对输出的信任。SFT 就像一个黑匣子,使得响应背后的推理更加不透明。
相关技术RAG 需要高效的检索策略和大型数据库相关技术。另外还需要保持外部数据源集成以及数据更新。SFT 需要准备和整理高质量的训练数据集、定义微调目标以及相应的计算资源。

与预训练或微调基础模型等传统方法相比,RAG 提供了一种经济高效的替代方法。RAG 从根本上增强了大语言模型在响应特定提示时直接访问特定数据的能力。为了说明 RAG 与其他方法的区别,请看下图。雷达图具体比较了三种不同的方法:预训练大语言模型、预训练 + 微调 LLM 、预训练 + RAG LLM。

在这里插入图片描述

在AI大模型的应用场景中,RAG技术结合了检索机制和生成模型的优势,通过唐诗三百首数据集,我们可以探索如何将经典文学作品转化为机器可以处理的向量表示。以下是将唐诗转化为向量表示并实现检索生成的过程: 参考资源链接:[AI大模型技术应用:唐诗三百首RAG检索增强生成实践](https://wenku.csdn.net/doc/bb9ohvhy8q?spm=1055.2569.3001.10343) 首先,需要理解RAG(Retrieval-Augmented Generation)技术的核心思想,即通过检索相关的信息来辅助生成模型,以提高生成内容的质量和相关性。为了将唐诗三百首数据集转化为可用于检索生成任务的向量表示,我们需要遵循以下步骤: 1. 数据预处理:对唐诗三百首的数据集进行分词、去除停用词等预处理操作,以准备好文本数据。 2. 文本嵌入:使用如BERT、GPT等预训练模型将处理后的文本转换成向量表示。这一步骤可以通过加载预训练模型,并使用其编码器(encoder)部分来实现。 3. 构建检索系统:利用Milvus这样的向量数据库来存储唐诗的向量表示,并建立有效的检索机制。Milvus可以对这些向量进行高效的相似性搜索。 4. RAG模型实现:结合检索机制和预训练生成模型来实现RAG模型。在生成文本时,模型首先从Milvus数据库中检索相关的向量,然后使用这些向量来指导生成生成更符合上下文的文本。 5. 模型训练与优化:训练RAG模型,使其能够理解唐诗的结构和风格,以及如何有效地使用检索到的信息。在训练过程中,还需要不断优化参数,提高检索质量和生成内容的准确性。 6. 部署与应用:将训练好的RAG模型部署为服务,用户可以通过API接口发送查询请求,模型则返回基于检索生成技术得到的唐诗内容。 在整个过程中,可以参考《AI大模型技术应用:唐诗三百首RAG检索增强生成实践》这份资源,它详细介绍了相关的技术和实践过程。建议仔细阅读文件集中的配置文件(如config.json)、脚本文件(如rag_tang_poems.py、split_and_embedding.py、serve.py)以及安装文档(如README.md),以获得更深入的理解和操作指导。 通过掌握这些技术,开发者不仅能够将唐诗三百首转化为向量形式,还能实现对这些经典文本的智能检索生成,从而促进传统文化与现代技术的融合与创新。 参考资源链接:[AI大模型技术应用:唐诗三百首RAG检索增强生成实践](https://wenku.csdn.net/doc/bb9ohvhy8q?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值