当前位置: 首页 > ai >正文

【NLP】 31. Retrieval-Augmented Generation(RAG):KNN-LM, RAG、REALM、RETRO、FLARE

💡 给语言模型插上知识之翼:Retrieval-Augmented Generation(RAG)


一、封闭 vs 开放:为什么语言模型需要“记忆增强”?

传统语言模型如 GPT-3、PaLM 是 参数化记忆系统

  • 所有知识“写死”在训练权重中;
  • 无法实时更新,信息易过时;
  • 容易出现幻觉和事实错误。

二、动机场景(全部替换):

问题类型原始回答(LLM)现实期待
🕰️ 过时知识Q: Who won the 2023 Nobel Prize in Physics?
A: Albert Einstein. ❌
Q: Who is Australia’s current education minister?
A: Dan Tehan. ❌(已卸任)
🎯 特定事实Q: What type of fuel does the Airbus A350 use?
A: Jet fuel, same as cars. ❌需要准确调用领域知识
🎨 冷门作品Q: Who painted “The Sky Beneath”?
A: Unknown. ❌来自近期画展的真实画家信息

三、解决思路:非参数记忆(Non-Parametric Memory)

模型通过外部数据库查询信息,不再“闭门造车”。

类型描述
参数化知识嵌入模型权重,训练时确定
非参数化知识存储在外部文档,可更新

四、三种“检索 + 生成”结构(来源图示)

1️⃣ 并行式(Parallel)

  • 检索器先找 Top-K 文档 → 与输入拼接 → “对每个文档单独生成答案”,再后融合

🔧 应用于:KNN-LM

2️⃣ 单步顺序式(Sequential)

  • 检索器输出结果后,模型一次性阅读生成答案
  • 无后续反馈环节

🔧 应用于:RAG、REALM、RETRO

3️⃣ 多轮交互式(Multiple Rounds)

  • 模型边生成边判断何时“去查一下”
  • 发出子问题 → 检索器返回 → 继续生成

🔧 应用于:FLARE


五、向量检索:Retriever 是如何找“相关内容”的?

步骤举例(新场景)
1️⃣ 建立文档向量库将 10,000 篇自然科学论文转换为向量
2️⃣ 用户输入编码为向量“What is the difference between RNA and DNA?”
3️⃣ 计算向量相似度返回距离最小的 Top-3 文档段落

→ 类似 KNN,但是在嵌入空间中操作。


六、RAG:检索-生成基础架构(Facebook, 2020)

核心思想: RAG结合了预训练的生成模型(如BART)和非参数化的知识库,通过检索相关文档并将其与查询一起输入到生成模型中,从而增强生成结果的准确性和相关性。
在这里插入图片描述

架构与机制:

  • Retriever: 使用预训练的密集向量检索器,从知识库中检索与查询相关的文档。
  • Generator: 将查询与每个检索到的文档拼接,输入到生成模型中,生成候选答案。
  • 融合机制: 对多个候选答案进行加权融合,生成最终输出。

流程:

  1. 给定问题 x
  2. 检索器查找文档 Top-K
  3. 模型将文档拼接入输入中生成答案

🧪 示例:

Q: When was the James Webb Space Telescope launched?检索返回:
- "...launched by NASA on December 25, 2021..."
- "...successor to Hubble..."输出:
The James Webb Telescope was launched on December 25, 2021.

创新点:

将检索和生成模块解耦,便于替换和扩展。

支持多文档融合生成,提高了生成结果的丰富性和准确性。

优缺点:

优点: 结构灵活,易于集成不同的检索器和生成模型。

缺点: 原始设计中,检索器不可训练,可能导致生成模型过度依赖无关文档。

应用场景: 知识密集型任务,如问答、摘要生成等

七、REALM:融合检索到训练阶段(Google, 2020)

REALM通过引入可训练的检索器,使语言模型能够在预训练、微调和推理阶段,从大规模语料库(如Wikipedia)中检索相关文档,并结合这些文档进行语言建模,从而以更模块化和可解释的方式捕捉知识。

架构与机制:

Retriever: 使用可训练的密集向量检索器,将查询映射到向量空间,并从语料库中检索相关文档。

Reader: 将检索到的文档与原始查询一起输入到语言模型中,进行预测。

训练方式: 通过掩码语言建模(Masked Language Modeling)任务进行训练,允许梯度通过检索步骤反向传播,从而实现端到端训练。

创新点

首次实现了可训练的检索器与语言模型的联合训练。

在预训练阶段引入了检索机制,使模型能够访问外部知识。

优缺点:

优点: 提高了模型的可解释性和模块化,能够处理开放域问答等任务。

缺点: 检索器的训练和更新成本较高,检索速度可能慢于传统的稀疏方法。

应用场景: 开放域问答、需要外部知识支持的自然语言处理任务。
在这里插入图片描述

