使用 Hugging Face Transformers 微調 Whisper 以支援多語言 ASR

Hugging Face 已發布一份技術指南,說明如何微調 OpenAI 的 Whisper 模型以進行多語言自動語音辨識(ASR)。透過 🤗 Transformers 套件,開發者可以將 Whisper 先前訓練的多語言知識套用到資源稀少的語言上,文件中示範了在印地語上微調的案例,僅使用 8 小時的訓練資料,即將字錯誤率(WER)從 63.5% 降至 32.0%。

Whisper 模型架構與預訓練

Whisper 是一種基於 Transformer 的編碼器‑解碼器(seq2seq)模型,旨在將音訊頻譜特徵映射為文字 token。它與先前的模型(如 Wav2Vec 2.0)不同,因為它是以大量 標記的 音訊‑文字配對資料進行預訓練——總計 68 萬小時,其中包含 11.7 萬小時的多語言 ASR 資料。

主要技術特性

  • 監督式預訓練: 由於直接在語音‑文字映射上訓練,Whisper 相較於在無監督任務(如遮蔽預測)上預訓練的模型,需要的微調量顯著較少。
  • 深度融合: 模型在解碼器內部內建語言模型,使整個系統能以單一損失函數(交叉熵)端到端訓練。
  • 輸入處理: 原始音訊會被轉換為 log‑Mel 頻譜圖。編碼器將這些頻譜圖轉換為隱藏狀態,解碼器再根據這些隱藏狀態自回歸地預測文字 token。

模型配置

Whisper 提供多種規模,以在效能與計算成本之間取得平衡:

規模 參數量 僅限英文 多語言
tiny 39 M
base 74 M
small 244 M
medium 769 M
large (v1, v2, v3) 1550 M

微調流程

微調 Whisper 包含三個主要步驟:音訊前處理的特徵擷取器、seq2seq 模型本身,以及文字後處理的 tokenizer。

音訊前處理與特徵擷取

Whisper 要求音訊以 16kHz 取樣。WhisperFeatureExtractor 會執行兩項關鍵操作:

  1. 填充/截斷: 所有音訊樣本皆標準化為 30 秒長度。較短的樣本以零填充,較長的則截斷。
  2. 頻譜圖轉換: 填充後的音訊陣列會被轉換為 log‑Mel 頻譜圖,代表訊號隨時間的頻率分布。

Tokenization 與標記

WhisperTokenizer 使用預訓練的 Byte‑Pair Encoding(BPE)詞彙表,涵蓋 96 種語言。微調時,會以特定目標語言與任務(例如 language="Hindi", task="transcribe")設定 tokenizer,系統會在標籤序列前自動加入必要的特殊 token。

低資源語言的實作細節

以 Common Voice 11.0 的印地語資料集為例,指南說明了如何調整 whisper-small checkpoint 的具體工作流程。

資料準備

  • 重新取樣: 由於 Common Voice 的音訊常以 48kHz 取樣,會使用 datasets.Audiocast_column 方法即時重新取樣至 16kHz。
  • 映射: prepare_dataset 函式會計算 log‑Mel 輸入特徵,並將目標文字轉換為標籤 ID。

訓練設定

  • 資料整理器: 自訂的 DataCollatorSpeechSeq2SeqWithPadding 會同時處理 input_features(固定維度張量)與 labels(可變長度序列),後者會以 -100 填充,以在計算損失時被忽略。
  • 評估指標: 以字錯誤率(WER)作為效能衡量,這是 ASR 領域的業界標準。
  • 超參數: 示範中使用的學習率為 1e-5fp16 精度,最多 5,000 步訓練。

效能結果與意涵

在約 8 小時的印地語資料上微調 whisper-small,相較於零樣本的預訓練模型,取得了顯著的效能提升。

  • 預訓練 WER: 63.5%
  • 微調後 WER: 32.0%
  • 絕對改善: 31.5%

此結果顯示 Whisper 的大規模預訓練使其能以極少的額外資料,對低資源語言產生良好的泛化能力。若要進一步提升表現,指南建議可調整超參數(學習率、dropout)或改用更大的 checkpoint(如 mediumlarge‑v3)。

Sources