检索增强生成(RAG, Retrieval-Augmented Generation)

40
0
0
2024-09-13

检索增强生成(RAG, Retrieval-Augmented Generation)

RAG(Retrieval Augmented Generation)是一种人工智能技术框架,用于从外部知识库检索事实,以最准确、最新的信息为基础,来提高大型语言模型(LLMs)的生成质量。这种技术结合了预训练的大型语言模型与外部数据源,通过检索到的信息优化LLM的输出,而无需修改底层模型本身。

RAG的主要优点在于,它能够利用外部知识库中的最新信息来增强LLM的响应,从而减少生成错误信息和性能下降的问题。此外,由于LLM依赖于静态的参数知识,RAG允许模型直接访问最新信息,而不需要重新训练。这使得RAG特别适用于需要不断更新知识的场景。

完整的 RAG 应用流程主要包含两个阶段:

  • 数据准备阶段:(A)数据提取–> (B)分块(Chunking)–> (C)向量化(embedding)–> (D)数据入库

  • 检索生成阶段:(1)问题向量化–> (2)根据问题查询匹配数据–> (3)获取索引数据 --> (4)将数据注入Prompt–> (5)LLM生成答案

一、 RAG的工作架构

数据准备阶段

  1. 数据提取:从多种格式的数据源(如PDF、Word、Markdown、数据库和API等)提取数据,并进行过滤、压缩、格式化等处理。

  2. 分块(Chunking):将文档分割成一定大小的块,以保持语义完整。常见的分块方法有基于换行、标点符号或固定字符数的分块。

  3. 向量化(Embedding):将文本数据转换为向量,这一步骤对后续的检索效果至关重要。常用的嵌入模型包括moka-ai/m3e-base、GanymedeNil/text2vec-large-chinese等。

  4. 数据入库:将向量化后的数据构建索引,并存储到向量数据库中,如Facebook Research的Faiss、Chroma、Elasticsearch、Milvus等。

检索生成阶段

  1. 问题向量化:将用户的问题转换为向量形式。

  2. 数据检索:根据问题的向量,从向量数据库中检索最相关的数据。检索方法包括相似性检索(如余弦相似性、欧氏距离等)和全文检索。

  3. 获取索引数据:从数据库中获取检索到的数据的索引。

  4. 注入Prompt:将检索到的数据融入到Prompt中,为LLM生成答案提供上下文。

  5. LLM生成答案:根据注入的Prompt,LLM生成答案。

数据处理阶段

二 、 RAG VS Finetune

在提升大语言模型效果中,RAG 和 微调(Finetune)是两种主流的方法。

微调: 通过在特定数据集上进一步训练大语言模型,来提升模型在特定任务上的表现。

RAG 和 微调的对比可以参考下表(表格来源[1][2])

特征比较

RAG

微调

知识更新

直接更新检索知识库,无需重新训练。信息更新成本低,适合动态变化的数据。

通常需要重新训练来保持知识和数据的更新。更新成本高,适合静态数据。

外部知识

擅长利用外部资源,特别适合处理文档或其他结构化/非结构化数据库。

将外部知识学习到 LLM 内部。

数据处理

对数据的处理和操作要求极低。

依赖于构建高质量的数据集,有限的数据集可能无法显著提高性能。

模型定制

侧重于信息检索和融合外部知识,但可能无法充分定制模型行为或写作风格。

可以根据特定风格或术语调整 LLM 行为、写作风格或特定领域知识。

可解释性

可以追溯到具体的数据来源,有较好的可解释性和可追踪性。

黑盒子,可解释性相对较低。

计算资源

需要额外的资源来支持检索机制和数据库的维护。

依赖高质量的训练数据集和微调目标,对计算资源的要求较高。

推理延迟

增加了检索步骤的耗时

单纯 LLM 生成的耗时

降低幻觉

通过检索到的真实信息生成回答,降低了产生幻觉的概率。

模型学习特定领域的数据有助于减少幻觉,但面对未见过的输入时仍可能出现幻觉。

伦理隐私

检索和使用外部数据可能引发伦理和隐私方面的问题。

训练数据中的敏感信息需要妥善处理,以防泄露。