RAG2020· NeurIPS 2020· CLASSIC

Retrieval-Augmented Generation for Knowledge-Intensive NLP

Lewis et al.

把参数化知识(LM 权重内)和非参数化知识(外部向量库)结合——RAG 赛道的起点。

arXiv:2005.11401
#rag#retrieval#foundational

核心贡献

  • 01Retriever(DPR-based)+ Generator(BART)端到端联合训练
  • 02RAG-Sequence:整段输出条件于同一个 retrieved doc
  • 03RAG-Token:每个 token 可以条件于不同 doc
  • 04在开放域 QA、fact verification 等任务上 SOTA
  • 05奠定 RAG 的经典 pipeline:encode query → retrieve top-k → condition generation

架构

text
1Query → [Retriever] → Top-k docs → [Generator conditioned on docs] → Answer

Retriever:DPR

Dense Passage Retrieval——两个独立 BERT encoder:

  • Query encoder: 把问题编码为向量
  • Passage encoder: 把文档段落编码为向量
  • 训练:对比学习 + in-batch negatives
  • 检索:query 向量和所有 passage 向量做内积,取 top-k

Generator:BART

Seq2Seq Transformer。输入:[query] [doc_1] [doc_2] ... [doc_k]。输出:答案。

RAG-Sequence vs RAG-Token

  • RAG-Sequence: p(yx)=zp(zx)p(yx,z)p(y|x) = \sum_z p(z|x) \cdot p(y|x, z)——每个候选 doc z 独立生成一份答案,再用 retrieval 概率加权
  • RAG-Token: 每个 token 的生成时对 k 个 doc 做 marginalize——同一句话可以从不同 doc 采证据

实战中 RAG-Sequence 更稳;RAG-Token 理论更好但实现复杂。

端到端训练

Retriever 和 Generator 联合优化:

  • Retriever 的梯度通过 marginalized likelihood 传回
  • 实践中常冻结 retriever,只微调 generator(更稳定)
面试视角

面试考点

"为什么需要 RAG?" 三个痛点:

  1. LM 权重里的知识过时(训练截止日期后的事件不知道)
  2. 长尾知识 LM 容易 hallucinate
  3. 私有/领域知识无法进预训练

RAG 把"知识存储"和"语言生成"解耦——知识可以实时更新。

"RAG 的 pipeline 各环节最容易出问题的是什么?"(非常高频)

  • Retriever recall 低:query 和文档语义错位、embedding 模型不够强 → RerankHyDE、Query Rewriting
  • Chunking 策略:太小上下文割裂、太大噪声稀释 → Semantic chunking、父子 chunk
  • Generator 不遵循上下文:产生上下文里没提到的信息 → Faithfulness prompt、后验事实核查

"RAG 的演进方向?"

  • Agentic RAG:LLM 自己决定是否检索、检索什么
  • GraphRAG:用知识图谱组织 chunk
  • Self-RAG:生成过程中自反思是否需要额外检索
  • Long-context RAG:把 top-50 全塞 128K 上下文,绕过精细 rerank

"RAG 效果如何评估?" 分层:

  • 检索层:Recall@k、MRR
  • 生成层:Faithfulness(忠实于上下文)、Relevance(答题相关)
  • 端到端:人工评估、LLM-as-judge(RAGAS 框架)
相关论文