与 RAG 区别:

  • 检索器内嵌在 encoder 层
  • 在预训练时引入检索 → 表示更鲁棒

🧪 示例替换:

Q: What is the primary role of myelin in neurons?检索内容:“…myelin insulates axons, speeding up signal transmission…”→ 输出:Myelin increases neural signal transmission speed.

八、RETRO:训练时的 token-level 检索(DeepMind, 2022)

RETRO在Transformer模型的每一层中引入检索机制,使模型能够在生成过程中访问外部知识,从而增强其长期记忆能力。
在这里插入图片描述

架构与机制:
检索机制: 将输入文本划分为多个块(chunk),并为每个块检索相关的文档块。

集成方式: 在Transformer的每一层中,通过交叉注意力机制,将检索到的文档块与当前块的表示进行融合。

创新点:

在模型结构中深度集成检索机制,实现了显式的长期记忆。

使用冻结的BERT模型作为检索器,降低了训练复杂度。

优缺点:

优点: 在参数数量较少的情况下,性能可与大型模型(如GPT-3)相媲美。

缺点: 训练和索引过程复杂,对计算资源要求高。

应用场景: 需要长期记忆和外部知识支持的生成任务。

模型解码每个 token 时,都可参考检索结果。

🧪 示例:

生成中间片段:
"The invention of penicillin was by..."→ 检索:“Alexander Fleming discovered penicillin in 1928...”→ 模型补全:“...Alexander Fleming in 1928.”

九、FLARE:模型自己发问,自己查(Meta, 2023)

模型生成时识别不确定部分,主动提出子问题并检索。
核心思想: FLARE在生成过程中动态判断是否需要检索外部信息,并在必要时进行检索,从而提高生成内容的准确性和相关性。
在这里插入图片描述

架构与机制:

预测机制: 在生成每个句子之前,预测下一个句子的内容,并判断是否包含低置信度的词。

检索机制: 如果预测的句子包含低置信度的词,则使用该句子作为查询,检索相关文档,并重新生成句子。

创新点:

引入了主动检索机制,使模型能够在生成过程中动态获取外部信息。

提高了生成内容的准确性,减少了幻觉现象。

优缺点:

优点: 更节省资源,避免一开始就检索大量冗余文档。

缺点: 控制策略的训练复杂,对流式生成模型结构有一定要求。

应用场景: 长文本生成、任务规划等需要动态获取外部信息的任务。

🧪 示例:

任务:写一个介绍马达加斯加地理环境的段落。模型中途发现空白:“The island features ... climate zones.”子问题 → 检索:“What climates exist in Madagascar?”文档:“... includes tropical rainforest, dry deciduous, and subhumid zones.”最终补全:
“The island features tropical rainforest, dry deciduous, and subhumid climate zones.”

🔚 全面对比

方法检索方式亮点应用推荐
RAG提前检索架构清晰、效果稳定文档问答、客服系统
REALM训练中检索深融合表示、可泛化专业领域阅读理解
RETRO解码时检索支持长上下文、训练友好大型对话、多文档生成
FLARE交互式检索主动发问、自适应推理智能写作、规划代理
http://www.xdnf.cn/news/4002.html

相关文章:

  • 【渗透测试】Web服务程序解析漏洞原理、利用方式、防范措施
  • C++进阶之——多态
  • 【C++项目实战】日志系统
  • WEB表单和表格标签综合案例
  • win10启动项管理在哪里设置?开机启动项怎么设置
  • Android工厂模式
  • 抽奖系统(基于Tkinter)
  • 微服务项目中网关服务挂了程序还可以正常运行吗
  • 数学复习笔记 2
  • JAVA在线考试系统考试管理题库管理成绩查询重复考试学生管理教师管理源码
  • JobHistory Server的配置和启动
  • LCD,LED
  • 期末项目Python
  • GoogleTest:GMock初识
  • 嵌入式开发学习日志Day13
  • window 系统 使用ollama + docker + deepseek R1+ Dify 搭建本地个人助手
  • C++笔记之接口`Interface`
  • 恶心的win11更新DIY 设置win11更新为100年
  • 《赤色世界》彩蛋
  • 数据封装的过程
  • 分析atoi(),atol()和atof()三个函数的功能
  • 【今日三题】小红的口罩(小堆) / 春游(模拟) / 数位染色(01背包)
  • 【Bootstrap V4系列】学习入门教程之 组件-卡片(Card)
  • Linux怎么更新已安装的软件
  • sudo useradd -r -s /bin/false -U -m -d /usr/share/ollama ollama解释这行代码的含义
  • 1.openharmony环境搭建
  • osquery在网络安全入侵场景中的应用实战(二)
  • 关于毕业论文,查重,AIGC
  • QT6 源(78):阅读与注释滑动条 QSlider 的源码,其是基类QAbstractSlider 的子类,及其刻度线的属性举例
  • 算法热题——等价多米诺骨牌对的数量