對應原題(Common ‧ Evaluation and Observability)

  • What is benchmark contamination and how do you guard against it?
    — Asked at: Zhipu AI, Alibaba, Scale AI
  • Why do benchmark scores improve while users say the system got worse? Enumerate the reasons.
    — Asked at: Cognition

兩題合起來就是一個完整的命題:基準分數為什麼不等於真實品質。

🎯 什麼情境該想到我

當你「看到某個模型宣稱在 X 基準上 SOTA,要判斷這個數字值多少」的時候;
或「自己的離線分數上升,使用者卻在抱怨」的時候。

⚙️ Part 1:基準污染(Benchmark Contamination)

定義

評估資料(或其極近的變體)出現在訓練語料中,導致模型是「記住答案」而不是「會做題」。

★ 為什麼幾乎無法避免

途徑說明
1. 基準本來就公開在網路上預訓練語料是整個網路的爬取,benchmark 的 GitHub repo、論文附錄、HuggingFace dataset 全都在裡面
2. 間接洩漏題目被部落格討論、被翻譯、被貼進 Stack Overflow、被寫進教學文 —— 即使原始檔案被排除,變體仍在
3. ★ 合成資料傳播用一個受污染的模型生成訓練資料 → 污染跟著傳給下一代。這在蒸餾盛行的今天是主要途徑(見 知識蒸餾)
4. 後訓練階段引入SFT / 偏好資料中混入了與測試集高度相似的題目,有意或無意

★ 所以正確的心態不是「我們的模型沒有被污染」,而是「污染程度是多少、我怎麼量」。
面試時直接宣稱「我們做了去重所以沒有污染」是薄弱的答案。

偵測方法

方法怎麼做需要什麼
n-gram 重疊比對掃訓練語料中是否出現測試題的長 n-gram★ 要有訓練語料存取權 —— 只有自家模型做得到
★ 改寫落差法比較模型在「原題」與「語意相同但改寫過的題目」上的表現。
落差大 = 記住的是字面,不是能力
只要 API
★ 選項擾動選擇題把選項順序打亂或換掉干擾項,分數大跌只要 API
困惑度異常模型對測試題的 perplexity 顯著低於同類型的新文本logprob 存取
Canary string基準作者刻意埋入的標記字串;模型能複誦 = 看過基準支援
★ 時間切割用模型訓練截止日之後才出現的題目測(新考題、新競賽、新聞事件)✅ 最乾淨的做法

★ 「改寫落差法」與「時間切割」是不需要訓練語料就能做的兩招,也是面試最值得講的兩個。

防範

做法說明
★ 自建私有評估集,永不公開最有效。公開的那一刻就開始污染
定期更新題目把評估集當成會過期的東西
用訓練截止後的資料每次模型更新就重新取材
同時報告公開與私有分數兩者落差本身就是污染程度的線索
訓練側做去重n-gram / MinHash 比對測試集並移除(只能擋直接洩漏)
對外宣稱要誠實說明去污染做法與殘餘風險

⚙️ Part 2:★ 為什麼「分數漲、體感掉」(Cognition 那題)

這題要的是一份清單,不是一個原因。 十二個原因,按發生頻率排序:

#原因說明
1★ 評估分布 ≠ 使用者分布benchmark 是精心設計、乾淨、中等長度的題目;真實輸入更髒、更模糊、更長、更長尾,還有錯字與半句話
2污染見 Part 1。分數是背出來的
3Goodhart 法則對著指標優化,指標沒涵蓋的維度全部退化(同 RLHF 全流程 的 reward hacking)
4★ 平均掩蓋子群總體 +2%,但中文 -15%、長文件 -20%。單一數字是會騙人的
5★ 指標沒量到的維度延遲、成本、語氣、格式穩定性、遵循細節指令的能力——benchmark 一個都沒測
6回答變囉嗦benchmark 不扣分(甚至加分),但使用者很煩(見 LLM-as-Judge 的冗長偏誤)
7拒答率飄移變保守 → 該答的不答;變大膽 → 該拒的不拒。兩邊 benchmark 都不太測
8★ 一致性與可預測性下降同樣的 prompt 行為變了,使用者建立好的工作流被打破。
★ 對重度使用者,「可預測」常常比「更聰明」重要——這一點最容易被忽略,也是 Cognition 這類公司最有感的
9長尾能力退化為了衝主指標做的微調傷到了別的能力(見 災難性遺忘)
10期待水位上升模型變好,使用者的標準也跟著變高。相對體感可能下降
11單輪評估 vs 多輪使用benchmark 幾乎都是單輪;真實使用是多輪,錯誤會累積
12評估設定 ≠ 產品設定benchmark 用的 temperature、system prompt、max_tokens、few-shot 與產品不同

★ 對策:把「體感」變成可量測的東西

做法說明
★ 線上行為指標當主要指標追問率、任務完成率、複製率、放棄率(見 上線閘門與線上評估)
子群分層評估語言、查詢類型、長度、使用者層級各自看
為重度使用者建專屬回歸集他們的工作流被打破時,損失最大
把一致性當成指標同樣輸入跨版本的輸出差異度——變動本身就是成本
把每次抱怨變成測試案例體感是可以被逐步編碼成回歸集的
公開基準只當粗篩用來排除明顯不行的選項,不用來做最終決策

⚠️ 注意 / 什麼時候不適用

  • ★ 公開基準不是沒用,是「只能當粗篩」。它在「這個模型連基本能力都沒有」這件事上很有效。
  • 私有評估集也會腐化。調參數調久了就是在對著它過擬合——要有 holdout(見 沒有標註時怎麼建評估集)。
  • 改寫落差法有誤判。改寫本身可能改變難度。要用一組改寫取統計,不要看單題。
  • 時間切割的題目量少,而且會隨時間失效(下一代模型的訓練截止日又往後了)。要持續補充。
  • 不要拿別人的基準分數比較自己的系統。評估設定、prompt、取樣參數不同,數字完全不可比。
  • 「使用者說變差」也可能是錯的。抱怨的人比滿意的人大聲。要有量化的行為指標,不能只聽最吵的聲音。

🧪 我實際套用的紀錄

  • 2026-09-20:從面試題庫展開。待辦:評估報告一律加上子群分層,不只總體平均。

🔗 相關