本讲目录

第 10 讲 · 模型地图与选型:先审计评测,再谈高分

模型名、版本、价格和服务接口会变;本讲把重点放在不随榜单更新而失效的选型方法:定义目标任务,保存可追溯的题目来源,隔离开发与测试,并把每个分数写成一份评测账本。公开基准、盲评和私人题集都可以提供线索,但没有哪一种天然免疫污染、选择偏差或分布错配。

学习层:高分是否可信,先问“它从哪里来?”

具体谜题:一个 92 分的 benchmark,能直接代表你的工作能力吗?

假设有一套固定公开题库。某些题面或答案直接出现在训练资料里;另一些题没有逐字出现,却只是同一模板换了名字;团队还可能反复查看测试分来调 prompt、解码参数或模型配置。与此同时,公开题库偏重推理,而你的私人任务偏重代码和写作。请先判断:这四种情况会不会都把公开分推高?它们是否都叫“数据污染”?若你只能保留一份分数,应该保留 observed benchmark、剔除风险题后的 clean subset,还是一次冻结后才打开的私有 holdout?

先做预测,再打开账本

先写下你的预测:① 直接污染最像“题目被看过”,应在题级 provenance 中单独标记;② 近重复即使不是同一字符串,也可能把熟悉模板的收益带进测试,不能只靠精确去重;③ 固定测试集被反复用于挑选 prompt 时,问题不必进入训练集,也会形成针对测试集的自适应过拟合;④ 只增加候选模型/提示并报告最好分,winner 的噪声偏差通常会变大;⑤ 即使完全无污染,公开题权重和私人任务权重不同,排名也可能反转。

最小模型:四个分数、三个来源标签

对题目 \(i\),把真实能力记为 \(q_i\),固定题目噪声记为 \(\varepsilon_i\)。干净分数是 \(p_i^{clean}=\mathrm{clip}(q_i+\varepsilon_i,0,1)\)。若题目被直接看过或存在可辨认的近重复,就在观察账本中加入增益:

\[ p_i^{obs}=\mathrm{clip}\bigl(p_i^{clean}+g_{direct}d_i+g_{near}n_i,0,1\bigr). \]

\(d_i\) 和 \(n_i\) 是 provenance 标记,不是“模型能力”的一部分。Observed benchmark 对全题求平均;clean subset 只在排除已标记风险题后平均;oracle baseline 是在这个玩具世界里没有泄漏增益的参考值。三者不能混写成一个“真实分数”。尤其要注意:若被剔除的风险题集中在某些 family 或难度,clean subset 同时改变了题目组成;它与全题 oracle 的差不能直接解释成“污染量”,还要报告覆盖率、分项结果,必要时按目标分布重加权。

第二块实验把候选 \(j=1,\ldots,K\) 的公开分写成 \(S_j=q_j+\bar\varepsilon_j\),选择 \(\hat j=\arg\max_j S_j\)。报告的 winner 分会包含“最大噪声”的成分;候选数 \(K\)、测试题数 \(m\) 和独立重复的分布一起决定这份乐观差,而不是一次跑出的漂亮数字。

动手验证:一次只改变一个旋钮

  1. 在固定题库中先把直接污染率设为 0,再逐步增加;观察 observed benchmark、clean subset 和逐题 hash 标记。再单独调近重复泄漏增益,确认近重复题即使没有 direct 标记也会改变 observed 分。
  2. 读题级账本:family/topic 描述题目覆盖,trueAbility 是玩具潜变量,deterministicHash/noise 让选择和结果可复现。把 provenance 看成数据字段,而不是事后解释。
  3. 在第二块只增加候选数,或只减少公开测试题数;比较当前一次的 winner 与 64 次固定重复的 P10、中位数、均值、P90 和“潜在分”。若 winner 分高于潜在分,不要立刻把它称为能力提升。
  4. 点击“冻结并只开一次私有 holdout”前先写下公开 winner;点击后观察 holdout 与公开选择参数一起锁定,并注意它不能被用来继续调参。本页会话内的重置不会重新隐藏 holdout;刷新页面只能重放这个教学玩具,不是生产评测的访问控制。
  5. 在第三块切换私人任务配比。公开题权重不变,若私人权重偏向代码或写作,重新计算的总分可能反转;这一次没有污染,变的是 estimand——你究竟要估计谁的任务表现。

实验的数值是确定性重放:同一个滑杆状态会得到同一张账本。重复实验的直方图是 64 次预先规定种子的离散分布,不是从一次随机跑推导出的定理。

