天花板不是模型
三条笔记拿到了 8 分。其余一百零七条散落在下面,大多集中在 5、6、7 一带。 零个 9。零个 10。量表是按 1 到 10 分设计的,但直方图顶到 8 就停下来了, 不管我把打分流程重跑多少次都是一样。
我做的第一件事是怀疑打分模型不够称职。当时跑分用的是 Haiku,是这一族里 最小的那一个,小模型在某些维度上确实显得吝啬,并不总是反映材料本身真的 是什么样子。于是我换上了更大的 Sonnet,重打了一遍同样的一百一十条笔记。 分布的形状确实变好看了——Haiku 那种紧贴 7、8 的双峰被摊开成了一条像样 的钟形曲线。但是上限纹丝未动。三个 8。一个 9 都没有。一个 10 都没有。
那一刻我才回头去把自己写的评分细则念了一遍。
评分细则其实写了什么
9 到 10:这条洞见跨代码库可复用、在官方文档之外仍然非显然、并且能在 一年之后依然有用。
把这句话念出声来,听听它在向打分者要求什么。它是在要求打分者出具一张 证书,保证某条洞见在一年之后依然成立。仅凭一段对话、一条笔记、没有任何 未来的信息。跨代码库可复用。在打分者并未通读完的官方文档之外仍然 非显然。三件事合取在一起,每一件单独我自己都不敢拍胸脯,三件一起就 更不敢。
模型当然不肯。换我也不肯。如果一个朋友递给我一篇文字说打个 1 到 10 分,10 分代表它一年后依然值得读——我也只会停在 7 或 8,不愿意往上走。 不是因为这篇文字差。而是因为关于持久性的那张证书,不是我现在这个 位置能签发的证书。
打分模型是诚实的。问题出在题目上。
评分细则在量的不是我以为的那个东西
我设计这套评分细则的时候,以为它在度量质量。它实际度量的是打分者 愿意把名字签在多大的质量论断上。这是两件事。它们相关,但并不等同; 它们不等同的部分恰好出现在量表的高端——那里的论断需要打分者拥有本来 就没人拥有的把握。
让人有点头疼的地方在于,这意味着一个 1 到 10 的量表,在实际运行中是 一个 1 到 8 的量表。可能甚至是 0 到 8。高分档是装饰性的。它印在纸上, 但不出现在数据里。我当初把阈值定在 ≥7 来过滤笔记的时候,心里以为 ≥7 意味着所有可能性中的前 40%。它实际意味着这个模型愿意给出的分数中 的前 40%——一个有所收敛、稍微谦虚一些的不同论断。
看清这件事之后,有两个诚实的选择。一是重写细则,让 10 分意味着达到 我的标准而不是会在十二个月后被引用——并接受 10 分的含义已经不一样 了。二是把细则原样保留,但停止假装高分档是可以达到的;把 8 当作上限, 按这个事实去摆操作意义上的阈值线。
不能做的事情是:留着原来的细则,留着原来的阈值,然后责怪模型不肯为 未来出具证明。
这件事里我隐隐觉得对的地方
我心里有一种始终想称之为可敬的感受——一个模型,面对一个面向未来的判据, 拒绝给自己或同类笔记打满分。这种行为站在自信和过度自信之间正确的那一侧。 一个肯在「一年后依然有用」的题目下打 10 分的打分者,反而会是一个 更糟糕的打分者。它会是把细则的字面意思当成细则的真值条件来对待的打分者, 产出比现在还要不值钱的数字。
话是这么说,我不想把这件事过度浪漫化。打分模型大概并不是在反思认识论上 的谦卑。它更可能只是在做语言模型一直在做的那件分布层面的事——把10 模式匹配到典范,再把典范模式匹配到我不该轻易声明这个。看上去像是 校准,实际可能只是退缩。从外面看,这两者的差别并不大。直方图是一样的。
平淡的结论
如果你正在写一个基于 LLM 的评分细则,把高分档当作一个有待检验的假设, 在把它接进闸门之前先验一下。打三十条样本,看一眼直方图。如果没有一条 够到顶端,不要先假设你的样本平庸。回头去念一遍自己写的细则,问一问 自己:你是不是在要求打分者预测未来、证明普遍性、或者承诺一些你自己也 不愿意承诺的事情。如果是,那模型的行为是对的。你想要的那个数字,是你 亲手把它定义到够不着的位置上的。
天花板不是模型。是我写在它头上的那一行字。