整数分容易挤在同一档,所以会有人问:能不能让 judge 打 20 次分,再算个 weighted score?可以,但先分清你拿到的到底是哪一种概率。

先动手:同样 3 分,可以差很多

交互演示需要 JavaScript。20 次全给 3 分,与各 10 次给 1 和 5 分,均值都是 3,方差(variance)分别是 0 和 4。

这里调整的是虚构的评分次数。切换「都给 3」和「1 / 5 两极」,均值没变,分歧完全不一样。全调成 0 时没有数据,不应该显示 0 分。

方法 A:读取评分标签的概率

先约定 $p(k)$ 是评分标签 1–5 上总和为 1 的分布。拿到同一个评分位置的完整标签概率后,可以做:

$$\bar{s}=\sum_{k=1}^{5}k\,p(k).$$

例如 \(p(3)=0.1,\ p(4)=0.7,\ p(5)=0.2\),加权结果是 4.1。G-Eval使用评分 token 概率来细化离散分数,这是理解它的一条主线。

如果拿到的是整个词表(vocabulary)上的原始概率,评分标签的概率和不一定为 1。假设 1–5 五个标签都拿全了,其中 3、4、5 分分别占 0.08、0.56、0.16,1、2 分为 0,其余 0.20 属于其他 token。直接加权会得到 3.28;除以评分标签的总质量 0.80,才得到“已知输出属于 1–5”时的条件均分 4.1。要把 0.80 也记下来,不能把它和完整评分分布混为一谈。

动画 先归一到 1–5 分,再算均分

这张图需要启用 JavaScript。

raw_rating_probabilities = {1: 0.0, 2: 0.0, 3: 0.08, 4: 0.56, 5: 0.16}
rating_mass = sum(raw_rating_probabilities.values())
weighted_sum = sum(score * probability for score, probability in raw_rating_probabilities.items())
conditional_mean = weighted_sum / rating_mass
assert abs(rating_mass - 0.80) < 1e-12
assert abs(weighted_sum - 3.28) < 1e-12
assert abs(conditional_mean - 4.1) < 1e-12

但不能简单说「API 有 logprobs 就行」:

  • 返回的 top-k 里可能没有所有评分标签。没出现,不代表概率为 0。
  • "4"、" 4"、多 token 的标签不一定是一回事。必须固定格式,检查 tokenizer 和评分位置。
  • 只在返回的评分子集上归一化,得到的是一个条件分布,要报告保留的概率质量。
  • 如果返回的 top-k 里缺了评分标签,不要假装知道完整期望。可以改输出协议、换能提供所需概率的接口,或改用重复采样。

模型把 4 这个 token 生成出来的概率,也不是「这个答案有 70% 概率是正确的」。输出概率与判断正确率的校准(calibration)是两回事。

方法 B:独立调用,多次抽样

如果 20 次调用得到 3 分 4 次、4 分 12 次、5 分 4 次:

$$\hat p(k)=\frac{n_k}{N},\qquad \bar{s}=\sum_k k\frac{n_k}{N}=\frac{1}{N}\sum_{i=1}^{N}s_i=4.$$

这其实就是普通平均分,按频数整理后写成 weighted sum。不是先有了 20 个分数,再凭空给每次分数加一个不同权重。

这也不是和 G-Eval 无关的另一个技巧:论文 §3.1 说明,当时的 GPT-4 接口不返回 token 概率,所以作者用 20 次采样估计评分分布。这里说的是论文当时的设置,不是今天所有接口的限制。20 个独立采样结果也不一定需要 20 个 HTTP 请求,要看接口是否支持批量生成。

  • 单次 prompt 要求「给我 20 个评分」,不等于 20 次独立调用。
  • 重复调用也要固定模型、rubric、上下文和采样设置;独立抽样只是建模前提,不是去除系统偏差的保证。
  • Temperature 为 0 时反复给一样的分数,不足以估计有意义的采样分布(sampling distribution);温度也不能当成「质量校准旋钮」。
  • 有 2 次解析失败,就报告 18/20 个有效结果和 2 次错误。不能只报 18 个的均值,让失败消失。

多抽几次能帮助观察随机波动,不能自动修好一个有偏的 rubric。20 也不是一个适用于所有任务的神奇数字。

均值之外,至少留哪些东西

记录 能回答什么
完整频数 / 概率 分数挤在哪儿,是否双峰?
均值和方差 按当前数字编码,中心和离散程度怎样?
有效数 / 尝试数 是稳定通过,还是很多调用没给出判断?
unknown 与 error 分开计数 缺证据,还是评估程序出了问题?
criterion 与模型版本 两批分数真能放在一起比吗?

即使算出 4.137,也不代表比 4.100 更「真实」。1–5 本来是 ordinal scale;把它当等间距数值做均值是一项选择,要靠实际决策与人工判断验证它有没有用。

两类加权别混了

评分分布加权是在同一个 criterion 内算期望。多维指标加权是把 grounding、relevance、style 合成一个总分。前者不会替你决定后者的权重,更不会让事实错误被文风补回来。

想一想:两组都平均 3 分,应该挑方差小的那组吗?

不能仅凭方差选。稳定给错分的 judge 也可以方差为 0。先检查人工对照和 criterion,再判断分歧是模型随机性、任务歧义,还是证据不完整。

接着读:偏差测试 · 人工校准与阈值

本页术语 4
方差 variance
估计量的波动幅度;重要性加权最容易在这里爆炸
词表 vocabulary
模型能输出的所有 token 的集合
校准 calibration
模型给出的置信度是否等于真实正确率
采样分布 sampling distribution
训练候选被抽中的概率分布,它决定模型经常看到哪类边界