WAV2LETTER ++:最快的開源語音識別系統

WAV2LETTER++: THE FASTEST OPEN-SOURCE SPEECH RECOGNITION SYSTEM

Vineel Pratap,Awni Hannun,徐連通,Jeff Cai,Jacob Kahn,Gabriel Synnaeve,Vitaliy Liptchinsky,Ronan Collobert

 

Facebook人工智能研究

摘要

本文介紹了最快的開源深度學習語音識別框架wav2letter ++。 wav2letter ++完全用C ++編寫,使用ArrayFire張量庫來實現最高效率。 在這裏,我們解釋了wav2letter ++系統的架構和設計,並將其與其他主要的開源語音識別系統進行了比較。 在某些情況下,wav2letter ++比用於語音識別的端到端神經網絡訓練的其他優化框架快2倍以上。 我們還表明,對於具有1億個參數的模型,wav2letter ++的訓練時間線性地擴展到64個GPU,這是我們測試的最高值。 高性能框架支持快速迭代,這通常是成功研究和對新數據集和任務進行模型調整的關鍵因素。

索引術語 - 語音識別,開源軟件,端到端

1.引言

在自動語音識別(ASR)的日益增長的興趣,開源軟件生態系統已經看到ASR系統和工具包,包括Kaldi的親liferation [1],ESPNet [2],OpenSeq2Seq [3]和Eesen [4] 。在過去的十年中,這些框架已經從基於隱馬爾可夫模型(HMM)和高斯混合模型(GMM)的傳統語音識別轉變爲基於端到端神經網絡的系統。許多最近的開源ASR工具包,包括本文提供的工具包,都依賴於基於字形而不是音素的端到端聲學建模。這種轉變的原因有兩方面:端到端模型明顯更簡單,HMM / GMM系統的準確性差距正在迅速縮小。 C ++是世界上第三大最受歡迎的編程語言1。它允許對高性能和關鍵系統進行完整的資源控制,此外,靜態類型通過在編譯時捕獲任何合同不匹配來幫助大型項目。此外,可以從幾乎任何編程語言輕鬆調用本機庫。然而,由於主流框架中缺乏定義明確的C ++ API,機器學習社區中C ++的採用已經停滯不前,C ++主要用於性能關鍵組件。隨着代碼庫變得越來越大,在腳本語言和C ++之間來回切換也變得麻煩且容易出錯。此外,如果提供足夠的庫,在現代C ++中進行開發並不比在腳本語言中慢得多。在本文中,我們介紹了第一個完全用C ++編寫的開源語音識別系統。通過使用現代C ++,我們不會犧牲編程的簡易性,同時保持編寫高效且可擴展的軟件的能力。在這項工作中,我們專注於ASR系統的技術方面,例如訓練和解碼速度以及可擴展性。本文的其餘部分結構如下。在第2節中,我們討論了wav2letter ++的設計。在第3節中,我們將簡要討論其他現有的主要開源系統,並在第4節中對其性能進行基準測試。

2. DESIGN

wav2letter ++的設計受到三個要求的驅動。首先,該工具包必須能夠有效地訓練包含數千小時語音的數據集上的模型。其次,表達和整合新的網絡架構,損失功能和其他核心操作應該是簡單的。第三,從模型研究到部署的路徑應該是直截了當的,需要儘可能少的新代碼,同時保持研究所需的靈活性。

 

2.1.ArrayFire Tensor Library

我們使用ArrayFire [5]作爲張量操作的主要庫。我們選擇ArrayFire有幾個原因。 ArrayFire是一個高度優化的張量庫,可以在多個後端執行,包括CUDA GPU後端和CPU後端。 ArrayFire還使用即時代碼生成將一系列簡單操作組合到單個內核調用中。這樣可以更快地執行內存帶寬綁定操作,並可以減少峯值內存使用。 ArrayFire的另一個重要特性是在陣列上構建和操作的簡單接口。與同樣支持CUDA的其他C ++張量庫相比,ArrayFire接口不那麼冗長,並且依賴於更少的C ++特性。

2.2數據準備和特徵提取

我們的特徵提取支持多種音頻文件格式(例如wav,flac ... / mono,stereo / int,float)和幾種特徵類型,包括原始音頻,線性縮放功率譜,log-Mels(MFSC)和MFCC。 我們使用FFTW庫來計算離散傅立葉變換[6]。 wav2letter ++中的數據加載在每次網絡評估之前即時計算功能。 這使得探索替代功能更簡單,允許動態數據擴充並使得部署模型更加容易,因爲完整的端到端管道可以從單個二進制文件運行。 爲了在訓練模型時提高效率,我們加載和解碼音頻並異步並行地計算功能。 對於我們測試的模型和批量大小,數據加載所花費的時間可以忽略不計。

2.3.Models

我們支持幾種端到端序列模型。每個模型都分爲網絡和標準。網絡僅是輸入的函數,而標準是輸入和目標轉錄的函數。雖然網絡始終具有參數,但標準的參數是可選的。這種抽象允許我們使用相同的訓練管道輕鬆訓練不同的模型。支持的標準包括連接主義時間分類(CTC)[7],原始的wav2letter AutoSegCriterion(ASG)[8],以及關注的序列到序列模型(S2S)[9,10]。 CTC標準沒有參數,而ASG和S2S標準都有可以學習的參數。此外,我們注意到添加新的序列標準特別容易,因爲ASG和CTC等損失函數可以在C ++中高效實現。我們支持廣泛的網絡架構和激活函數 - 這裏列出的內容太多了。對於某些操作,我們使用更高效的cuDNN操作擴展核心ArrayFire CUDA後端[11]。我們使用1D和2D概念以及cuDNN提供的RNN例程等。由於我們使用的網絡庫提供動態圖形構造和自動區分,因此構建新圖層或其他原始操作需要很少的努力。我們舉例說明如何構建和訓練具有二進制交叉熵損失的單層MLP(圖2),以演示C ++接口的簡單性。

圖2.示例:使用自動微分,使用二元交叉熵和SGD訓練的一個隱藏層MLP。

2.4培訓和規模

我們的培訓管道爲用戶提供了最大的靈活性,可以嘗試不同的功能,架構和優化參數。培訓可以以三種模式運行 - 訓練(平坦訓練),繼續(繼續檢查點狀態)和分叉(例如轉學習)。我們支持標準優化算法,包括SGD和其他常用的基於一階梯度的優化器。我們將wav2letter ++擴展爲具有數據並行,同步SGD的更大數據集。對於進程間通信,我們使用NVIDIA集體通信庫(NCCL2)2。爲了最大限度地減少進程之間的等待時間並提高單個進程的效率,我們在構建用於訓練的批處理之前對輸入長度的數據集進行排序[12]。

 

2.5.Decoding

wav2letter ++解碼器是一種波束搜索解碼器,具有多種優化功能以提高效率[13]。我們使用與[13]相同的解碼目標,其中包括語言模型和單詞插入術語的約束。

解碼器接口接受來自聲學模型的發射和(如果相關)轉換作爲輸入。 我們還給解碼器一個包含單詞字典和語言模型的Trie。 我們支持任何類型的語言模型,它公開我們的解碼器所需的接口,包括n-gram LM和任何其他無狀態參數LM。 我們在KenLM之上爲n-gram語言模型提供了一個瘦包裝器[14]。

3.相關工作

 

我們簡要概述了其他常用的開源語音識別系統,包括Kaldi [1],ES-PNet [2]和OpenSeq2Seq [3]。 Kaldi語音識別工具包[1]是迄今爲止最早的一種,它由一組獨立的命令行工具組成。 Kaldi支持HMM / GMM和基於混合HMM / NN的聲學建模,幷包括基於電話的配方。端到端語音處理工具包(ESPNet)[2]與Kaldi緊密集成,並將其用於特徵提取和數據預處理。 ESPNet使用Chainer [15]或PyTorch [16]作爲訓練聲學模型的後端。它主要是用Python編寫的,但是,遵循Kaldi的風格,高級工作流以bash腳本表示。在鼓勵系統組件分離的同時,這種方法缺乏靜態類型的面向對象編程語言在表達類型安全,可讀和直觀的接口方面的優勢。 ESPNet以基於CTC的[7]和基於注意力的編碼器 - 解碼器[10]實現以及結合兩種標準的混合模型爲特色。類似於ESPNet,OpenSeq2Seq [3]具有基於CTC和編碼器 - 解碼器模型的特徵,並且使用Tensor-Flow [17]而不是PyTorch作爲後端,用Python編寫。對於高級工作流,OpenSeq2Seq還依賴於調用Perl和Python腳本的bash腳本。 OpenSeq2Seq系統的一個顯着特點是它支持混合精度訓練。此外,ESPNet和OpenSeq2Seq都支持文本轉語音(TTS)模型。表1描述了這些開源語音處理系統的分類。如表所示,wav2letter ++是唯一完全用C ++編寫的框架,它(i)可以輕鬆集成到以任何編程語言虛擬實現的現有應用程序中;(ii)通過靜態類型和麪向對象編程更好地支持大規模開發; (iii)允許最高效率,如第4節所述。相比之下,動態類型語言(如Python)促進快速原型設計,但缺乏強制靜態類型通常會阻礙大規模開發。

 

4.EXPERIMENTS

在本節中,我們將在比較研究中討論ESPNet,Kaldi,OpenSeq2Seq和wav2letter ++的性能。 ASR系統是根據華爾街日報(WSJ)數據集[18]的大詞彙量任務進行評估的。我們測量訓練期間WSJ的平均紀元時間和平均話語解碼延遲。我們用於實驗的機器具有以下硬件配置:每臺機器在NVIDIA SXM2模塊上配備8個NVIDIA Tesla V100 Tensor Core GPU,內存爲16GB。每個計算節點都有2個Intel Xeon E5-2698 v4 CPU,支持40(2 20)個內核,80個硬件線程(“內核”),2.20GHz。所有機器都通過100Gbps的In-finiBand網絡連接。

4.1.Training

我們評估了擴展網絡參數和增加GPU使用數量的培訓時間。我們考慮了兩種類型的神經網絡架構:循環,具有3000萬個參數,以及純卷積,具有1億個參數,分別如圖4的頂部和底部圖表所示。對於OpenSeq2Seq,我們考慮float32以及混合精度float16訓練。對於兩個網絡,我們使用40維log-mel濾波器組作爲輸入,並使用CTC [7]作爲標準(基於CPU的實現)。對於Kaldi,我們使用LF-MMI [19]標準,因爲標準Kaldi配方中沒有CTC培訓。所有車型均採用SGD進行動力訓練。我們使用每GPU 4個批量大小的批量。每次運行僅限於爲每個GPU使用5個CPU內核。圖3更詳細地介紹了培訓管道的主要組成部分;使用單個GPU在整個紀元上平均處理時間。對於這兩種型號,wav2letter ++具有明顯的優勢,隨着我們擴展計算而增加。對於具有3000萬個參數的小型號,wav2letter ++比下一個最佳系統快15%以上,即使在單個GPU上也是如此。請注意,由於我們使用8臺GPU機器,因此對16,32和64 GPU的實驗涉及多節點通信。 ESPNet不支持開箱即用的多節點培訓。我們通過將PyTorch DistributedDataParallel模塊與NCCL2後端一起使用來擴展它。 ESPNet依賴於預先計算的輸入功能,而wav2letter ++和OpenSeq2Seq爲了靈活性而動態地計算功能。在某些情況下,混合精確訓練會使OpenSeq2Seq的紀元時間減少1.5倍以上。這是wav2letter ++可以在未來受益的優化。 LF-MMI的Kaldi配方不會同步每個SGD更新的梯度; perepoch時間仍然慢20倍以上。我們在圖4中沒有包括Kaldi,因爲標準(LF-MMI)和優化算法不容易比較。

  1. 訓練時間的比較(對數標度)。 上圖:具有30米參數的RNN,受DeepSpeech 2 [12]的啓發:2個空間卷積層,接着是5個雙向LSTM層,接着是2個線性層。 底部:具有100m參數的CNN,類似於[13]:18個時間卷積層,後面是1個線性層。

4.2解碼

wav2letter ++包括一個用C ++編寫的單程波束搜索解碼器(參見第2.5節)。我們將其與OpenSeq2Seq和ES-PNet中提供的其他光束搜索解碼器進行對比。 Kaldi不包括在內,因爲它不支持CTC解碼,並且實現了基於WFST的解碼器。我們爲每個解碼器提供相同的預先計算的發射,這些發射是由在LibriSpeech上訓練的完全卷積的OpenSeq2Seq模型Wave2Letter + 3生成的。這樣可以在相同模型下獨立測量性能。 4-gram LibriSpeech語言模型用於OpenSeq2Seq和wav2letter ++,因爲ESPNet不支持n-gram LM解碼。在表2中,我們報告解碼時間和峯值內存使用情況,單線程解碼,LibriSpeech dev-clean達到5.0%的WER,以及每個框架的最佳可用WER。對超參數進行了大量調整,以便報告的結果反映了報告的WER的最佳速度。 wav2letter ++不僅比同類解碼器的性能高出一個數量級,而且使用的內存也少得多。

 

5.結論

在本文中,我們介紹了wav2letter ++:一種用於開發端到端語音識別器的快速而簡單的系統。該框架完全用C ++編寫,這使得它能夠有效地訓練模型並執行實時解碼。與其他語音框架相比,我們的初始實現顯示了有希望的結果;雖然wav2letter ++可以繼續從進一步優化中受益。由於其簡單易用的界面,wav2letter ++非常適合作爲端到端語音識別快速研究的平臺。與此同時,我們保留了使用基於Python的ASR系統進行某些優化以縮小與wav2letter ++的差距的可能性。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章