SH

Soloharness

概念 · 辨析 · Agent

← 返回概念辨析

Concept Contrast Fable

交叉编码器和重排序器,一个是测量工具,一个是把测量结果排成队

交叉编码器是一种具体的评分模型架构,把查询和文档拼在一起做联合编码打分。重排序器是一个更宽的功能角色——可以是交叉编码器,也可以是其他算法——它的任务是在初检结果上重新排个更好的顺序。把交叉编码器当成重排序器的同义词,会在架构选型里锁死选项。

寓言

棋盘上有两个裁判,一个打分,一个排座次

城里的棋院每年办一次少年围棋赛,参赛的孩子有六十多人。比赛分两轮:第一轮每个孩子和三位裁判打快棋,裁判粗略记下胜负,筛出前二十名。这时候的排名很粗糙,因为三盘快棋说明不了什么。

第二轮由特邀裁判郑爷爷独自操刀。他把第一轮筛出来的二十个孩子的棋谱,和他们当天的状态、对手强弱、棋路风格一起放在一张大棋盘上对照,逐对比较,排出一份精准的前十名次。郑爷爷的工作是重排序——他站在第一轮输出来的一堆名次上面,重新定一个更好的顺序。

有一年郑爷爷身体不好,棋院急着找替代方案。他们试了三种人:第一种是棋院原来的助教,第二种是隔壁省请来的职业棋手,第三种是一位把历年棋谱背得滚瓜烂熟的老棋待诏。三种人都能完成第二轮的重新排序,但内部用的方法完全不同。助教靠经验直觉,职业棋手靠对局面的精确拆解,老棋待诏会把两份棋谱并排摊开,逐子推算每一步的得失。

这时候棋院的人才开始注意一个关键问题:郑爷爷是「重排序者」这个角色,但你找谁来坐这个位置、用什么方法坐,是另一回事。助教重排、职业棋手重排、老棋待诏重排——结果可能完全不同,但它们都叫重排序。角色和做法不能混成一个名字。

棋院后来正规化了这套流程,在比赛章程里单独列了一节叫「第二轮排序方式」。他们允许不同年份使用不同方法——小规模比赛用助教手动排,大规模比赛请老棋待诏逐谱拆解——只要方法声明清晰、评分依据可解释。逐谱拆解只是坐上重排序位置的一种方法,不是这个位置的全部身份。

有人问棋院:为什么不直接把第一轮就交给老棋待诏,省掉两轮?棋院负责人说,代价不一样。第一轮有六十个孩子,要把每两个人的棋谱都摊开对照,六十乘五十九再除以二,将近一千八百次评判,太贵了。第一轮用快棋筛一轮,第二轮只对二十个做精确对比,省了九成工夫。

棋院最后把规矩写清楚:先用便宜办法缩小候选名单,再请细致的人做精排。重排序是「在已经缩小范围的一堆名次上重新排好顺序」这个动作;至于用助教、职业棋手还是老棋待诏,是实现这个动作的不同工具。动作和工具不能划等号。

交叉编码器

一种具体的深度学习模型架构,将查询和文档拼接后输入同一个编码器,输出一个相关性分数。计算代价高但评分精度好,常用于小规模候选集的精排。

重排序器

检索系统中的功能角色,接收初检结果后重新按更精细的标准排序。可以用交叉编码器实现,也可以用基于规则、统计或其他模型的方法实现。

故事对应

  • 第一轮快棋:初检阶段,用轻量级方法快速召回候选集
  • 郑爷爷:重排序器这个功能角色
  • 助教、职业棋手、评分模型:三种不同的重排序实现方式
  • 评分模型把棋谱拼在一起打分:交叉编码器的联合编码方式
  • 交叉编码器做大面积对比太贵:解释了为什么需要两阶段检索管道
  • 棋院章程里单独列出排序方式:架构上将角色和实现分开声明
  • 六十个孩子全对比要近一千八百次:交叉编码器的计算复杂度

落到 RAG 检索架构选型

设计 RAG 系统的检索链路时,先画两层的角色图:上一层写「重排序器」,标注其在候选集范围内做精细排序的职责;下一层写具体实现方案——交叉编码器、基于BM25的重排、混合策略或其他。方案可以迭代替换,角色不变。如果采购或自研一个重排序模块,问清楚它绑定的底层模型是什么、候选集规模上限多少、延迟预算多少。不要把「我要一个重排序器」和「我要一个交叉编码器」当成同一句话——前者是需求,后者是一种实现路径,两者在不同的决策表上。