误区边界:不要把相邻问题压成“污染”二字

  • 直接污染:测试题、答案或高度可识别的评测材料进入训练/提示/开发资料;应追踪时间、来源和版本。它是 provenance 问题,不能只看分数反推。
  • 近重复泄漏:题目换表述、数字或上下文,但保留同一模板、解法或答案结构;精确字符串去重不够,还需要语义/模板去重与人工抽查。近重复不是“必然污染”的同义词,而是需要审查的相似性证据。
  • 自适应过拟合:团队反复看同一个测试集,针对分数改 prompt、工具链、解码或训练设置。测试题没有进入训练资料,也可能被“调熟”;因此开发集、验证集、测试集和私有 holdout 要有清晰边界,并记录每次查看与改动。
  • 分布错配:公开题测的是一个加权分布,目标工作测的是另一个加权分布。它不是污染,也不一定能靠多做公开题修复;应报告分项分数、目标权重和排名稳定性。
  • 删题后的选择偏差:clean subset 只有在风险标记与题目能力、family、难度近似独立时,才容易与原题集总体比较。现实里应同时给出保留率、被删题构成、分层结果与重加权口径,不能把“删后变低/变高”自动归因于污染。
  • 竞技场式盲评能减少直接针对固定题面的机会,但它不自动证明“无法污染”:评测协议、参与者、样本选择、重复观察和训练资料仍要问。十道私人题也不天然可靠;题数少、相关性高、覆盖窄或被反复看过都会让不确定性很大。
  • 本实验把真实能力概率写成已知潜变量,现实中它不可直接观测;固定 hash/noise 只保证可复现与可审计,不替代真实题目去重、独立标注、置信区间、时间切分或安全审查。

回到方法:把一张榜单改造成评测协议

选型前先写 evaluation contract:目标任务与失败代价、候选集合、数据版本、题目来源与许可、去重规则、时间切分、标签协议、开发/测试边界、随机种子、停止规则、统计摘要和发布门槛。对带工具的任务,候选不是一个模型名,而是冻结的 model + prompt + harness + tools + policy + verifier + environment;预算、上下文长度、推理强度和重复次数也必须进入配置。每一行结果至少能回答“哪一版题、哪一种完整配置、谁在什么时候运行、是否看过反馈、哪些题被排除、分项与总体如何计算”。公开 benchmark 可用来发现候选与回归变化;私人任务集用来判断适配;冻结 holdout 用来做一次性确认。三者的证据角色不同。

重复运行时报告均值、分布或置信区间,并说明重复单位、是否共享题目、是否共享随机种子和是否存在自适应选择。持续更新题库时保留旧版本与时间切分,让“分数上涨”能区分能力变化、题库老化、协议变化和污染暴露。

迁移问题:把账本带到你的真实任务

你要比较的是代码修复、研究问答、中文改写,还是一个带工具的端到端流程?为每类任务各写几道代表题,标出来源、时间、近重复家族、失败代价和允许的开发反馈。若一个候选在公开题上领先,但在私人目标分布上落后,你会选择重加权、补题、换模型,还是承认公开 benchmark 不是当前 estimand?如果只有十道私人题,怎样用时间切分、重复标注、置信区间或后续盲题来表达“我还不知道”?

交互实验:benchmark-contamination

无 JavaScript 时的静态读法:固定题库含 16 题,按推理、代码、知识、写作四个 family 各 4 题;每题公开 family/topic、真实能力概率、8 位 deterministic hash、固定 noise 和 near-duplicate 元数据。默认直接污染率为 25%,近重复泄漏增益为 +12 个百分点,直接命中题的玩具增益为 +22 个百分点。观察分数把增益加到 clean 概率;clean subset 则剔除 direct 或 near 风险题。滑杆改变的是固定账本中的标记或增益,不会重新抽题。

第二块默认有 12 个候选、10 道公开测试题和 64 次预先定种子的重复回放;当前一次 winner 分、winner 潜在分、乐观差,以及回放的 P10/中位数/均值/P90 都应一起读。私有 holdout 固定为 24 题,只有点击一次后才显示,并在本页会话内保持锁定;它是协议对照,不是让你继续挑分的第二个开发集。

第三块默认把公开题权重设为推理 40%、代码 30%、知识 20%、写作 10%;私人任务配比可切到均匀、写作重或工程重。若排名反转,原因是目标分布不同,而不是某个隐藏的污染率。

1. 地图:用任务维度代替易过时的型号排名

模型目录会随版本、地区、套餐和部署形态变化。本页不把具体型号排成固定名次;更稳健的地图是先问任务需要什么能力,再在当前可用的候选中做小规模、可复现的比较:

任务维度 先检查什么 需要留下的证据
多步推理 分步约束、反例、计算与拒答是否稳定 固定题集、最终答案与中间验证
代码与工具 测试通过率、补丁可读性、工具权限与失败恢复 仓库版本、测试日志、人工审查
长文档 召回位置、引用准确性、上下文中段是否被忽略 带定位标记的文档题与来源
多模态 输入格式、分辨率、表格/图像理解边界 原始样本、预处理、错误分类
写作与改写 受众、风格、事实保真和编辑成本 盲评 rubric、修改轮次与反例
成本与部署 延迟、吞吐、价格、隐私和合规约束 当前版本、配置、计费与数据政策

