為低資源 ASR 微調 MMS Adapter 模型
TL;DR
MMS adapter 微調在僅需 10-20 分鐘的訓練後,即可為低資源語言提供大幅降低的字錯率 (WER),且其記憶體消耗遠低於全模型微調。
為什麼 MMS adapters 對於低資源 ASR 至關重要
在數據有限的語言上,針對 Massive Multilingual Speech (MMS) 模型進行 adapter 訓練的效果優於全模型微調。這種方法更具記憶體效率,能在幾分鐘內收斂,並在僅訓練每個語言約 2.5 M adapter 權重的同時,保留基礎模型(約 99% 的參數)。
背景:從 wav2vec 2.0 到 MMS
- wav2vec 2.0 (2020 年 9 月) 引入了自我監督語音預訓練。
- XLS-R 將 wav2vec 2.0 擴展到了 128 種語言。
- MMS (Meta AI, 2023) 將此規模擴展到 >1,100 種語言,其 300 M 和 1 B 參數的檢查點是在 1,400 種語言的 >500k 小時音訊上訓練而成的。
MMS 發布了三個帶有特定語言 adapter 的 ASR 檢查點:
mms-1b-fl102(102 種語言)mms-1b-l1107(1,107 種語言)mms-1b-all(所有 1,162 種語言)
每個 adapter 包含約 2.5 M 可訓練權重(每個 attention block 的小型線性投影加上一個特定語言的詞彙層)。
Adapter 訓練 vs. 全模型微調
| 項目 | Adapter 微調 | 全模型微調 |
|---|---|---|
| 更新的參數 | 每種語言 ~2.5 M (≈0.2% 的 1 B 模型) | 所有模型權重 (≈1 B) |
| 記憶體使用量 | 顯著較低;許多語言可在單個 GPU 上運行 | 高;通常需要多 GPU 或梯度檢查點 (gradient checkpointing) |
| 訓練時間 | 4 小時 Common Voice 數據約需 10-20 分鐘 (≈4 epochs) | 達到同等性能需數小時至數天 |
| 低資源數據表現 | 更好的 WER,更強健 | 較差的 WER,容易過擬合 |
| 可擴展性 | 僅需訓練新的 adapter 即可增加新語言 | 必須重新訓練或微調整個模型 |
對於中高資源語言,全模型微調可能仍具優勢,但在數據稀缺的場景下,adapter 佔據主導地位。
端到端 adapter 微調工作流程 (以土耳其語為例)
- Setup – 安裝
datasets、transformers、torchaudio、jiwer、accelerate並登入 Hugging Face Hub。 - Load data – 使用 Common Voice 土耳其語切分集 (
train+validation≈ 4 h) 和test切分集進行評估。 - Pre-process transcripts – 移除標點符號、標準化大小寫、替換變音符號,並建立字元級詞彙表 (包含單字分隔符
|、[UNK]和[PAD]在內的 37 個 token)。 - Create tokenizer & feature extractor – 從自定義詞彙表構建
Wav2Vec2CTCTokenizer和具有sampling_rate=16000的Wav2Vec2FeatureExtractor。 - Prepare dataset – 將音訊轉換為 16 kHz,使用 processor 提取
input_values,並將標籤編碼為 token ID。 - Configure model – 使用
ignore_mismatched_sizes=True載入facebook/mms-1b-all,重新初始化 adapter 層 (model.init_adapter_layers()),凍結基礎模型 (model.freeze_base_model()) 並啟用梯度檢查點。 - Define data collator – 使用自定義的
DataCollatorCTCWithPadding,分別對輸入和標籤進行填充,並使用-100遮蓋標籤填充部分。 - Training arguments – 範例設定:
per_device_train_batch_size=32、learning_rate=1e-3、num_train_epochs=4、fp16=True、push_to_hub=True。 - Run Trainer – 在單個 GPU 上訓練不到 30 分鐘即可完成。訓練日誌樣本顯示,400 步後 WER 從 ~0.28 降至 ~0.22。
- Save & share adapters – Adapter 權重儲存為 safe-tensor 檔案 (
adapter.<lang>.safetensors) 並上傳至 Hub。 - Inference – 使用
target_lang="tur"載入檢查點,設置 tokenizer 語言並執行前向傳播。範例轉錄結果與參考文本僅有微小的空格差異。
多語言 adapter 管理
- Adapter 與基礎模型並存儲 (例如
adapter.fra.safetensors)。 - 若要增加新語言,只需訓練一個新的 adapter 並將其推送到同一個 repository;基礎模型保持不變。
- 載入不同語言非常簡單:
model.load_adapter("swe") processor.tokenizer.set_target_lang("swe") - 同一個 repository 可以託管數十個 adapter,每個 adapter 都由其 ISO-639-3 代碼識別。
實證結果
| 模型 | 訓練步數 | 驗證 WER |
|---|---|---|
mms-1b-all adapter (土耳其語) |
100 | 0.280 |
| 200 | 0.232 | |
| 300 | 0.229 | |
| 400 | 0.223 |
這些結果超越了早前「Fine-tuning XLS-R on Multi-Lingual ASR」部落格文章中報告的 XLS-R 300 M 基準,證實了 MMS adapters 能更有效地將知識遷移到低資源語言。
對語言保存的意義
全球約 40% 的 3,000 種現存語言處於瀕危狀態 (Ethnologue)。MMS 已經支援如 Ari 和 Kaivi 等語言的轉錄。透過只需幾小時音訊即可實現快速、低成本的語言適應,MMS adapters 可以幫助社群建立書面語料庫,並為受威脅的語言維持數位存在感。
資源
- Official MMS paper: https://arxiv.org/abs/2305.13516
- MMS model hub: https://huggingface.co/models?other=mms
- Adapter demo: https://huggingface.co/spaces/facebook/MMS
- Transformer docs: https://huggingface.co/docs/transformers
- Related XLS-R blog: https://huggingface.co/blog/fine-tune-xlsr-wav2vec2
本教學使用的 notebook 可於此處取得:https://colab.research.google.com/github/patrickvonplaten/notebooks/blob/master/Fine_Tune_MMS_on_Common_Voice.ipynb。