PYTORCH-KALDI語音識別工具包

                             PYTORCH-KALDI語音識別工具包

                                                         Mirco Ravanelli1,Titouan Parcollet2,Yoshua Bengio1 *

                                                                Mila, Universit´e de Montr´eal , CIFAR Fellow

                                                                                   LIA, Universit´e d’Avignon

目錄

                             PYTORCH-KALDI語音識別工具包

摘要

1.引言

2. PYTORCH-KALDI項目

2.1 配置文件

2.2特徵

2.3 標籤

2.4 塊和小批量組合

2.5 DNN聲學建模

2.6 解碼和評分

3.實驗設置

3.1語料庫和任務

3.2 DNN設置

4.基線

5結論

6.致謝


本內容部分原創,因作者才疏學淺,偶有紕漏,望不吝指出。本內容由靈聲訊音頻-語音算法實驗室整理創作,轉載和使用請與“靈聲訊”聯繫,聯繫方式:音頻/識別/合成算法QQ羣(696554058)


 

摘要

    開源軟件的實用性在主流語音識別和深度學習的普及中扮演着重要的角色。例如,Kaldi是目前用於開發最先進的語音識別器的既定框架。 PyTorch被用來採用Python語言構建神經網絡,並且由於其簡單性和靈活性,最近在機器學習社區中產生了巨大的興趣。

    PyTorch-Kaldi項目旨在彌合這些流行工具包之間的差距,且試圖繼承Kaldi的效率和PyTorch的靈活性。 在這些軟件之間它不僅接口簡單,而且還嵌入了一些用於開發現代語音識別器的有用功能。例如,該代碼專門設計用於自然插入用戶定義的聲學模型。作爲替代方案,用戶可以利用多個預先實現的神經網絡,這些神經網絡可以使用直觀的配置文件進行定製。 PyTorch-Kaldi支持多種特徵和標籤流以及神經網絡的組合,可以使用複雜的神經架構。該工具包與豐富的文檔一起公開發布,旨在在本地或HPC羣集上正常工作。

    在多個數據集和任務上進行的實驗表明,PyTorch-Kaldi可以有效地用於開發現代最先進的語音識別器。

關鍵詞:語音識別,深度學習,Kaldi,PyTorch。


