對應原題(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。分數是背出來的 |
| 3 | Goodhart 法則 | 對著指標優化,指標沒涵蓋的維度全部退化(同 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:從面試題庫展開。待辦:評估報告一律加上子群分層,不只總體平均。
🔗 相關
- 沒有標註時怎麼建評估集 —— 自建私有評估集
- 上線閘門與線上評估 —— 子群 gate 與線上行為指標
- LLM-as-Judge —— 冗長偏誤
- RLHF 全流程 —— Goodhart 與 over-optimization
- 災難性遺忘 —— 長尾能力退化
- 知識蒸餾 —— 污染透過合成資料傳播
- 工具-AI改動的AB對照評測 —— 決策層