稠密检索的短板
纯向量(稠密)检索靠语义,但有几个天然弱项:
- 稀有词 / 专有名词:如产品型号、错误码、人名,训练时少见,语义空间里表达弱。
- 精确匹配:用户要"包含 exactly 这个字符串",稠密检索给的是"意思近",答非所问。
- 词面对齐:query 与文档字面高度重叠但语义不同(或反之)时容易误判。
稀疏检索(BM25)的优势
传统 BM25 基于词频/逆文档频率,对关键词、专名、精确串极其敏感且确定。它正好补上稠密的短板:
- 字面命中即高分,不会"语义对但词不对"。
- 对 ID、代号、术语零误判。
- 可解释、无需训练、开销低。
互补关系:稠密管"意思像",稀疏管"词面对"。两者合起来才稳。
两路召回 + 融合
混合检索(Hybrid Search)标准做法:
- 同一 query 同时跑稠密路(向量召回 top-k_a)和稀疏路(BM25 召回 top-k_b)。
- 把两路结果归并、去重,用融合算法重新排序,得最终 top-k。
图 1:两路并行召回,融合后输出最终 TopK。
RRF:最省心的融合算法
RRF(Reciprocal Rank Fusion,倒数排名融合)不需要把两路分数归一化到同一量纲,只看"排名":
score(x) = Σ_{r in 各路} 1 / (k + rank_r(x)) ,k 常取 60
某个文档在两路里排名越靠前(rank 越小),融合分越高。优点:
- 免归一化:稠密分(0~1)和 BM25 分(0~20)量纲不同也能直接融。
- 鲁棒:个别路分数异常不影响整体。
- 简单、无超参(除 k)。
另有加权求和:先把各路分数 min-max / z-score 归一化,再 w_d·s_d + w_s·s_s。需调权重,但对"某路更重要"的场景更可控。还有学习排序(Cross-Encoder / LambdaMART)做最终精排,精度最高但成本高。
稀疏表示不止 BM25
- BM25:统计式,确定、快、对关键词强。
- SPLADE:用模型把文档/查询变成"带权重的词表向量"(仍是稀疏),兼顾语义与可解释。
- BM25+(上下文稀疏):模型生成的稀疏向量,比纯 BM25 更懂语义。
混合检索的"稀疏路"可以是 BM25,也可以是这些模型稀疏向量,后两者效果更好。
何时该上混合检索
- 知识库含专名、型号、错误码、法律条款编号等——必用。
- 用户常做精确短语搜索——必用。
- 纯开放域闲聊/通用问答——稠密单路通常够。
经验法则:企业知识库 / RAG 生产环境,默认上"稠密 + BM25(RRF 融合)"。它几乎总是比纯向量稳一截,成本却只多一路关键词检索。