1.引言

    在過去幾年中,我們目睹了自動語音識別(ASR)技術的逐步改進和成熟[1,2],這些技術已經達到了前所未有的性能水平,現在已被全球數百萬用戶使用。

    深度學習正在發揮這一技術突破的關鍵作用[3],這有助於戰勝先前基於高斯混合模型(GMM)的語音識別器。除了深度學習外,其他因素在該領域的發展中也發揮了作用。許多與語音相關的項目,如AMI [4](數據集名稱)和DIRHA [5]以及CHiME [6],Babel和Aspire等語音識別挑戰,都極大地促進了ASR的發展。 Librispeech [7]等大型數據集的公開發布也爲建立通用的評估框架和任務發揮了重要作用。

    在其他因素中,開源軟件的開發,如HTK [8],Julius [9],CMU-Sphinx,RWTH-ASR [10],LIA-ASR [11]以及最近的Kaldi工具包[12]進一步幫助推廣ASR,使得新型ASR應用研究和開發變得更加容易。

     Kaldi目前是最受歡迎的ASR工具包。它依賴於有限狀態轉換器(FST)[13],併爲有效地實施最先進的語音識別系統提供了一組C ++庫。此外,該工具包包括一全套使用方法,涵蓋了所有最流行的語音語料庫。在開發ASR這種特定軟件的同時,一些通用的深度學習框架,如Theano [14],TensorFlow [15]和CNTK [16],已經在機器學習社區中得到普及。這些工具包在神經網絡設計中提供了極大的靈活性,可用於各種深度學習應用。

    PyTorch [17]是一個新型的python包,它通過適當的自動梯度計算程序實現了基於GPU的張量計算,並促進了神經架構的設計。 它的一個有趣特性在於其現代和靈活的設計,即自然就支持動態神經網絡。實際上,計算圖是在運行時動態構建的,而不是靜態編譯的。

    PyTorch-Kaldi項目的重點是在彌合Kaldi和PyTorch1之間的間隙。我們的工具包在PyTorch中實現聲學模型,同時使用Kaldi執行特徵提取,標籤/對齊計算和解碼,使其適合開發最先進的DNN-HMM語音識別器。 PyTorch-Kaldi本身支持多種DNN,CNN和RNN模型。還支持深度學習模型,聲學特徵和標籤之間的組合,從而能夠使用複雜的神經架構。例如,用戶可以在CNN,LSTM和DNN之間使用級聯,或者並行運行共享一些隱藏層的多個模型。用戶還可以探索不同的聲學特徵,上下文持續時間,神經元激勵(例如,ReLU,leaky ReLU),標準化(例如,batch [18]和layer normalization[19]),成本函數,正則化策略(例如,L2,丟失[20]通過簡單的配置文件編輯,優化算法(例如,Adam [21],RMSPROP)和ASR系統的許多其他參數。

    該工具包旨在使用戶定義的聲學模型的集成儘可能簡單。在實踐中,用戶即使不完全熟悉複雜的語音識別流程,也可以在PyTorch-Kaldi中嵌入他們的深度學習模型並進行ASR實驗。該工具包可以在本地計算機或者HPC集羣上執行計算,並支持多GPU訓練,支持恢復策略和自動數據分塊。

在幾個數據集和任務上進行的實驗表明,PyTorch-Kaldi可以輕鬆開發出具有競爭力的最先進的語音識別系統。

2. PYTORCH-KALDI項目

最近使用python語言開發了一些其他語音識別工具包。例如,PyKaldi [22]是一個易於使用的Python包,它封裝了c++寫的Kaldi和OpenFst庫。然而,與我們的工具包不同,PyKaldi的當前版本並沒有提供幾個以前實現的和已經使用的神經網絡模型。 另一個python項目是ESPnet [23]。 ESPnet是一個端到端的語音處理工具包,主要側重於端到端語音識別和端到端的文本到語音轉換。 與我們項目的主要區別在於當前版本的PyTorch-Kaldi實現了混合DNN-HMM語音識別器。(www.github.com/mravanelli/pytorch-kaldi/

                                                                  

                                                                                         圖1:PyTorch-Kaldi架構框圖

      PyTorch-Kaldi採用的架構框圖如圖1所示。主要腳本run_exp.py是用python編寫的,用於管理ASR系統中涉及的所有階段,包括特徵和標籤提取,訓練,驗證,解碼和評分。該工具包將在以下小節中詳細介紹。

2.1 配置文件

主腳本將INI格式中的配置文件作爲輸入,它由幾部分組成。 其中,[Exp]部分指定了一些高級信息,例如用於實驗的文件夾,訓練時期的數量,隨機種子。它還允許用戶指定是否必須在CPU,GPU或多個GPU上進行實驗。配置文件繼續用[dataset*]部分表示,它用於指定有關要素和標籤的信息,包括存儲它們的路徑,上下文窗口的特徵[24]以及必須分割語音數據集的塊數。神經網絡模型在[architechure*]部分,而[model]部分定義了這些神經網絡的組合方式。後一部分開發了一種由run_exp.py腳本自動解釋的簡單元語言。 最後,在[decoding]部分中定義瞭解碼參數的配置文件

2.2特徵

     使用Kaldi原生提供的C++庫(例如,compute-mfcc-feats,compute-fbank-feats,compute-plp-feats)執行特徵提取,有效地提取最流行的語音識別特徵。計算出的係數存儲在二進制存檔(擴展名爲.ark)中,然後使用從kaldi-io-for-python項目繼承的kaldi-io實用程序導入到python環境中。然後,通過函數load-chunk處理這些特徵,該函數執行上下文窗口組合,移動以及均值和方差歸一化。如前所述,PyTorch-Kaldi可以管理多個特徵流。例如,用戶可以定義利用MFCC,FBANK,PLP和fMLLR [25]係數組合的模型。

2.3 標籤

    用於訓練聲學模型的主要標籤源自語音特徵與音素狀態序列之間的強制對齊過程,而這種序列是由Kaldi用語音決策樹計算的且依賴於上下文。爲了實現多任務學習,PyTorch-Kaldi支持多個標籤。例如,可以聯合加載上下文相關和上下文無關的任務,並使用後者執行單音素正則化[26,27]。也可以使用基於執行不同任務的神經網絡生態系統的模型,如在語音增強和語音識別之間的聯合訓練的背景下[28,29]或在最近提出的深度神經合作網絡的背景下進行的模型。

2.4 塊和小批量組合

     PyTorch-Kaldi自動將整個數據集拆分爲多個塊,這些塊由從完整語料庫中隨機抽樣的標籤和特徵組成。然後將每個塊存儲到GPU或CPU存儲器中並由神經訓練算法run_nn.py運行處理。該工具包在每個時期動態地組成不同的塊。然後從它們中獲得一組小批量的數據集。小批量集合由少數用於梯度計算和參數優化的訓練樣例組成。

     小批量集的聚集方式很大程度上取決於神經網絡的類型。對於前饋模型,小批量集由隨機移動特徵和從塊中採樣的標籤組成。對於週期性網絡,小批量集合必須由完整的句子組成。然而,不同的句子可能具有不同的持續時間,使得製作相同大小的小批量集合需要零擴充。 PyTorch-Kaldi根據它們的長度按升序對語音序列進行排序(即,首先處理短句)。這種方法最大限度地減少了零擴充的需要,並證明有助於避免批量標準化統計數據的可能偏差。此外,已經證明有效果的是能略微提高性能並改善梯度的數值穩定性。

2.5 DNN聲學建模

    每個小批量集由PyTorch實現的神經網絡來處理,該神經網絡將特徵作爲輸入,並將依賴於上下文的音素狀態上的一組後驗概率作爲輸出。該代碼旨在輕鬆插入自定義模型。正如圖2中公開的僞代碼所寫的那樣,可以通過在neural_nets.py中添加新類來簡單地定義新模型。該類必須由通過初始化指定參數的初始化方法,以及定義要執行的計算的正向方法組成。

 (3 www.github.com/vesis84/kaldi-io-for-python )

                                                     

    作爲替代方案,在工具包中原生地實現了許多預先定義的最先進的神經模型。當前版本支持標準MLP,CNN,RNN,LSTM和GRU模型。此外,它支持一些先進的循環架構,例如最近提出的Light GRU [31]和雙正則化RNN [32]。 SincNet模型[33,34]也用於直接從語音波形實現語音識別。可以用實現隨機搜索算法的程序來調整模型的超參數(例如學習速率,神經元數量,層數,丟失因子等)[35]。

2.6 解碼和評分

    在基於反饋HMM的Kaldi解碼器之前,由神經網絡產生的聲學後驗概率被它們的先驗概率歸一化了。解碼器將聲學分數與由n-gram語言模型導出的語言概率合併,並嘗試使用波束搜索算法檢索在語音信號中發出的單詞序列。使用NIST SCTK評分工具包計算最終的字錯誤率(WER)分數。

3.實驗設置

    在以下小節中,描述了實驗採用的語料庫和DNN模型設置。

3.1語料庫和任務

    第一組實驗是使用TIMIT語料庫進行的,考慮到標準音素識別任務(與Kaldi s5匹配[12]一致)。

    爲了在更具挑戰性的情景中驗證我們的模型,還在DIRHA-English數據集[36,37]的遠場談話條件下進行了實驗。訓練基於最初的WSJ-5k語料庫(由83名說話者的7,138個句子組成),這些語句受到在家庭環境中測量的一組衝激響應的污染[37]。測試階段使用了數據集的實際部分進行的,其中包括由上述六位美國本土人士在上述環境中發出的409個WSJ句子。

    使用CHiME 4數據集[6]進行了額外的實驗,該數據集基於在四個嘈雜環境(公共汽車,咖啡館,步行區和街道交叉點)中記錄的語音數據。訓練集由43個690個嘈雜的WSJ句子組成,這些句子由五個麥克風(安排在平板電腦上)錄製,並由總共87個揚聲器發出。在這項工作中考慮的測試集ET-real基於由四個發言者發出的1,320個真實句子,而子集DT-real已用於參數優化。 CHiME實驗是基於單通道的設置[6]。

     最後,使用LibriSpeech [7]數據集進行實驗。我們使用由100小時組成的訓練子集和用於參數搜索的dev-clean集。使用繼承自Kaldi s5方法的fglarge解碼圖在test-clean部分上報告測試結果。

                                               

3.2 DNN設置

    實驗考慮了不同的聲學特徵,即39個MFCC(13個靜態+Δ+ΔΔ),40個對數濾波器組特徵(FBANKS),以及40個fMLLR特徵[25](根據Kaldi中s5所述方法進行提取),使用25 ms的窗口(幀長)計算,重疊(幀移)爲10 ms。根據Glorot的方案[38]初始化前饋模型,而使用正交矩陣初始化週期權重[39]。週期性丟失被用作正則化技術[40]。正如[41]中提出的那樣,僅對前饋連接採用批量歸一化。使用運行24個時期的RMSprop算法完成優化。在每個時期之後監測開發組的表現,並且當相對性能改善低於0.1%時,學習率減半。在開發數據集上調整模型的主要參數(即,學習速率,隱藏層數,每層隱藏神經元,丟失因子以及雙正則化項λ)。

4.基線

    在本節中,我們將討論使用TIMIT,DIRHA,CHiME和LibriSpeech數據集獲得的基線。作爲對PyTorch-Kaldi工具包主要功能的展示,我們首先報告了對TIMIT進行的實驗驗證。

表1顯示了使用不同特徵的幾個前饋和重複模型獲得的性能。爲了確保架構之間更準確的比較,針對每個模型和特徵進行了不同的初始化種子的五個實驗。該表因此報告平均音素錯誤率(PER)5。結果表明,正如預期的那樣,由於揚聲器適應過程,fMLLR功能優於MFCC和FBANKs係數。循環模型顯着優於標準MLP模型,特別是在使用LSTM,GRU和Li-GRU架構時,通過乘法門(multiplicative gates)有效地解決梯度消失問題。使用Li-GRU模型[31]獲得最佳結果(PER = 14.2%),該模型基於單個門,因此比標準GRU節省了33%的計算。

 

                                           

    表2詳細介紹了PyTorch-Kaldi中用於改善ASR性能的一些常用技術的影響。第一行(基線)報告使用基本的循環模型實現的性能,其中不採用諸如壓差和批量歸一化的強大技術。第二行突出顯示在訓練期間逐漸增加序列長度時實現的性能增益。在這種情況下,我們通過在100步(即,大約1秒的語音)截斷語音句子開始訓練,並且逐漸地在每個時期加倍最大序列持續時間。這種簡單的策略通常可以提高系統性能,因爲它鼓勵模型首先關注短期依賴關係,並且只在稍後階段學習長期關聯。第三行顯示了添加重複丟失時所實現的改進。與[40,41]類似,我們對所有時間步驟應用相同的壓差掩模以避免梯度消失問題。相反,第四行顯示了從批量標準化得到的好處[18]。最後,最後一行顯示了在應用單音正則化時所達到的性能[27]。在這種情況下,我們通過兩個softmax分類器採用多任務學習策略:第一個估計依賴於上下文的狀態,而第二個預測單音目標。正如[27]中所觀察到的,我們的結果證實該技術可以成功地用作有效的正則化器。

    到目前爲止討論的實驗是基於單個神經元的模型。在表3中,我們將最好的Li-GRU系統與基於前饋和循環模型組合的更復雜的架構進行比較,這些模型由一系列特徵串聯。據我們所知,後一系統實現的PER = 13.8%會在TIMIT測試集上產生最佳公開的性能。

    以前的成就是基於Kaldi計算的特徵。但是,在PyTorch-Kaldi中,用戶可以使用自己的功能。表4顯示了通過標準FBANKs係數或直接原始波形饋送的卷積模型獲得的結果。基於原始樣本的標準CNN與由FBANK特徵饋送的CNN類似地執行。 SincNet [33]觀察到性能提升,其語音識別的有效性首次突出顯示。

                                                  

     我們現在將實驗驗證擴展到其他數據集。 在這方面,表5顯示了在DIRHA,CHiME和Librispeech(100h)數據集上實現的性能。 該表始終顯示了Li-GRU模型的更好性能,證實了我們之前在TIMIT上取得的成就。 DIRHA和CHiME的結果顯示了所提出的工具包在噪聲條件下的有效性。 爲了進行比較,在egs / chime4 / s5中提出了最佳Kaldi基線1ch的WER(%)= 18.1%。使用ESPnet訓練的端到端系統達到WER(%)= 44.99%,確認端到端語音識別對聲學條件的挑戰是多麼重要。 DIRHA代表了另一項非常具有挑戰性的任務,其特點是存在相當大的噪音和混響。在此數據集上獲得的WER = 23.9%表示迄今爲止在單麥克風任務上發佈的最佳性能。最後,使用Librispeech獲得的性能優於所考慮的100小時子集的相應p-norm的Kaldi基線(​​W ER = 6.5%)。

5結論

    本文描述了PyTorch-Kaldi項目,這是一項旨在彌合Kaldi和PyTorch之間間隙的新舉措。該工具包核心是使ASR系統的開發更簡單,更靈活,允許用戶輕鬆插入其定製的聲學模型。 PyTorch-Kaldi還支持神經網絡架構,功能和標籤的組合,允許用戶使用複雜的ASR流水線。實驗證實,PyTorch-Kaldi可以在一些流行的語音識別任務和數據集中實現最先進的結果。

目前版本的PyTorch-Kaldi已經公開發布,並附有詳細的文檔。該項目仍處於初始階段,我們邀請所有潛在的貢獻者參與其中。我們希望建立一個足夠大的開發人員社區,以逐步維護,改進和擴展我們當前工具包的功能。未來,我們計劃增加預先實施的模型數量,支持神經語言模型訓練/重新訓練,序列判別訓練,在線語音識別以及端到端訓練。

6.致謝

我們要感謝Maurizio Omologo,Enzo Telk和Antonio Mazzaldi的有益評論。這項研究部分得到了Calcul Qu'ebec和Compute Canada的支持。


本內容部分原創,因作者才疏學淺,偶有紕漏,望不吝指出。本內容由靈聲訊音頻-語音算法實驗室整理創作,轉載和使用請與“靈聲訊”聯繫,聯繫方式:音頻/識別/合成算法QQ羣(696554058)


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