ByteNoteByteNote

字节笔记本

2026年5月29日

不用RAG也能给大模型注入新知识?微软的SFT方案详解

API中转
¥120

大模型有知识截止日期的问题——训练数据之后发生的事它不知道。常见的应对方案是 RAG(外挂知识库),但微软的一项研究探索了另一条路:直接通过监督式微调(SFT)把新知识注入模型本身。

核心问题

RAG 虽然实用,但规避了一个根本问题:新知识并没有真正整合到模型里。每次推理都要检索,增加延迟,而且检索质量直接影响回答质量。

微软的研究想回答的是:能不能通过 SFT 训练,让模型直接"记住"新知识?具体来说,如何从一系列文档中构建训练数据集,让模型通过简单的 SFT 就能有效吸收新知识。

这项研究的全称是《Injecting New Knowledge into Large Language Models via Supervised Fine-Tuning》,发表在 arXiv 上。同一时期,EMNLP 2024 还有一篇对比研究《Fine-Tuning or Retrieval? Comparing Knowledge Injection in LLMs》,也得出了类似的结论:在某些场景下,微调可以匹配甚至超过 RAG 的知识注入效果。

两种数据集生成策略

研究对比了两种从文档生成 SFT 训练数据的方法:

基于标记(Token-based)的策略:先创建一组手工编写的问答对作为种子,然后计算文档各部分的 token 数量,用 GPT-4 生成足够的问答对,直到生成的 token 数量达到源部分的 1 倍、5 倍或 10 倍。

问题在于:这种方法无法确保新知识在文档中均匀覆盖。实验结果显示,即使在 10 倍规模的数据集上,仍有约 20% 的原子事实未被覆盖。原因不难理解——文档中某些部分天然更容易被模型"问到",而冷门的事实容易被忽略。

基于事实(Fact-based)的策略:这是论文提出的改进方法。先用 GPT-4 从文档中提取出原子事实列表(不重复的事实单元),然后为每个事实生成 10 个独特的问答对。通过确保每个事实都被均匀关注,所有新知识都能被训练覆盖。

Fact-based 方法的一个额外好处:每个原子事实有多个不同表述的问答对,这实际上增加了训练数据的多样性,有助于模型在不同上下文中识别和调用同一知识,减少"只会背一个标准答案"的问题。

实验设计

研究选取了 6 篇体育赛事的维基百科文章作为知识来源(事实、统计数据丰富,易于量化评估)。微调对象是 GPT-4 v0613(知识截止日期为 2021 年 9 月),使用 LoRA 进行微调,Rank 为 16,训练 3 个 epoch。

一个关键细节值得注意:梯度更新只在辅助 token(答案部分)上执行,不在用户提示 token 上执行。这样做是为了集中学习新知识,而不改变模型已有的语言能力和通用推理能力。这个设计选择很重要——如果全参数更新,模型可能会"遗忘"已有的知识。

实验结果

基于事实的数据集在知识覆盖率和模型准确率上都显著优于基于标记的数据集。

不过一个坦诚的结论是:虽然 SFT 模型在缩小与 RAG 性能差距方面取得了明显进展(尤其在 10 倍数据集规模下),但在所有测试场景中都没有完全超过 RAG 模型的性能。这说明 SFT 和 RAG 在知识获取上有不同的优势维度。

EMNLP 2024 的对比研究补充

《Fine-Tuning or Retrieval?》这篇论文做了更系统的对比。研究发现,微调和检索各有擅长:微调在需要模型"内化"知识并快速响应的场景下更有优势,因为它不需要额外的检索步骤,推理延迟更低;检索在知识频繁更新或需要引用精确来源的场景下更可靠。

一个有趣的发现是:微调可以实现"累积式"的知识学习。EMNLP 论文指出, unlike RAG,fine-tuning enables cumulative knowledge learning——这意味着通过多轮 SFT,模型可以逐步积累和整合新知识,而 RAG 每次推理都是"从零开始"的外部检索。

SFT 知识注入 vs RAG 的实际选择

两种方案各有优劣:

  • RAG:实时获取最新信息,不修改模型,可溯源引用,但依赖外部系统和检索质量,增加推理延迟,部署复杂度高
  • SFT 知识注入:知识直接嵌入模型权重,推理时无需外部检索,响应更快,部署更简单,但需要重新训练,知识更新成本高

实际上两种方法并不互斥,可以组合使用。微软后来还提出了 RAFT(Retrieval Augmented Fine-Tuning)技术,就是把 RAG 和 SFT 结合起来——训练时同时使用检索到的上下文和目标知识,让模型学会在检索到的信息中提取正确答案。这种方法结合了两者的优势。

适用场景建议

Fact-based 数据生成方法特别适合这些情况:需要让模型"内化"某个特定领域的稳定知识(不是频繁变化的信息)、推理延迟敏感的场景(没有额外检索开销)、以及不想依赖外部向量数据库的部署环境。

对于知识频繁变化的场景,RAG 仍然是更务实的选择。但如果某些核心知识是稳定的、需要模型快速准确地回答,用 Fact-based SFT 把它"烧进"模型权重里,是一个值得考虑的补充方案。两者配合使用,往往效果最好。

分享: