做模型对比实验时,最常见的卡点不是跑不出结果,而是不知道该用哪类检测方法:拿了两个模型同一批样本,输出全是自由文本,分数怎么算都说不上客观。这篇按任务类型把常见对比算法捋一遍,给出选型对照和落地步骤,并说明每种方法什么时候不适用。想核对具体能力数据,去站内模型库和测评榜单看当时的数字。
做模型对比实验时,最常见的卡点不是跑不出结果,而是不知道该用哪类检测方法。拿了两个模型跑同一批样本,输出全是自由文本,分数怎么算都说不上客观,最后只能凭感觉说一句「B 好像更顺」。这篇按任务类型把常见对比算法捋一遍,给出选型对照和落地步骤,每个方法都说明什么时候不适用。
先记住一个前提:算法本身没有优劣,只有配不配你的实验目标。想核对各模型的能力数据,去站内模型库和测评榜单看当时的数字;想要现成的稳定性与延迟基线,可以到 /tools/speed-test 量一遍再开跑。
先分清你要检测的是「谁更强」还是「哪里不一样」
这一步没想清楚,后面全是白干。同一批输出,如果目标是「谁更强」,你要的是统计打分与配对比较;如果目标是「哪里不一样」,你要的是文本距离和结构比对。两个目标用同一套算法,结论会互相打架。
| 你的问题 | 属于哪类 | 典型算法族 | 输出形态 |
|---|---|---|---|
| A 和 B 哪个更好 | 能力排序 | 成对比较、基准题分叉 | 一条排序或分差 |
| A 能不能替掉 B | 差异定位 | 字面距离、字段比对、语义相似度 | 差异清单与位置 |
| 两个版本改动影响了什么 | 差异定位 | 结构比对 + 回归抽样 | 受影响字段/题型 |
| 新模型比旧模型稳不稳 | 排序 + 稳定性 | 配对比较 + 多次采样 | 分差与波动区间 |
- 先写实验假设:一句话说清你要回答什么问题,写不出来就先别跑;
- 判断属于排序还是定位,再往下选算法,别两件事混在一次实验里;
- 如果只是想确认两个模型能不能互换,那属于差异定位,不是排序;
- 样本量很小(比如几十条)时,排序类算法的置信区间会宽到没有参考价值,这时候只做定位、不做排序。
打分与排序类:把主观判断变成可比较的数字
排序类最稳的做法是成对比较:每次只问「这两条输出哪条更好」,再聚合成全局排序。比让人直接打绝对分靠谱得多,因为人对绝对值的尺度会漂,今天 8 分明天可能是 6 分,但「A 比 B 好」这种相对判断重复性高得多。
另一条路是基准题分叉:先跑一套固定题集,看两个模型分别在哪些题目上给出不同结果。分叉点比总分更有信息量——总分差一点可能只是噪声,但某个题型上系统性分叉,通常就是真实的差异。
- 固定题集题集写进版本管理,改题要留记录,否则前后两次实验没法比。
- 固定解码参数温度、采样、最大输出长度全部锁死,参数漂了结果就不算数。
- 同一时间窗跑完两个模型尽量在同一时段跑,避开上游负载波动带来的差异。
- 留原始输出再聚合先存原始文本,再做聚合打分,后面想换判定口径还能重算。
具体榜单的口径、样本量和分数,去 /rankings 和 /benchmarks 看当时的数字,别拿别人文章里的旧数当依据。
差异定位类:文本距离、结构与语义三条路
定位差异比排序更容易出错,因为「看着不一样」和「实际不一样」是两回事。常见三条路,各有各的盲区。
| 方法 | 适合的任务 | 能定位到什么程度 | 主要盲区 |
|---|---|---|---|
| 字面距离(编辑距离、n-gram 重合) | 结构化抽取、代码补全、格式严格的输出 | 能指到具体字符或片段 | 同义改写会被判成大差异 |
| 结构比对(按 schema 逐字段) | JSON/表格类输出 | 能归到具体字段 | 字段语义相近但键名不同时容易漏 |
| 语义相似度(向量/模型判定) | 自由问答、摘要、开放生成 | 只能给整体相似程度 | 措辞相同但事实相反也会被判为一致 |
排查顺序建议固定下来:先看字面差异,再看字段级差异,最后才上语义相似度。前两步能解释的差异不要直接跳到第三步,语义相似度只用来兜底那些字面和结构都对不上、但人眼看确实不同的情况。
- 格式严格的任务优先用字面距离,改动位置能直接落到字符上;
- 有 schema 的输出优先做字段级比对,差异能归因到某个键;
- 自由问答用语义相似度时,务必补一次人工抽样,专挑「措辞像但事实不同」的样本;
- 三类方法可以叠加用,但结论以最严格的那条为准;
- 同一批样本换算法后结论反转,说明差异本来就在边界上,别急着下判断。
让结论站得住的操作细节
算法选对了,实验做脏了照样得不出结论。对比实验的变量越多,越要写清楚控制清单,不然事后没法解释差异来自哪里。
- 控制变量
- 同题目、同提示词、同温度与采样参数、同最大输出长度、同时间窗,缺一项结论就弱一分。
- 裁判复核
- 如果用模型当裁判,先做一次裁判一致性抽样,看它自己回答同一对样本时稳不稳定。
- 留痕
- 题目版本、参数、原始输出全部存档,否则过段时间没人能重跑这次实验。
- 基线
- 上游接口本身波动大时,先量延迟与稳定性基线,再谈模型间的差异。
上面这些不是流程洁癖。一家 5 人小团队做模型替换评估时,最容易翻车的就是没留原始输出,隔两周想复查某条不一致的样本,发现只剩一个总分,什么都查不了。
动手清单:从一次小实验跑到一份结论
- 定目标用一句话写清是排序还是定位差异,写不出来就别开跑。
- 定样本从真实业务流量里抽样,别把网上现成的通用题集当成唯一依据。
- 定算法按上面的对照表选一条主路,再加一条交叉验证路,两条结论不一致就回头查样本。
- 定判定多大差异才算「有差异」,提前写死阈值,别看到结果再回头改标准。
- 归档输出、参数、脚本一起存,附一页结论,并写清这次结论在什么条件下不适用。
如果你更关心的是选哪个模型、哪个中转站价格更划算、可信度怎么样,这些属于另外的问题,去站内对应的资料页核对当时的数字,别用这篇里的方法去替代价格和可信度的判断。
先把对照表和榜单拉齐算法选型的判断标准看完,下一步是拿着真实数字做决策:模型能力和榜单口径到 /rankings 与 /benchmarks 核对,接口稳定性和延迟基线到 /tools/speed-test 量,中转站的可信度与价格追踪分别看 /sites 和 /price-watch,这些页面里的数字才是当次可用的依据。→常见问题
模型对比一定要用模型当裁判吗?
不一定。格式固定、字段明确的任务,用规则比对更便宜也更可解释;只有自由文本、没有唯一答案的任务才需要裁判,而且裁判本身要做一致性复核,否则你测的是裁判的偏好而不是两个模型的差距。
两个模型分数差一点,能说谁更强吗?
要看差距和波动的关系。先在同样条件下重复跑几次,看分数本身抖多少,差距明显小于抖动就别下结论。稳妥做法是把分叉的具体题目挑出来人工看,定位差异比纠结总分更有用。
对比结果和自己体感不一致怎么办?
先查三个地方:题目是不是偏向某一方、解码参数是不是一致、裁判口径是不是只看表面措辞。三项都对过还是不一致,就把体感场景补进题集重跑一次,通常能发现题集没覆盖到你真正在意的能力。