1. 程式人生 > >wav2letter++簡介:深度學習語音識別系統

wav2letter++簡介:深度學習語音識別系統

語音識別系統是深度學習生態中發展最成熟的領域之一。當前這一代的語音識別模型基本都是基於遞迴神經網路(Recurrent Neural Network)對聲學和語言模型進行建模,以及用於知識構建的計算密集的特徵提取流水線。雖然基於RNN的技術已經在語音識別任務中得到驗證,但訓練RNN網路所需要的大量資料和計算能力已經超出了大多數機構的能力範圍。最近,Facebook的AI研究中心(FAIR)發表的一個研究論文,提出了一種新的單純基於卷積神經網路(Convolutional Neural Network)的語音識別技術,而且提供了開源的實現wav2letter++,一個完全基於卷積模型的高效能的語音識別工具箱。

在深度學習領域,在語音識別系統中使用CNN並不新鮮,但是大部分應用都侷限於特定的任務,而且通常與RNN結合起來構成完整的系統。但是當前CNN領域的研究表明只使用卷積神經網路也有潛力在語音識別的所有領域達到最高水平,例如機器翻譯、存在長程依賴的語言模型的語音合成等。CNN模型與其他技術的最大優勢在於它不需要額外而且昂貴的特徵提取計算就可以天然地對諸如MFCC之類的標準特徵計算進行建模。因此長久以來,深度學習社群一直都期待著在語音識別工作流中完全使用CNN,因為這要比目前的基於RNN的模型更高效也更富有競爭力。

全卷積語音識別架構

經過很多次實驗,FAIR團隊決定依賴於一個整合多個不同CNN層的架構來實現端對端的語音識別流水線,從音訊波形處理到語言轉錄。該架構基於下圖所示的散射模型:

模型的第一層CNN用來處理原始音訊並提取一些關鍵特徵;接下來的卷積聲學模型是一個具有門限單元的CNN,可通過訓練從音訊流中預測字母;卷積語言模型層則根據來自聲學模型的輸入生成候選轉錄文字;最後環節的集束搜尋(Beam-Search)編碼器則完成最終的轉錄單詞序列。

FAIR團隊將其全卷積語音識別模型與最先進的模型進行了對比,它可以用少的多的訓練資料達到基本一致的效能,測試結果令人滿意因此FAIR團隊決定開源該演算法的初始實現。

Wav2letter++

雖然深度學習技術近期的進步促進了自動語音識別(Automatic Speech Recognition)框架和工具箱的增加。然而,全卷機語音識別模型的進步,激勵了FAIR團隊建立wav2letter++,一個完全使用C++實現的深度語音識別工具箱。wav2letter++的核心設計基於以下三個關鍵原則:

  1. 實現在包含成千上萬小時語音資料集上的高效模型訓練
  2. 簡單可擴充套件模型,可以接入新的網路架構、損失函式以及其他語音識別系統中的核心操作
  3. 平滑語音識別模型從研究到生產部署的過渡

基於以上原則,wav2letter++實現瞭如下圖所示的非常直白的架構:

為了更好地理解wav2letter++的架構,有以下幾點值得著重指出:

  • ArrayFire張量庫:wav2letter++使用ArrayFire作為張量操作的基礎庫。ArrayFire支援硬體無關的高效能並行建模,可以執行在多種後端上,例如CUDA GPU後端或CPU後端
  • 資料預備和特徵提取:wav2letter++支援多種音訊格式的特徵提取。框架可以在每次網路評估之前即時計算特徵,並且通過非同步平行計算來實現模型訓練的效率最大化
  • 模型:wav2letter++包含一組豐富的端對端序列模型,也包含眾多網路架構以及啟用函式。
  • 可擴充套件的訓練:wav2letter++支援三種主要的訓練模式:
    • train :從零開始訓練
    • continue :從檢查點狀態繼續訓練(continuing with a checkpoint state),
    • fork :可用於遷移學習。訓練流水線使用並行資料、同步隨機梯度下降以及基於NVIDIA的叢集通訊庫,可以無縫伸縮。
  • 解碼:wav2letter++解碼器是基於前面提到的全卷積架構中的集束搜尋解碼器,它負責輸出最終的音訊轉錄文字

Wav2letter++實戰

FAIR團隊將wav2letter++與其他語音識別進行了對比測試,例如ESPNet、Kaldi和OpenSeq2Seq。實驗基於著名的華爾街日報CSR資料集。初始結果表明wav2letter++在訓練週期中的任一方面都完勝其他方案。

完全基於CNN的語音識別系統當然是一個有意思的實現途徑,它可以優化對計算能力和訓練資料的需求。Facebook的wav2letter++實現已經被視為當前最快的語音識別框架之一。我們將在不久的未來看到該領域越來越多的進步。

匯智網翻譯整理,轉載請標明出處:Introducing Wav2letter++