同一模型在不同维度上可以同时强和弱;“综合榜第一”不能替代任务契约。推理/即答、托管/本地、旗舰/轻量等标签只是候选空间的组织方式,最终仍要在目标任务上验证。

1.1 2026-08-20 快照:怎样读 Qwen3.8-27B 的“开放、本地与 Agent”

Qwen 团队在 2026-08-14 发布了开放权重的 Qwen3.8-27B。官方模型卡把它描述为 27B 稠密、原生视觉语言模型,原生上下文 262,144 token,可调 reasoning_effort,并给出 Transformers、SGLang、vLLM 等部署入口;模型卡许可为 Apache-2.0。这里最重要的不是给新型号排一个永久名次,而是练习把四个问题拆开:

问题 可以从一手资料读到什么 仍需自己验证什么
是否开放 权重、配置、模型卡和许可公开 依赖、量化产物与下游组件是否采用兼容许可
是否可本地运行 官方列出本地/自托管运行时与量化入口 目标机器、精度、上下文、并发和视觉输入下能否装入并稳定运行
是否适合 Agent 模型卡报告工具、编码和长程任务,并注明若干编码基准使用的 harness 你的工具 schema、权限、验证器、任务分布和总成本
是否“更强” 官方给出带协议脚注的自报分项结果 独立复现、私人 holdout、错误类型与重复运行的不确定性

“27B 很紧凑”是相对于旗舰模型的工程描述,不等于“单张 16 GB GPU 无条件轻松”。仅权重的理想下界就约为

\[ 27\times 10^9\times 2\ \text{bytes}\approx54\ \text{GB}\quad(\text{BF16}), \]

理想 4-bit 原始权重约 13.5 GB,但量化元数据、运行时工作区、激活、视觉编码器和随上下文增长的 KV 状态还要占空间。于是 16 GB 机器可能需要更激进量化、CPU/RAM offload、缩短上下文或改用更小的 Qwen3.5-9B;真正结论只能来自目标运行时的峰值显存、首 token 延迟、生成吞吐和任务成功率实测。开放权重、本地可启动、全 GPU 驻留和适合生产是四个不同命题。

这个案例还揭示 harness 混杂:官方表格的多个软件工程分数明确绑定 Claude Code harness、上下文、采样参数、超时或重复口径。它们可以作为候选证据,却不能把整套系统分数全部归因于模型参数。课程保留这一日期快照,并在后续更新时新增记录,不静默改写旧协议。

一手入口:Qwen3.8 官方仓库;Qwen3.8-27B 官方模型卡。

2. 选型的六个维度

  1. 能力匹配:先写任务的瓶颈和失败代价,再选候选,不要从模型名倒推用途;
  2. 上下文与信息位置:确认窗口、检索和中段召回,不把标称长度当作“全部读懂”;
  3. 多模态与工具边界:明确它能读什么、能调用什么,以及哪些动作必须人工确认;
  4. 成本与速度:记录输入/输出、推理预算、并发、首 token 延迟和批处理吞吐;
  5. 部署与数据治理:检查数据是否能出内网/出境、保存多久、谁可访问和如何删除;
  6. 证据质量:公开分数、盲评、私人题集和 holdout 的证据角色分开写,给出不确定性和时间边界。

3. 公开基准应该怎样读

公开基准有用,但更适合当作候选筛选和回归报警器,而不是最终签字:

竞技场式盲评、公开基准和私人任务题集可以互补。盲评降低固定题面被直接针对的机会,但不等于无法污染;私人题集贴近工作,但十题并不天然可靠。真正的提升来自协议、来源、隔离与复核,而不是某一种榜单的光环。

4. 一个可执行的选型流程

  1. 从真实工作中抽取覆盖不同 family/topic 的任务,冻结一份尚未用于调参的测试版本;
  2. 另建开发集,允许快速迭代,但记录每次改 prompt、工具、模型、解码参数和查看结果的时间;
  3. 运行 2–4 个候选,先看分项、错误类型、成本和人工修订量;若要扩展候选,预先写选择规则,避免只报最好的一次;
  4. 对近重复做模板/语义审查,对直接来源做 provenance 检查,对时间敏感知识做时间切分;
  5. 选定后只打开一次冻结私有 holdout,确认是否与公开结论一致;不一致就回到账本,而不是挑一个更好看的分数;
  6. 上线前按版本、数据、配置、种子、评测脚本和人工签字归档,后续持续更新并保留历史协议。

本讲小结

动手:从最近的真实工作里挑至少 10 个任务,按 family/topic、时间、来源和失败代价建表;明确哪些可用于开发、哪些只在最终确认时打开。每次改 prompt 或模型都写入评测账本,而不是只保存最高分截图。


下一讲:把候选选好后,怎么安装工具、固定环境并跑通第一个 API 与本地模型。