排行榜文档

分数标准化

Hugging Face's logo
加入 Hugging Face 社区

并获得增强文档体验

开始使用

分数标准化

本页面解释了开放 LLM 排行榜上如何对六个展示的基准测试中的分数进行标准化。我们可以将所有任务分类为具有子任务的任务、没有子任务的任务和生成式评估。

Open In Colab

注意:点击上面的按钮以在交互式笔记本中探索分数标准化过程(复制以编辑)。

什么是标准化?

标准化是将不同尺度上测量的值调整到一个共同尺度的过程,从而可以比较不同任务之间的分数。对于开放 LLM 排行榜,我们对分数进行标准化以

  1. 考虑不同任务的难度和随机猜测基线差异。
  2. 为所有任务提供一致的尺度(0-100),实现公平比较。
  3. 确保随机猜测上的改进在分数中得到适当体现。

通用标准化过程

基本的标准化过程包括两个步骤

  1. 减去随机基线分数(下限)。
  2. 将结果缩放到 0-100 的范围。

我们使用以下标准化函数

def normalize_within_range(value, lower_bound, higher_bound):
    return (value - lower_bound) / (higher_bound - lower_bound)

标准化无子任务的任务

对于没有子任务的任务(例如,GPQA、MMLU-PRO),标准化过程很简单

  • 确定下限(随机猜测基线)。
  • 应用标准化函数。
  • 缩放到百分比。

示例:标准化 GPQA 分数

GPQA 有 4 个 num_choices,所以下限是 0.25(1/num_choices = 1/4 = 0.25)。

raw_score = 0.6  # Example raw score
lower_bound = 0.25
higher_bound = 1.0

if raw_score < lower_bound:
    normalized_score = 0
else:
    normalized_score = normalize_within_range(raw_score, lower_bound, higher_bound) * 100

print(f"Normalized GPQA score: {normalized_score:.2f}")
# Output: Normalized GPQA score: 46.67

标准化具有子任务的任务

对于具有子任务的任务(例如,MUSR、BBH),我们遵循以下步骤

  • 计算每个子任务的下限。
  • 标准化每个子任务分数。
  • 平均标准化的子任务分数。

示例:标准化 MUSR 分数

MUSR 有三个具有不同选择数量的子任务

  • MUSR 谋杀之谜,num_choices = 2,下限 = 0.5
  • MUSR 物体放置,num_choices = 5,下限 = 0.2
  • MUSR 团队分配,num_choices = 3,下限 = 0.33
subtasks = [
    {"name": "murder_mysteries", "raw_score": 0.7, "lower_bound": 0.5},
    {"name": "object_placement", "raw_score": 0.4, "lower_bound": 0.2},
    {"name": "team_allocation", "raw_score": 0.6, "lower_bound": 0.333}
]

normalized_scores = []

for subtask in subtasks:
    if subtask["raw_score"] < subtask["lower_bound"]:
        normalized_score = 0
    else:
        normalized_score = normalize_within_range(
            subtask["raw_score"], 
            subtask["lower_bound"], 
            1.0
        ) * 100
    normalized_scores.append(normalized_score)
    print(f"{subtask['name']} normalized score: {normalized_score:.2f}")

overall_normalized_score = sum(normalized_scores) / len(normalized_scores)
print(f"Overall normalized MUSR score: {overall_normalized_score:.2f}")

# Output:
# murder_mysteries normalized score: 40.00
# object_placement normalized score: 25.00
# team_allocation normalized score: 40.00
# Overall normalized MUSR score: 35.00

生成式评估

像 MATH 和 IFEval 这样的生成式评估需要不同的方法

  1. MATH:使用精确匹配准确率。下限实际上是 0,因为随机猜测不太可能产生正确的答案。
  2. IFEval
    • 对于实例级评估 (ifeval_inst),我们使用严格准确率。
    • 对于提示级评估 (ifeval_prompt),我们也使用严格准确率。
    • 两者的下限都是 0,因为随机生成不太可能产生正确的答案。

这种方法确保即使对于生成式任务,我们也可以提供可比较不同评估的标准化分数。

更多信息

有关更详细的信息和示例,请参阅我们关于分数标准化的博文

如果您有任何疑问或需要澄清,请在排行榜页面上发起新的讨论。

< > 在 GitHub 上更新