先这样答
Reranker 放在召回之后、生成之前,属于精排阶段。它不负责生成答案,而是从召回得到的候选中,筛出更适合进入上下文的内容。
具体流程是多路召回各取 Top-N。这里的 N 通常是几十到几百。系统合并各路结果并去重,再交给 Reranker 排序。Reranker 最后输出 Top-K。K 通常是几个到十几个,只有这些结果会进入上下文。
N 和 K 要分开考虑。Reranker 使用交叉编码器,延迟比较敏感。N 越大,候选覆盖通常越好,但排序速度会变慢。线上常见的 N 会取几十档。K 主要由上下文预算决定。K 太大,后面的噪声会进入上下文并稀释注意力。实际选择时,要在召回覆盖、排序延迟和上下文预算之间取平衡。
面试官会怎么追问
-
「为什么不直接把多路召回结果交给大模型?」 召回结果里会混入相关性较弱的内容。Reranker 先对候选做精排,再只把 Top-K 送进上下文。这样可以减少后面的噪声对注意力的稀释。
-
「Top-N 和 Top-K 分别应该怎么定?」 Top-N 决定交给 Reranker 的候选范围。N 可以从几十到几百,通常要结合排序延迟来选。Top-K 决定进入上下文的内容数量,主要受上下文预算约束。
-
「N 取大一些是不是一定更好?」 N 越大,候选覆盖可能越好。Reranker 需要处理的候选也越多,延迟会更高。线上通常会在几十档选择,而不是无限扩大 N。
回答的坑
- 把 Reranker 放在生成之后,混淆了精排和生成的职责。
- 只说 N 越大越准,却不说明交叉编码器带来的延迟代价。
同系列的题
—— 本题完 ——