使用 Hugging Face Transformers 微調 Wav2Vec2 進行英文 ASR
總覽
Hugging Face 已經展示,Wav2Vec2 模型可以透過使用極少量的標註資料進行微調,以達成競爭力的結果,適用於英文自動語音識別(ASR)。透過利用預訓練的 checkpoint 並使用 Connectionist Temporal Classification (CTC) 進行微調,開發者可以構建端到端的 ASR 系統,而無需立即依賴單獨的語言模型。
Wav2Vec2 架構與預訓練
Wav2Vec2 是一個專為 ASR 設計的預訓練模型,能從原始音訊學習語音表示。該模型由 Alexei Baevski、Michael Auli 和 Alex Conneau 在 2020 年 9 月發布。
對比預訓練
Wav2Vec2 使用對比預訓練目標來從未標註的語音(超過 50,000 小時)中學習。類似於 BERT 的遮蔽語言建模,該模型在將特徵向量傳遞給 transformer 網路之前會隨機遮蔽特徵向量,以學習上下文語音表示。
資料效率
預訓練使得模型能在僅有少量標註資料的情況下達到高效能。例如,僅使用 10 分鐘的標註資料,Wav2Vec2 在 LibriSpeech 的乾淨測試集上可將詞錯誤率(WER)降低至 5% 以下。
英文 ASR 的微調流程
微調 Wav2Vec2 透過在 transformer 區塊上添加一個線性層,將預訓練的上下文表示映射到特定的轉錄詞彙表。
分詞與詞彙表
因為最終線性層的輸出大小取決於標註資料集,而非預訓練任務,因此必須建立自訂詞彙表。針對 Timit 資料集,此過程包括:
- 將文字正規化為小寫。
- 移除不對應於獨立聲音單位的特殊字元(例如
,.?!;:)。 - 從訓練集和測試集中提取所有不同的字母。
- 添加詞彙分隔符號 (
|)、未知標記 ([UNK]) 和填充標記 ([PAD]),其中填充標記作為 CTC 的「空白標記」。
特徵提取
語音訊號必須透過取樣進行離散化。Wav2Vec2 期望輸入取樣率為 16kHz,與 LibriSpeech 和 LibriVox 的取樣率相匹配。Wav2Vec2FeatureExtractor 處理原始語音訊號,確保其為零均值單位方差正規化。
資料準備
使用 Wav2Vec2Processor,音訊檔案會被載入並重新取樣至 16kHz。該處理器同時負責音訊輸入的特徵提取以及目標文本標籤的分詞。
使用 Connectionist Temporal Classification (CTC) 進行訓練
Wav2Vec2 透過 CTC 進行微調,CTC 是一種針對輸入長度(音訊幀)遠大於輸出長度(文字字符)的序列到序列問題所設計的演算法。
訓練配置
為了優化訓練,採用以下技術配置:
- 資料整理器: 使用專門的
DataCollatorCTCWithPadding來動態分別填充input_values和labels,因為它們屬於不同的模態。 - 凍結特徵提取器: 用於初始特徵提取的 CNN 層會被凍結 (
model.freeze_feature_extractor()),因為它們在預訓練期間已經得到充分訓練。 - 梯度檢查點: 已啟用以節省 GPU 記憶體。
- 依長度分組: 將長度相近的訓練樣本分組在一起,以減少填充標記的數量並提高效率。
評估指標
主要使用的指標是詞錯誤率(WER)。模型對每個時間步預測 logit 向量,並取 argmax 以決定最可能的字符。在 CTC 解碼過程中,連續相同的標記會被分組,而空白標記用於分隔單詞中相同的字符。
結果與影響
在對 Timit 資料集(5 小時訓練資料)進行「base」 Wav2Vec2 模型的微調示範中,模型在測試集上達到了 22.1% 的詞錯誤率(WER)。
錯誤分析
預測結果常與目標文本在聲音上相似,但會包含拼寫或語法錯誤。這是在沒有語言模型來限制輸出為有效語言模式的獨立聲學模型下的預期情況。
CTC 性能
該模型展示了對語速的不變性。由於 CTC 允許模型在多個幀上重複相同的標記或插入空白標記,因此轉錄結果在音訊信號長度變化時保持一致。