五厂面经真题集月之暗面面经高频月之暗面真题历史对话检索向量检索速答 · 约 5 分钟更新 2026-09-29

历史对话检索为什么用 cosine 而不用 BM25?

一句话结论

历史对话检索用 cosine,是因为它能按语义方向召回换了说法的相关内容;BM25依赖关键词,口语化表达容易漏召回。精确词仍要靠混合检索。

先这样答

历史对话检索用 cosine,因为它能按语义方向匹配内容,不要求用户重复历史对话里的原词。比如用户说「那个方案」,系统仍可能召回三轮前讨论「技术路线」的内容。两句话说法不同,表达的意思可以接近。

BM25主要做关键词匹配。用户换成口语化说法后,当前查询和历史内容里的关键词可能对不上,召回就会变差。面试里可以把两者的差别说清楚:cosine关注语义是否接近,BM25关注词项是否匹配。回答到这里,要落回历史对话里的实际需求,不要只背两个检索方法的定义。

这个结论来自月之暗面一面原题,但不能把它答成「向量检索总比 BM25 好」。如果用户要找精确的型号、人名或代码,向量检索的效果可能弱。生产环境应使用混合检索,同时利用语义匹配和关键词匹配。这样既能处理「那个方案」这类换说法的查询,也能照顾必须精确命中的词。

面试官会怎么追问

  • 「cosine 为什么能找到‘那个方案’对应的技术路线?」 cosine比较向量的语义方向,而不是要求查询和历史文本出现相同关键词。用户说「那个方案」时,查询可能仍与三轮前「技术路线」的讨论在语义方向上接近。因此系统有机会召回那段历史。

  • 「那 BM25 在这个场景里为什么不够?」 BM25依赖关键词匹配。用户用口语化表达替换了历史对话里的说法,查询词和历史文本中的词可能对不上。关键词匹配变差,就容易漏掉相关内容。

  • 「向量检索是不是可以完全替代 BM25?」 不能这样回答。型号、人名、代码等精确词,向量检索可能处理得较弱。生产环境应采用混合检索,同时保留语义匹配和关键词匹配。

回答的坑

  • 把 cosine 说成能理解所有指代,或说它在任何历史对话检索中都优于 BM25。
  • 只讲语义召回的优势,却不提型号、人名、代码这类精确词需要混合检索。
—— 本题完 ——