Skip to content

L02-09 混合检索:纯向量检索会漏掉关键词命中的文档 ​

全局中心内容:向量擅长语义、BM25 擅长精确词,两者互补,用 RRF 融合不需要调权重。 全局讲解主线:一个漏召案例 → 两种检索的互补性 → RRF 原理 → 权重融合对比 → 编码 → 效果验证。


P1 · 产出页 ​

中心内容:向量 + BM25 双路召回,RRF 融合,漏召率明显下降。

  • 讲解技巧
    • 开场案例:用户搜「错误码 E1024」,向量检索返回一堆「异常处理概述」,就是没有 E1024 那一页。
    • 这个例子极有代入感——专有名词、编号、缩写是向量的死穴。
  • 时长:20s

P2 · 为什么向量会漏 ​

中心内容:向量把「E1024」这种低频专有符号的语义稀释掉了。

  • 页面内容:向量检索 top5 结果展示(无一条命中)

  • 讲解技巧

    • 解释原理时别讲数学,讲直觉:Embedding 是在语义空间里找近邻,编号和代号几乎没有语义。
    • 补一句:同理还有人名、产品型号、内部黑话。
  • 时长:4min


P3 · BM25 补位 ​

中心内容:BM25 是词频+逆文档频率的排序,精确匹配极强。

  • 页面内容:同一 query 的 BM25 top5(第一条命中)

  • 讲解技巧

    • 并排展示两路结果,这个视觉反差是本节的记忆点:向量漏的 BM25 命中,BM25 漏的同义表述向量命中。
    • 说明 Elasticsearch 自带 BM25,PGVector 场景可以用全文检索或简易倒排。
  • 时长:5min


P4 · RRF 原理 ​

中心内容:RRF 用排名的倒数求和,不需要归一化分数。

  • 页面内容:公式 score = Σ 1/(k + rank),k=60

  • 讲解技巧

    • 这是本节的核心方法论:强调 RRF 最大的好处是不用调两个通道的权重,因为余弦相似度 0.7 和 BM25 的 12.3 根本不在同一量纲。
    • k=60 是经验值,讲清它的作用:k 越大,排名靠前和靠后的差距越被压缩。
  • 时长:6min


P5 · 权重融合的坑 ​

中心内容:加权求和看起来直观,实际很难调。

  • 页面内容:加权融合 vs RRF 的调参成本对比

  • 讲解技巧

    • 说明为什么不用加权:分数分布不同、量纲不同、换模型就失效。
    • 结论:先用 RRF,效果不够再考虑加权。这句话给学员一个明确的行动顺序。
  • 时长:4min


P6 · 编码:双路召回 + 融合 ​

中心内容:并行执行两路,用 ConcurrentHashMap 收集,超时降级为单路。

  • 页面内容:HybridRetriever 实现;CompletableFuture 编排

  • 讲解技巧

    • 重点讲降级:BM25 服务挂了不能让整个检索失败,向量单路继续服务。
    • 提醒:并行要用独立线程池,别占用 Web 容器的请求线程。
  • 时长:8min


P7 · 效果验证 ​

中心内容:混合检索的收益要用 recall@k 量化。

  • 页面内容:纯向量 / 纯 BM25 / 混合 三组的 recall@5、recall@10 对照

  • 讲解技巧

    • 给一个可预期量级:混合检索通常比纯向量 recall@10 提升 10~20 个百分点。
    • 强调必须自己测,不同语料差异很大。
  • 时长:5min


P8 · 成本与代价 ​

中心内容:多一路检索就多一份延迟和运维成本。

  • 讲解技巧
    • 客观说明代价:需要维护倒排索引、多一次查询、融合逻辑。
    • 给出适用判断:有编号/术语/人名的场景必上;纯叙述性文档收益有限。
  • 时长:4min

P9 · 避坑与小结 ​

中心内容:召回多不等于答得对,还要精排。

  • 讲解技巧
    • 引出下一节:现在召回到 20 条,怎么挑出最好的 3 条?——02-10 Rerank。
  • 时长:2min

讲师备忘 ​

项内容
课前必做准备「E1024」类专有名词 query 与双路结果对照
最容易超时处P6 编码,CompletableFuture 部分容易展开太多——只讲降级与线程池
学员最常问「k=60 怎么来的?」答:原始论文经验值,实测 20~100 差异很小
现场备用BM25 服务不可用 → 用内存倒排的简化实现演示融合逻辑