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: ——每个候选 doc z 独立生成一份答案,再用 retrieval 概率加权
- RAG-Token: 每个 token 的生成时对 k 个 doc 做 marginalize——同一句话可以从不同 doc 采证据
实战中 RAG-Sequence 更稳;RAG-Token 理论更好但实现复杂。
端到端训练
Retriever 和 Generator 联合优化:
- Retriever 的梯度通过 marginalized likelihood 传回
- 实践中常冻结 retriever,只微调 generator(更稳定)
面试考点
"为什么需要 RAG?" 三个痛点:
- LM 权重里的知识过时(训练截止日期后的事件不知道)
- 长尾知识 LM 容易 hallucinate
- 私有/领域知识无法进预训练
RAG 把"知识存储"和"语言生成"解耦——知识可以实时更新。
"RAG 的 pipeline 各环节最容易出问题的是什么?"(非常高频)
- Retriever recall 低:query 和文档语义错位、embedding 模型不够强 →
Rerank、HyDE、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 框架)