排行榜文件

分數歸一化

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

分數歸一化

本頁解釋了在開放大語言模型排行榜(Open LLM Leaderboard)上,針對六個基準測試的分數是如何進行歸一化的。我們可以將所有任務分為三類:包含子任務的任務、不包含子任務的任務以及生成式評估。

Open In Colab

注意: 點選上方按鈕,在互動式筆記本中探索分數歸一化過程(建立副本以進行編輯)。

什麼是歸一化?

歸一化是將不同尺度上測量的值調整到同一通用尺度的過程,從而可以跨不同任務比較分數。對於開放大語言模型排行榜,我們進行分數歸一化是為了:

  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,lower_bound = 0.5
  • MUSR 物體放置,num_choices = 5,lower_bound = 0.2
  • MUSR 團隊分配,num_choices = 3,lower_bound = 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 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.