937 字
约 3 分钟
10
S20-B03 · 检索与重排:向量、BM25、混合、HyDE

适用读者:检索"总能返回结果",但答案总不对的人。
前置:S20-B02、S13-B03。
覆盖旧文:1067(114) 570(198) 283(102) 1070(87) 1073(102) 280(83) + 1066(113) 1075(111) = 910 点。
覆盖扩展:E-S20-005(混合检索与 RRF)。
上一篇:S20-B02 · 分块与 Embedding
下一篇:S20-B04 · 幻觉、冲突与语义漂移。


1. 一句话结论

检索有两条路:向量(语义)与 BM25(字面)。单用任何一条都会漏——所以工业级 RAG 几乎都是"多路召回 + 融合 + 重排"。

方式 强项 弱项
向量 同义、口语化 精确词、编号、罕见术语
BM25 精确词、可解释 同义词
混合 兼顾 复杂度与成本

这与 S13-A02 的"混合检索"是同一件事——那里讲搜索引擎,这里讲 RAG。


2. 四步链路(E-S20-005)

① 查询改写(Query Rewriting)   → 补全指代、扩展同义(A-1070)
② 多路召回                        → 向量 topK + BM25 topK(A-283)
③ 融合(RRF)                    → 按排名合并,避免分数不可比
④ 重排(Rerank)                 → 交叉编码器精排(A-1067)
步骤 解决的问题
改写 用户问"它多少钱"(缺指代)
多路 单路必漏
RRF 向量分与 BM25 分量纲不同
重排 召回多、精度差

3. 为什么用 RRF 而不是分数相加

实测原理(与 S13-A02 §3 同):余弦相似度在 −1..1,BM25 无上界。直接相加会让某一路主导。

RRF(score) = Σ 1 / (k + rank_i)      # k 常取 60

判据:"两路分数可比吗?" 不可比 → RRF;可比(同一模型不同索引)→ 加权。


4. 三个进阶技巧

技巧 用途 代价
HyDE(A-1073) 让模型先"假设答案"再检索 多一次生成调用
动态 topK(A-280) 按问题难度调整召回数 需阈值策略
Self-RAG(A-1075) 模型自评"要不要检索/答得够不够" 循环调用、延迟上升

"HyDE 为什么有效":假设答案的措辞更接近文档表述,从而提升召回——但它也可能把错误假设带进检索。


5. 检索失败的排查顺序

① 看召回:topK 里有没有正确片段?        → 没有:分块/embedding/改写问题
② 有片段但答案错:                        → 生成侧问题(B04)
③ 有片段但排序靠后:                      → 加重排(Rerank)
④ 完全没结果:                            → 索引没建/维度不匹配(B02)

判据:"先把 topK 打出来看" —— 这是 RAG 调试的第一步,比换模型有效得多。


6. 五个误区

误区 真相
"向量检索能替代 BM25" 精确词会漏
"分数可以直接相加" 量纲不同,用 RRF
"topK 越大越好" 噪声进上下文反而更差
"重排能救召回不到" 只能优化已召回的结果
"HyDE 一定更好" 错误假设会被带进检索

7. 自检

  1. 向量与 BM25 的强弱项?
  2. 四步链路各解决什么?
  3. 为什么用 RRF?
  4. HyDE 的原理与风险?
  5. 检索失败的四级排查顺序?

8. 下一篇

S20-B04 · 幻觉、冲突与语义漂移

检索讲完,下一篇讲最麻烦的:检索到的东西和模型知识冲突时怎么办。


本篇属于系列《S20 · AI 应用与工程》。旧文来源:A-1067/570/283/1070/1073/280/1066/1075;扩展点 E-S20-005。

S20-B03 · 检索与重排:向量、BM25、混合、HyDE
https://www.clxhxhhr.top/posts/5466/
作者
clxstart
发布于
2024-12-31
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。