K3.2 混合检索:两路一起上,各补盲区
最朴素、也最有效的主意
上一节的结论是:关键词擅长精确匹配,语义擅长理解意思,两者各有各的盲区。
那最朴素的主意就是——两个一起用,取长补短。用户查「东西想退掉」,语义那路命中;用户查「X9-2000」,关键词那路命中;用户的问题横跨两者,就靠两路合力。这就是 2026 年生产 RAG 的标配:混合检索。
它做的事很直白:同一个查询,关键词检索跑一遍、语义检索跑一遍,各出一个排名,再把两个排名融合成最终的一个。
融合的拦路虎:两把尺子刻度不同
「把两个排名合起来」听着简单,真做却有个拦路虎。
关键词那路给的是 BM25 分(可能是 12.7、8.3 这种数),语义那路给的是相似度(0 到 1 之间的小数)。这两把尺子刻度完全不同,没法直接相加——就像一个按「分数」算、一个按「百分比」算,硬加起来毫无意义。你也不能简单归一化,因为两路的分数分布形状差很远,归一化后还是会一头重一头轻。
RRF:干脆不看分数,只看名次
RRF(Reciprocal Rank Fusion,倒数排名融合)用一个绝妙的偷懒办法绕开了这道坎:
别看分数了,只看名次。 每条结果在各路排行榜里排第几名,名次越靠前,给的分 越多(第 1 名给最多,往后递减)。把它在两个榜里的「名次分」加起来,重新排序。
为什么这招高明?因为名次是通用货币——不管你原来的分是 BM25 的 12.7 还是相似度的 0.83,「排第 1」就是排第 1。这样两把不同刻度的尺子,就都被翻译成了同一种语言(排名),可以直接相加了。RRF 简单到几行代码就能写完,效果却出奇地好,是工业界的默认选择(公式见深入层)。
上手:看混合怎么兜住单路会漏的那一半
前两个查询你已经见过——语义的主场、关键词的主场。现在看第三个,真正体现混合价值的:
实验:跨话题的查询。 选查询「生鲜的运费和退货政策」,点「三路开跑」。这条查询横跨两个话题:运费 + 退货。看仔细每一路——
- 语义检索被「配送」那一带吸住了:它把运费相关的段落排在前面,却把「退货政策」挤到了边缘,还混进了无关的「配送时效」。它只顾住了一半。
- 关键词检索靠「生鲜」「退货」这些精确词,兜住了退货那一半。
- 只有混合检索同时抓住了运费和退货——两个都命中(✅ 全部命中)。
这就是混合的全部价值:一路会漏的,另一路补上。 单路检索总有它照不到的角落,混合把两路的视野叠起来,漏得最少。