大型檔案的自動語音辨識(ASR)— 使用 Transformers 中的 Wav2Vec2

Hugging Face 針對 Wav2Vec2 中 Connectionist Temporal Classification(CTC)架構的特性,提出了一種在任意長度音訊檔案以及即時推論時執行高品質自動語音辨識(ASR)的方法。

Transformers 中序列長度的挑戰

Wav2Vec2 是 Meta AI Research 發布的熱門語音辨識預訓練模型,基於 Transformer 架構。Transformer 的根本限制在於其序列長度容量有限,主要是因為注意力機制相對於序列長度的 $O(n^2)$ 複雜度。

在未進行切分的情況下嘗試在非常長的音訊檔案(例如一小時的錄音)上執行 Wav2Vec2,會導致記憶體耗盡與程式崩潰,即使是在 NVIDIA A100 這類高階 GPU 上亦是如此。

簡單切分及其限制

簡單切分是指將音訊檔案切成較短、固定長度的樣本(例如每段 10 秒),分別進行推論,最後再拼接成完整文字。雖然計算效率高,但此方法常產生較差的結果,因為模型在切分邊界缺乏必要的上下文,導致音訊被切斷的地方推論品質下降。

常見的緩解做法——例如只在靜音時切分或使用額外的語音活動偵測模型——並不完全可靠,因為音訊可能包含連續語音或長時間噪音。

帶步幅的切分(Chunking with Stride)

Wav2Vec2 採用 CTC 演算法,將每個音框映射為單一字母預測(logit)。Hugging Face 利用此特性實作「帶步幅的切分」,使長檔案的 ASR 更具韌性:

  1. 重疊切片:在重疊的切片上執行推論,確保模型在每個切片的中心擁有足夠的上下文。
  2. Logit 丟棄:在切片邊緣的 logits(通常推論品質最低的部位)會被丟棄。
  3. Logit 鏈接:將剩餘的中心 logits 鏈接起來,重建的文字稿與在完整音訊上直接執行模型的結果非常接近。

transformers pipeline 中,只需加入 chunk_length_s 參數即可啟用此功能。使用者還可以透過 stride_length_s 自訂重疊長度,該參數接受左、右步幅的元組(預設情況下,步幅為每側切片長度的 1/6)。

與語言模型(LM)增強的相容性

將語言模型(LM)加入 Wav2Vec2 以提升字錯率(WER)且不需額外微調的支援,同樣適用於此步幅技術。因為 LM 直接作用於 logits,切分與步幅的流程可直接套用於經 LM 增強的模型,無需額外修改。

即時推論能力

由於 Wav2Vec2 為單次通過的 CTC 模型,在 GPU 上具備極高效率。這種效率使得即時推論成為可能:只要將資料隨到達即送入 pipeline。透過對連續切片(例如 10 秒切片、1 秒步幅)套用步幅,模型即可在使用者說話的同時提供即時文字稿,無需等完整切片處理完畢才顯示文字。

Sources

相關