Metrics
Metrics summary
Perplexity (PPL)
PPL 是 Perplexity(困惑度)的缩写,是评价语言模型(Language Model, LM)好坏最常用的指标之一。
简单来说,PPL 衡量的是模型在预测下一个词时的“困惑程度”。模型对文本序列的概率分布预测得越准确,它的“困惑”就越小,PPL 值也就越低。
1. PPL 的直观理解
你可以把 PPL 理解为模型在面对下一个词时的平均选择分支数:
-
如果一个模型的 PPL = 10,说明模型在预测下一个词时,相当于在 10 个等可能的词中做选择。
-
结论: PPL 值越低,说明模型生成的句子越流畅、越符合自然语言逻辑,模型的性能越好。
2. 如何计算 PPL?
PPL 的计算基于句子出现的概率。假设我们有一个包含 N 个词的句子 W = (w_1, w_2, ..., w_N)。
核心公式
PPL 是句子概率倒数的几何平均值,公式如下:
根据链式法则,句子的概率 P(W) 可以拆解为:
与交叉熵(Cross Entropy)的关系
在实际工程(如深度学习训练)中,我们通常不直接计算概率乘积(因为容易溢出),而是通过交叉熵损失(Cross Entropy Loss)来计算 PPL。这是最常用的计算方式:
-
计算平均交叉熵损失 H(W):
H(W) = -\frac{1}{N} \sum_{i=1}^{N} \log P(w_i | w_{<i}) -
通过指数函数还原:
PPL = e^{H(W)} \quad (\text{或 } 2^{H(W)} \text{,取决于对数底数})
3. PPL 的常见数值范围
-
完美预测: 如果模型每次都能以 100% 的概率猜对下一个词,PPL = 1。
-
随机预测: 如果词表大小为 V,模型完全靠盲猜,PPL = V(通常是几万甚至十几万)。
-
优秀模型: 在通用的英文语料上(如 Penn Treebank),优秀的模型 PPL 通常在 20 到 60 之间。
4. 使用 PPL 的注意事项
-
分词影响: PPL 受分词方式(Tokenizer)影响很大。不同分词方案(如 Word-level vs BPE)产生的 PPL 无法直接比较。
-
语料相关: PPL 只能在相同的测试集上比较才有意义。
-
不等于人类感官: 虽然 PPL 低通常意味着写得好,但有时 PPL 极低的模型可能会陷入“复读机”模式,因此还需要配合 BLEU、ROUGE 或人工评估。
你想了解如何用 Python 或 PyTorch 代码来实现 PPL 的计算吗?
Calibration
在机器学习,尤其是分类任务中,校准 (Calibration) 是一个关键的概念,它衡量的是模型对自身预测置信度的可靠性。
1. 什么是 Calibration(校准)?
在机器学习中,校准指的是模型输出的预测概率(或置信度)与实际观察到的准确率之间的一致性。
理想的校准状态(Perfect Calibration):
一个完美校准的分类器,当它以 P 的概率做出预测时,它的预测有正好 P 的概率是正确的。
-
举例:
-
如果模型预测 100 个样本的概率都是 80%,那么这 100 个样本中应该有大约 80 个是正确分类的。
-
如果模型预测 100 个样本的概率都是 50%,那么这 100 个样本中应该有大约 50 个是正确分类的。
-
如果模型在预测概率为 80% 的时候,实际的准确率却只有 65%,我们就说这个模型过度自信(Over-confident),它是未校准 (Uncalibrated) 的。
2. ECE 和 MCE 是用来做什么的?
Expected Calibration Error (ECE) 和 Maximum Calibration Error (MCE) 是最常用的量化模型校准性的指标。它们通过比较模型的预测置信度(Confidence)和实际的准确率(Accuracy)来工作。
为了计算这两个指标,通常需要将模型所有的预测概率划分为 M 个区间(Bins),比如 10 个等宽的区间(0-0.1, 0.1-0.2, ... 0.9-1.0)。
ECE (Expected Calibration Error) 期望校准误差
-
作用: 衡量模型平均而言的校准误差。
-
计算方法: 它是所有置信度区间(Bin)内,平均置信度与实际准确率之间差异的加权平均。
- 权重通常是每个区间内的样本占总样本的比例。
-
解读: ECE 越低,表示模型的预测概率与实际准确率之间的平均差距越小,校准性越好。ECE 可以用来衡量模型的整体校准质量。
其中 \text{acc}(B_m) 是区间 B_m 的准确率,\text{conf}(B_m) 是平均置信度,\frac{|B_m|}{N} 是该区间的权重。
MCE (Maximum Calibration Error) 最大校准误差
-
作用: 衡量模型校准误差的最坏情况。
-
计算方法: 它是所有置信度区间中,平均置信度与实际准确率之间差异的最大值。
-
解读: MCE 越低,表示模型在任何一个置信度区间内都没有出现灾难性的校准偏差。MCE 对于高风险应用(如医疗诊断、自动驾驶)特别重要,因为这些场景需要最大限度地减少最坏情况下的置信度偏差。
📊 可视化工具:可靠性图(Reliability Diagram)
为了更好地理解 ECE 和 MCE,我们通常会使用可靠性图(Reliability Diagram) 来进行可视化。
-
图的横轴: 模型的平均预测置信度(按区间划分)。
-
图的纵轴: 模型在对应置信度区间内的实际准确率。
-
理想线: 一条从 (0, 0) 到 (1, 1) 的对角线。如果模型完美校准,图中的点就应该落在这条线上。
ECE 衡量的是所有点到对角线距离的加权平均,而 MCE 衡量的是所有点到对角线距离的最大值。
ECE (Expected Calibration Error)和 MCE (Maximum Calibration Error)例子
好的,我们来用您给出的 3 个样本的例子,演示如何计算 ECE 和 MCE。
为了计算这两个指标,我们需要将置信度(即模型预测的最高概率)划分到不同的区间 (Bins) 中。由于我们只有三个样本,为了简化演示,我们使用 3 个自定义的区间:
| 置信度区间 Bm | 样本 A conf=0.80 | 样本 B conf=0.50 | 样本 C conf=0.55 |
|---|---|---|---|
| B_1: [0.0, 0.4] | - | - | - |
| B_2: (0.4, 0.6] | - | 样本 B (0.50) | 样本 C (0.55) |
| B_3: (0.6, 1.0] | 样本 A (0.80) | - | - |
总样本数 N = 3。
步骤一:计算每个区间的指标
我们针对 B_2 和 B_3 这两个非空区间进行计算:
📊 区间 B_2: (0.4, 0.6]
-
平均置信度 \text{conf}(B_2):
\text{conf}(B_2) = \frac{0.50 + 0.55}{2} = \frac{1.05}{2} = \mathbf{0.525} -
实际准确率 \text{acc}(B_2):
-
样本 B (置信度 0.50): 正确
-
样本 C (置信度 0.55): 错误
\text{acc}(B_2) = \frac{\text{正确样本数}}{|B_2|} = \frac{1}{2} = \mathbf{0.50}
-
-
校准误差 \text{CalError}(B_2):
\text{CalError}(B_2) = |\text{acc}(B_2) - \text{conf}(B_2)| = |0.50 - 0.525| = \mathbf{0.025}
📊 区间 B_3: (0.6, 1.0]
-
平均置信度 \text{conf}(B_3):
\text{conf}(B_3) = \frac{0.80}{1} = \mathbf{0.80} -
实际准确率 \text{acc}(B_3):
-
样本 A (置信度 0.80): 正确
\text{acc}(B_3) = \frac{\text{正确样本数}}{|B_3|} = \frac{1}{1} = \mathbf{1.00}
-
-
校准误差 \text{CalError}(B_3):
\text{CalError}(B_3) = |\text{acc}(B_3) - \text{conf}(B_3)| = |1.00 - 0.80| = \mathbf{0.20}
步骤二:计算 ECE (Expected Calibration Error)
ECE 是所有区间校准误差的加权平均值。权重是该区间的样本数 |B_m| 占总样本数 N 的比例。
| 区间 | \frac{\vert B_m \vert}{N} (权重) | \text{CalError}(B_m) | \text{权重} \times \text{误差} |
|---|---|---|---|
| B_2 | \frac{2}{3} | 0.025 | \frac{2}{3} \times 0.025 \approx 0.0167 |
| B_3 | \frac{1}{3} | 0.20 | \frac{1}{3} \times 0.20 \approx 0.0667 |
步骤三:计算 MCE (Maximum Calibration Error)
MCE 是所有区间的校准误差中的最大值。
结论
在这个小样本的例子中:
-
ECE \approx 0.0834:表示该模型的平均校准误差尚可。
-
MCE = 0.20:表示该模型在置信度最高的区间 B_3 (0.6, 1.0] 表现出最大的不一致。模型在这个区间内的平均置信度是 0.80,但实际准确率达到了 1.00,说明模型略微存在过度谨慎(Under-confident)的倾向,即它本可以更自信地做出预测。
Hit Rate (Hit@k)
含义: 只要前 k 个推荐列表中包含了一个用户感兴趣的物品,就计为 1(命中),否则为 0。它反映了模型“至少能推对一个”的能力。
公式:
其中 I(\cdot) 是指示函数,R_{u,k} 是为用户推荐的前 k 个物品集合。
Precision (精度/准确率)
含义: 在推荐的前 k 个物品中,有多少比例是用户感兴趣的。
公式:
Recall (召回率)
含义: 用户所有感兴趣的物品中,有多少比例被排在了前 k 个推荐位里。
公式:
F1-Score
含义: Precision 和 Recall 的调和平均数,用于综合权衡两者的表现。
公式:
MRR (Mean Reciprocal Rank,平均倒数排名)
含义: 关注第一个正确结果出现的位置。如果第一个正确答案排在第 r 位,则分数为 1/r。分数越高,说明正确答案排得越靠前。
公式:
其中 \text{rank}_i 是第 i 个用户第一个命中物品的排名位置。
MAP (Mean Average Precision,平均准确率均值)
含义: 考虑了所有正确答案的排名。它先计算每个用户的 Average Precision (AP),再对所有用户取平均。
公式:
其中 \text{rel}(n) 为第 n 个位置是否相关(1 或 0)。
NDCG (Normalized Discounted Cumulative Gain,归一化折损累计增益)
含义: 最常用的排名指标。它不仅关心是否命中,更关心命中的位置。位置越靠前,权重(Gain)越高。
-
DCG (折损增益):
\text{DCG}_k = \sum_{i=1}^k \frac{2^{rel_i} - 1}{\log_2(i+1)} -
IDCG: 理想状态下(即把所有相关项都排在最前面)的 DCG。
-
NDCG:
\text{NDCG}_k = \frac{\text{DCG}_k}{\text{IDCG}_k}
注意:
linear和exponential指的是 DCG 公式中对相关度 (rel_i) 的处理方式。
Linear: 直接使用相关度分值。
Exponential: 使用 2^{rel_i} - 1,这会大幅增加高相关度物品排在前面的奖励。
指标间关系
-
Hit@1 = Precision@1 = Recall@1 = MRR@1 = 0.456:
这是因为在 k=1 且每个用户通常只有一个正样本(常见于 Leave-one-out 评估法)时,这些指标在数学上是等价的。
-
Precision 随 @k 增大而下降:
这是正常的。因为分母 k 在变大,但用户的正样本数量通常很少(可能只有 1 个),所以 k 越大,Precision 越稀释。
MRR v.s. NDCG
-
如果你的任务中每个搜索/推荐只有一个标准答案: 两者排序基本一致,选哪个都行(MRR 更常用,简单直观)。
-
如果你的任务中存在多个正确答案(或者有相关分值): 它们的排序经常会发生分歧。此时 NDCG 被认为是更权威、更精细的指标,因为它奖励了模型召回更多正确项的能力。