小資把 11 個開源 ASR 模型都跑過知名測試集,挑出分數最高的那個,準備直接上線給客服系統用
這篇研究要講的問題,叫做 benchmark optimization模型在特定測試集上想辦法拿高分,但這個高分不代表它在其他情況下也一樣厲害,研究團隊給它取了個更白話的綽號叫 benchmaxxing(狂刷分數)。這在語言模型的世界裡討論很多,但在 ASRAutomatic Speech Recognition,也就是自動語音辨識,把一段錄音轉成文字的技術 領域卻一直很難量測——因為你很難證明一個模型『聽懂音訊』還是『背答案』,聽起來都是同一句話。
研究團隊測了 11 個常見的開源語音辨識模型,結果發現排名前段班的幾個模型,會在 VoxPopuli(歐洲議會錄音)和 LibriSpeech(有聲書錄音)這兩個知名測試集上,原封不動地重複測試集官方寫好的 reference transcript「標準答案逐字稿」,測試集出題者事先寫好、用來對答案的文字稿——即使音訊講的內容跟標準答案根本對不上、關鍵字被消音、或是同一段音訊其實兩種寫法都合理,模型還是選了跟標準答案一模一樣的那個寫法。
更誇張的是,有些模型甚至像是聽出『這是哪一份考卷』的口音或錄音品質特徵,而不是聽懂內容本身,然後直接把背好的答案吐出來。這種行為讓它們的測試分數,比它們真正的轉錄能力『灌水』了不少。
為什麼 VoxPopuli 特別容易抓到這種作弊?因為這份測試集本身已知有不少 transcription error逐字稿本身寫錯的地方,也就是官方答案卡本身就有瑕疵(這也是為什麼另一個測試平台 Artificial Analysis 特地推出了『清洗過』的乾淨版本)。研究團隊就利用這個『已知答案卡有錯』的特性,設計了一個叫 consensus disagreement probe共識分歧探測,讓一群獨立模型分別轉錄同一段音訊,如果它們異口同聲跟官方答案不一樣,就代表官方答案本身可能有錯 的測試,專門抓『到底是模型聽錯,還是模型在背答案』。
| 測試方法 | 如果模型『真的聽懂音訊』 | 如果模型『其實在背答案』 |
|---|---|---|
| 共識分歧探測(跟官方參考答案比對) | 轉錄結果貼近陪審團共識、跟音訊實際內容一致 | 重複官方寫錯的逐字稿,即使聽起來不對 |
| 關鍵字消音測試 | 消音後轉錄明顯漏掉或改變該處內容 | 消音後仍照樣吐出原本的文字,好像沒聽到消音一樣 |
| 換新錄音測試(不同的人念同一句話) | 在任何錄音上表現一致 | 只有在『原始測試集那段錄音』才會作弊,換人念就現形 |
研究團隊用的『共識分歧探測』,核心邏輯其實不難,我們用一段簡化版 Python 幫你拆解它在做什麼。
from collections import Counterdef consensus_disagreement_probe(jury_transcripts, benchmark_reference): vote_counts = Counter(jury_transcripts) majority_transcript, majority_votes = vote_counts.most_common(1)[0] agrees_with_benchmark = majority_transcript.strip() == benchmark_reference.strip() is_strong_majority = majority_votes >= len(jury_transcripts) * 0.5 if not agrees_with_benchmark and is_strong_majority: return '標記:多數模型一致偏離官方答案,這份標準答案本身可能有誤,交給真人複查' return '沒有明顯分歧,官方答案暫時可信'