2025年10月8日

检索模式

检索模式决定了 RAG 系统如何从知识库中找到与查询相关的文档片段,是影响 RAG 端到端质量的关键环节,主要包含**稀疏检索**、**稠密检索**、**混合检索**和**递归检索**四大类。

知识库大模型检索增强ragretrieval

检索模式

先说结论

检索模式决定了 RAG 系统如何从知识库中找到与查询相关的文档片段,是影响 RAG 端到端质量的关键环节,主要包含稀疏检索稠密检索混合检索递归检索四大类。

QUESTION 面试高频:常见的检索策略有哪些?各有什么优缺点?

检索策略对比

策略 原理 优势 劣势 代表方法
稀疏检索 基于词频的精确匹配 关键词匹配精确、无需训练 缺乏语义理解 BM25, TF-IDF
稠密检索 用嵌入向量相似度检索 语义理解好、跨语言 对关键词匹配弱、需训练 DPR, BGE, OpenAI Embedding
混合检索 Dense + Sparse 融合 兼顾语义和关键词 需要调参融合权重 Hybrid Search
多向量检索 文档生成多个向量表示 覆盖多角度 存储开销大 MultiVector Retriever
递归检索 先检索摘要再检索原文 处理长文档效果好 多步检索延迟高 Parent-Child Retriever

稀疏检索(BM25)

QUESTION 面试高频:BM25 的核心公式是什么?

BM25 是基于词频的经典检索算法,核心思想:词频越高越相关,但边际递减;文档越长惩罚越大

BM25(D,Q)=i=1nIDF(qi)f(qi,D)(k1+1)f(qi,D)+k1(1b+bDavgdl)\text{BM25}(D, Q) = \sum_{i=1}^{n} \text{IDF}(q_i) \cdot \frac{f(q_i, D) \cdot (k_1 + 1)}{f(q_i, D) + k_1 \cdot (1 - b + b \cdot \frac{|D|}{\text{avgdl}})}

其中:

  • f(qi,D)f(q_i, D):查询词 qiq_i 在文档 DD 中的词频
  • D|D|:文档长度,avgdl\text{avgdl}:平均文档长度
  • k1k_1:词频饱和参数(通常 1.2-2.0),控制词频的边际递减
  • bb:长度归一化参数(通常 0.75),b=0b=0 忽略文档长度
  • IDF(qi)\text{IDF}(q_i):逆文档频率,衡量词的稀有程度

BM25 的优势场景:关键词精确匹配(如产品编号、人名、术语)、低资源语言、无需 GPU。

稠密检索(Dense Retrieval)

工作原理

查询 → Embedding Model → 查询向量 q
文档 → Embedding Model → 文档向量 d
相似度 = cos(q, d) 或 IP(q, d)

对比学习训练

稠密检索模型通常通过对比学习训练:

L=logesim(q,d+)/τjesim(q,dj)/τ\mathcal{L} = -\log \frac{e^{\text{sim}(q, d^+)} / \tau}{\sum_{j} e^{\text{sim}(q, d_j)} / \tau}

其中 d+d^+ 是正样本(相关文档),djd_j 包含负样本(不相关文档),τ\tau 是温度参数。

常用嵌入模型对比

模型 MTEB 排名 中文支持 维度 特点
OpenAI text-embedding-3-large 顶级 良好 3072 效果好,API 付费
BGE-M3 顶级 优秀 1024 多语言多粒度,开源
GTE-Qwen2-7B 顶级 优秀 3584 开源最强中文
Cohere embed-v3 顶级 良好 1024 支持不同任务类型
Jina-embeddings-v3 良好 2048 长文本支持好

QUESTION 面试高频:稠密检索的「查询-文档不对称」问题怎么解决? 查询通常很短(几个词),文档很长(数百词),二者语义空间分布不同。解决方案:**双编码器(Bi-Encoder)**为查询和文档使用不同编码器或不同前缀;硬负样本挖掘训练时加入难区分的负样本;**查询扩展(HyDE)**先让 LLM 生成假设性答案来丰富查询语义。

QUESTION 面试高频:为什么 Hybrid Search 应该是默认选择?

核心原因:稀疏检索和稠密检索互补性强——稀疏检索擅长关键词精确匹配(产品号、人名、术语),稠密检索擅长语义理解(同义词、释义、跨语言)。实际场景中用户查询可能包含任意组合,单一策略总有盲区。

