考察点
这道题出自 Google 大模型应用岗的技术面试,DSPrep 标注 Google/Amazon/OpenAI 三家常考。面试官想确认你理解检索不是「一次向量相似度就完事」,而是搜索系统经典的两阶段架构:召回保覆盖、精排保精度。考察重点是 bi-encoder 和 cross-encoder 的原理差异(为什么后者更准)、rerank 插在流水线哪个位置、以及延迟预算内怎么选模型和候选量。追问会往 ColBERT 这类 late interaction、rerank 对端到端指标的贡献怎么量化走。
参考答案
为什么向量检索本身排不准
向量检索用的是 bi-encoder 架构:query 和文档各自独立编码成一个向量,靠余弦相似度打分。它的优势是文档向量可以离线预计算,线上百万级语料也能毫秒级出 top-k——但代价是 query 和文档从未真正「见面」,所有交互被压缩成两个固定维度向量的一个点积。细微的相关性判断(「苹果发布会的日期」vs「苹果种植的季节」)在这个压缩里就丢了。
Cross-encoder 走另一条路:把 query 和文档拼在一起送进模型,让 Transformer 的注意力在两者之间充分交互,输出一个相关性分数。精度明显高于 bi-encoder,但每对(query, doc)都要过一次完整前向,无法预计算——对百万文档逐个打分在延迟上完全不可行。
两阶段架构就是把两者的长处拼起来:bi-encoder 快速召回 top 50-100(粗排,保 recall),cross-encoder 只对这几十条精排(rerank,保 precision),最终取 top 3-5 进 LLM 的 prompt。这和搜索引擎、推荐系统几十年的「召回-排序」范式是同一个思想。
工程实现要点
模型选型。 开箱即用的有 bge-reranker 系列(开源、中英双语好)、Cohere Rerank API、Jina Reranker。选型看三件事:语言覆盖(中文语料别用纯英文训练的)、领域匹配(通用 reranker 在法律、医疗语料上可能不如微调的)、部署形态(API 省心但有网络延迟和数据合规问题,自托管 bge-reranker-base 在 CPU 上也能跑到可接受的延迟)。
召回量与截断的权衡。 这是 rerank 调参的核心:候选给太少(top 10),粗排的 miss 没有翻身机会,rerank 白做;给太多(top 200),cross-encoder 逐对打分的延迟压不住。经验区间是召回 50-100、精排后取 top 3-5。延迟敏感场景可以用小一号 reranker 或者只精排 top 20,用精度换速度。
和混合搜索的位置关系。 完整链路是:BM25 + 向量双路召回 → RRF 融合 → rerank 精排 → 进 prompt。rerank 放在融合之后,因为它需要拿到统一的候选集逐对打分;别把 rerank 用在单路结果上再融合,顺序反了融合就没意义。
分数阈值过滤。 reranker 的输出分数除了排序还能当「相关性闸门」:top 结果分数都低于阈值时,说明库里大概率没有相关内容,这时候应该让 LLM 走「我不知道」的兜底话术,而不是硬塞一堆不相关文档让它编。这一步对抑制幻觉的贡献经常被低估。
收益怎么量化
面试加分项是说清楚怎么验证 rerank 有效。固定 LLM 和 prompt,只开关 rerank 模块,对比两组指标:检索侧看 NDCG 或 top-k hit rate 的提升;端到端看答案正确率(人工评或 LLM 裁判)和幻觉率。典型收益是答案正确率提升 5-15 个点,在「召回里有正确文档但排名靠后」的场景提升最明显——如果粗排本身召回就烂(正确文档根本不在 top 100 里),rerank 救不了,那是 embedding 和 chunking 的问题,别用错药。
还有一个成本视角:rerank 让同样质量的答案可以用更少的文档进 prompt(top 5 砍到 top 3),省下的 LLM 输入 token 费用经常能覆盖 rerank 的计算成本,还附带降低延迟——这是向上管理时要算的账。
可能的追问
1. Cross-encoder 和 ColBERT 这类 late interaction 模型什么区别?
ColBERT 保留 token 级向量,query 和文档的交互发生在细粒度的 MaxSim 上,精度接近 cross-encoder 但文档侧可预计算索引,能直接对全库检索。它是「不用两阶段」的折中方案,代价是索引体积大、工程复杂度高。
2. reranker 需要微调吗?
通用 reranker 在垂直领域(法律条文、医疗报告)上往往不够准。有标注数据的话,用(query, 正例, 负例)三元组微调收益明显;没数据可以先蒸馏——用大模型给 query-文档对打伪标签。
3. LLM 直接当 reranker 可行吗?
可行(listwise 排序,把候选列表丢给 LLM 让它排),精度可以很高,但延迟和成本比专用 reranker 高一两个量级,只适合离线建库或极低 QPS 场景。生产在线排序还是 cross-encoder 的天下。