RAG 检索算法 Hybrid search(混合检索)

Hybrid Search(混合检索) 是将关键词检索(如 BM25)与向量语义检索进行结合的召回策略。

工具:elasticsearch、Milvus

关键词检索和向量检索的优缺点

  • 关键词检索(稀疏检索):基于词频 / 逆文档频率(如 BM25、TF-IDF),擅长精确匹配(实体、代码、术语、缩写),但对同义改写、语义泛化不敏感
  • 向量检索稠密检索):将文本转为向量,通过相似度(余弦 / 内积)匹配,擅长语义理解(同义、近义、概念关联),但对精确关键词、专业术语可能 “跑偏”
  • 混合检索:并行执行两种检索,再通过融合 / 重排得到综合结果,兼顾 “字面对齐” 与 “语义对齐”,尤其适合专业文档、代码库、知识库等场景。

工作流程

  1. 查询分发:用户 Query 同时送入关键词引擎库(如 Elasticsearch)与向量库(如 Milvus/FAISS)
  2. 并行召回
    • 稀疏:BM25 召回 Top-K 关键词匹配片段
    • 稠密:向量相似度召回 Top-K 语义相似片段
  3. 结果融合:归一化分数 / 按排名融合(如 RRF),去重、重排得到最终 Top-K
  4. 送入 LLM:用融合后的上下文生成答案,减少幻觉、提升忠实度

Hybrid Search(混合检索) 

  • 优势
    • 提升召回率:覆盖精确匹配 + 语义泛化
    • 抗噪声:减少单一检索的偏差(如向量检索 “跑偏”、关键词检索 “死板”)
    • 适配专业场景:代码、术语、实体、缩写、法律 / 医疗文档效果显著
  • 适用
    • 知识库问答、技术文档检索、代码检索、多源异构数据检索
    • 对 “精确命中” 与 “语义理解” 都有要求的业务

融合策略

1. 加权分数融合(Weighted Sum)

  • 公式:Score = α·S_sparse + (1−α)·S_dense
  • α 控制关键词 / 语义权重(如技术文档 α 偏大,对话场景偏小)
  • 需先归一化分数到同一区间(如 0–1),再加权求和排序

2. reciprocal Rank Fusion(RRF,无监督融合)

  • 不依赖分数,只看排名:RRF(d) = Σ 1/(k + rank_i(d))(k 常取 60)
  • 优点:规避分数归一化难题,鲁棒性强,工业界常用

工业中常用 RRF进行排名混合

模拟 RAG 中的「BM25 关键词检索」和「向量语义检索」两个结果,演示 RRF 如何融合。

步骤 1:准备两个检索器的返回结果

假设用户查询「Python 如何实现混合检索」,两个检索器各返回 Top 4 文档(用 D1、D2、D3、D4、D5 代表不同文档片段),括号内是本地排名(从 0 开始):
  • 检索器 A(BM25)结果:[D1 (0), D3 (1), D5 (2), D2 (3)] (D1 排名最前,相关性最高)
  • 检索器 B(向量)结果:[D2 (0), D1 (1), D4 (2), D3 (3)] (D2 排名最前,相关性最高)
平滑系数 k=60(固定不变)。

步骤 2:逐个文档计算 RRF 总得分

我们遍历所有出现过的文档(D1、D2、D3、D4、D5),分别计算得分:
  1. D1:在 A 中排名 0,在 B 中排名 1
    得分 = 1/(60+0) + 1/(60+1) = 1/60 + 1/61 ≈ 0.01667 + 0.01639 ≈ 0.03306
  2. D2:在 A 中排名 3,在 B 中排名 0
    得分 = 1/(60+3) + 1/(60+0) = 1/63 + 1/60 ≈ 0.01587 + 0.01667 ≈ 0.03254
  3. D3:在 A 中排名 1,在 B 中排名 3
    得分 = 1/(60+1) + 1/(60+3) = 1/61 + 1/63 ≈ 0.01639 + 0.01587 ≈ 0.03226
posted @ 2026-02-04 10:45  wangssd  阅读(683)  评论(0)    收藏  举报