融合策略

方法 原理 特点
Reciprocal Rank Fusion (RRF) score=rR1k+rankr(d)score = \sum_{r \in R} \frac{1}{k + rank_r(d)} 无需归一化,简单有效
加权融合 score=αscoredense+(1α)scoresparsescore = \alpha \cdot score_{dense} + (1-\alpha) \cdot score_{sparse} 需调参 α\alpha
级联 先稀疏粗筛,再稠密精排 减少计算量

RRF 公式详解

RRF(d)=rR1k+rankr(d)\text{RRF}(d) = \sum_{r \in R} \frac{1}{k + \text{rank}_r(d)}

其中 RR 是所有检索器集合,kk 是平滑常数(通常取 60)。RRF 的优势:不需要对分数做归一化,直接用排名即可融合,非常鲁棒。

高级检索技巧

HyDE(假设性文档嵌入)

用户查询 → LLM 生成假设性回答 → 假设回答的嵌入 → 用于检索

核心思想:用户的查询通常很短、很模糊,而文档很长、很具体。假设性回答的嵌入比原始查询的嵌入更接近真实文档的嵌入空间。

Contextual Retrieval(Anthropic)

解决 Chunk 的"上下文丢失"问题:

Chunk → LLM 生成上下文描述 → "此片段讨论了 2024 年 Q3 季度收入"
        ↓
      上下文描述 + 原始 Chunk → 一起嵌入

递归检索(Parent-Child)

查询 → 检索子 Chunk(小块,精确) → 映射到父 Chunk(大块,完整上下文)
                                          ↓
                                     将父 Chunk 送入 LLM

适用于需要精确检索但生成时需要完整上下文的场景。

Self-RAG 自适应检索

模型自行决定是否需要检索,并评估检索结果的相关性和生成结果的忠实度:

查询 → [需要检索吗?] → 是 → 检索 → [结果相关吗?] → 是 → 生成 → [有证据支持吗?] → 回答
              ↓ 否                    ↓ 否                    ↓ 否
           直接生成               重新检索                 重新生成

特殊 token:[Retrieve][IsRel][IsSup][IsUse] 控制自反思流程。

CRAG(纠错式 RAG)

检索结果 → 质量评估 → 高质量 → 正常使用
                      ↓ 低质量
                    触发纠正(如 Web 搜索)→ 替换/补充检索结果

设计时真正要权衡什么

  1. 单一 vs 混合检索:混合检索几乎总是优于单一策略,但增加系统复杂度
  2. 检索精度 vs 召回率:Top-K 小精度高但可能遗漏;Top-K 大覆盖广但噪声多
  3. 延迟 vs 质量:多步检索(递归检索、Self-RAG)质量好但延迟高
  4. 在线 vs 离线计算:HyDE、Query Rewriting 增加在线延迟但提升检索质量

如果要对外讲,可以怎么概括

"检索是 RAG 的核心环节。我的首选策略是**Hybrid Search(BM25 + Dense Retrieval + RRF 融合)**作为标配,因为它兼顾了关键词精确匹配和语义理解。在具体场景中,我会根据查询特点选择高级策略:短查询用 HyDE 丰富语义,长文档用 Parent-Child 递归检索保留上下文,高精度场景用 Cross-Encoder 重排。关键是要先搭基线,用评估数据驱动优化决策。"

最后记几条

  1. Hybrid Search 是默认选择:Dense + Sparse + RRF 融合,无需调参
  2. BM25 仍有价值:关键词精确匹配场景不可替代,不是"过时技术"
  3. 嵌入模型选型看 MTEB 排行榜:中文场景优先选 BGE/GTE 系列
  4. HyDE 是短查询的利器:用假设性回答的嵌入替代原始查询
  5. 检索和重排分工:粗检索用快速模型,重排用高精度模型

参考资料

  • Robertson, S. et al. "The Probabilistic Relevance Framework: BM25 and Beyond" (2009)
  • Karpukhin, V. et al. "Dense Passage Retrieval for Open-Domain Question Answering" (EMNLP 2020)
  • Gao, L. et al. "Precise Zero-Shot Dense Retrieval without Relevance Labels" — HyDE
  • Asai, A. et al. "Self-RAG" (ICLR 2024)
  • Anthropic Blog: "Contextual Retrieval" (2024)

延伸阅读