返回首頁

GitHub Repo

Transformers 社群回報 Whisper 時間戳解碼缺陷,張量批次可能合併結果或拋出例外

10 月 7 日的開發版重現指出,Whisper 時間戳解碼可能無法正確處理 generate 回傳的二維張量,造成批次結果合併或執行失敗。案例附有最小重現,但正式版本影響範圍與上游修補仍待確認。

Andrew Wippler from Lancaster, USA · CC BY 2.0 · Image source
zh-Hant

Hugging Face Transformers 社群於 10 月 7 日回報,Whisper 的 batch_decode(..., decode_with_timestamps=True) 對輸入容器的處理不一致:相同 token 以巢狀 Python 清單傳入時,能逐筆解碼;改成二維 PyTorch 張量,卻可能把多筆結果串成一筆,或直接拋出例外。回報使用當日 main 分支提交 a96730c,環境為 macOS arm64,並稱 Linux x86_64 也出現相同行為。問題回報

最小案例只需載入 openai/whisper-tiny 的處理器,再自行組合時間戳與文字 token,無須執行完整語音模型。三筆各含一個時間戳 token 的張量,回傳單一字串;每筆含多個 token 時,則出現張量布林值不明確的錯誤。回報也列出從 generate(..., return_timestamps=True) 接到批次解碼的端到端呼叫方式。重現程式

依回報者分析,Whisper 解碼器只有在輸入為「清單中的清單」時才辨識批次。二維張量因此進入單一序列路徑,時間戳迴圈讀到的是整列,而非單一 token:長度為一的列能通過比較並被串接,更長的列則觸發例外。官方文件確實將張量與 NumPy 陣列列為 batch_decode 可接受的型別,也說明時間戳選項會在文字中保留時間資訊,讓這個容器差異成為值得追查的 API 相容性問題。Whisper 文件

對批次字幕或語音資料處理流程而言,工程上值得注意的是輸出筆數:除了捕捉例外,也應核對每筆輸入是否仍有對應結果。依清單對照案例,轉成巢狀清單可作為暫時避開問題的方向,但仍須在自己的版本驗證。回報稱不保留時間戳的路徑未受影響;目前頁面尚無維護者確認或關聯修補,不能推論所有正式版本皆受影響。後續應追蹤型別正規化修補,以及張量、陣列與清單的批次回歸測試。範圍與狀態

來源

  1. Whisper batch_decode 時間戳張量處理問題 #49403
  2. Transformers Whisper 官方 API 文件