DOCAI · 概念 · L3
混合检索:向量加关键词
把向量检索与关键词检索的候选合并,用两套互补的信号提升召回。
它是什么
混合检索(hybrid search)是把向量检索和关键词检索的结果合并,用两套互补的信号找候选。稠密向量擅长语义:意思相近但用词不同也能匹配;关键词检索(典型是 BM25)擅长精确字符串:专名、编号、版本号、错误码,一字不差才对。
怎么工作
两路并行召回。向量路把查询和文档编码成向量,按相似度取 top-k;关键词路按词项匹配打分,也取 top-k。两路各给出一个候选列表。
融合最常用的是倒数排名融合(RRF)。它不看原始分数,只看每路里的名次,按名次给分再相加。这样做的原因是向量相似度和 BM25 分数量纲不同,直接相加会偏向其中一路;按名次融合省去了归一化,也足够稳。
权重可以按查询类型调:查询里有错误码、版本号、人名、缩写时,提高关键词路的权重;查询是口语化描述时,提高向量路的权重。调权重不要凭感觉,拿真实查询和标注答案做对比。
什么时候单路就够:语料小、术语统一、查询以自然语言为主,向量单路往往够用;日志、代码、错误码库这种以精确字符串为主的场景,关键词单路反而更稳。混合检索是为两类查询都存在的场景准备的。
延迟代价是真实的:两路可以并行,但关键词索引要维护分词和倒排,融合与去重也要算力。链路要设超时和降级,一路超时就退回另一路,不要整体失败。
常见误解
- 混合就是把两路分数相加:分数量纲不同,直接相加会偏向某一路,按名次融合更稳。
- 向量检索能替代关键词:编号、错误码、专名恰恰是向量的弱项。
- 两路都开一定更好:收益取决于查询分布,索引维护成本也真实存在。
- 融合完就不用重排:融合解决召回,精排是另一件事,两者不冲突。
和重排的区别
混合检索解决「候选从哪里来」,重排解决「候选怎么排序」。前者在召回层做加法,后者在排序层做判断。两者可以叠用,但每加一层都要用数据证明它值得那份延迟。
延伸阅读
- 向量怎么表示:什么是 embedding
- 检索的整体流程:什么是 RAG
- 向量存哪里:什么是向量数据库
- 动手搭一条链路:最小可用 RAG
什么时候用得上
当查询里既有口语化描述,又有错误码、版本号、人名这类精确字符串,单路检索总有一类不灵时,考虑混合检索。
常见误解
很多人以为混合检索就是把两路分数直接相加。向量相似度和 BM25 分数量纲不同,直接相加会偏向其中一路;按名次融合(RRF)才是更稳妥的起点。