记录一下那天晚上的排查过程。把 BM25 和向量检索的结果简单合并,问答准确率提升不明显,某些专有名词查询反而变差。

刚开始盯着「专有名词场景关键词更准,通用语义向量更准」,折腾了半个多小时,排掉了。

原因不止一个,得分开看。两路分数尺度不同,简单相加被一方主导。也可能是合并时没有去重,同一文档占据多个位置。

少数情况下是权重写死,没有按查询类型调整。

第一件事是分别归一化再按权重融合

score = 0.5 * norm(bm25) + 0.5 * norm(vec)

再往下用 RRF 融合避免尺度问题

final = sum(1 / (60 + r) for r in ranks)

接着对含编号与专有名词的查询提高关键词权重

w = 0.7 if has_code(query) else 0.4

末了在标注集上评估两路贡献

python eval_hybrid.py --weights 0.3,0.5,0.7

改完先别撤,确认这几项。混合检索在测试集上优于单路,专有名词查询也能稳定命中,整体延迟增加有限。

补一句。权重不必对称,具体业务里关键词往往负责精确匹配,向量负责语义召回,先看查询分布再定比例。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189