PyTorch-Kaldi 語音識別工具包


翻譯:  https://arxiv.org/pdf/1811.07453.pdf

ABSTRACT

開源軟件的可用性在語音識別和深度學習的普及中發揮了重要作用。例如,Kaldi 現在是用於開發最先進的語音識別器的既定框架。 PyTorch 用於使用 Python 語言構建神經網絡,並且由於其簡單性和靈活性,最近在機器學習社區中引起了極大的興趣。


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


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

1 Introduction

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


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


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


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

2 The PyTorch-Kaldi Project

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

2.1 配置文件

主腳本將 INI 格式的配置文件作為輸入。配置文件在項目文檔中有完整描述,它由幾個部分組成。 [Exp] 部分指定了一些高級信息,例如用於實驗的文件夾,訓練時期的數量,隨機種子。它還允許用戶指定是否必須在 CPUGPU 或多個 GPU 上進行實驗。配置文件繼續使用 [dataset *] 部分,這些部分指定有關要素和標簽的信息,包括存儲它們的路徑,上下文窗口的特征 [23] 以及語音數據集必須在其中的塊數。分裂。神經模型在 [architecture *] 部分中描述,而 [model] 部分定義了這些神經網絡如何組合。后一部分利用了一個由 run_exp.py 腳本自動解釋的簡單元語言。最后,配置文件定義 [decoding] 部分中的解碼參數。

2.2 特征

使用 Kaldi 執行特征提取,其本身提供 c ++ 庫(例如,compute-mfcc-featscompute-fbank-featscompute-plp-feats)以有效地提取最流行的語音識別特征。計算出的系數存儲在二進制存檔(擴展名為. ark)中,然后使用從 kaldi-io-for-python 項目繼承的 kaldi-io 實用程序導入到 python 環境中。然后由函數 load-chunk 處理這些功能。 ,執行上下文窗口組合,混洗,以及均值和方差歸一化。如前所述,PyTorch-Kaldi 可以管理多個特征流。例如,用戶可以定義利用 MFCCFBANKPLP fMLLR [24] 系數組合的模型。

2.3 標簽

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

2.4 塊和小批量組合

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


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

2.5 DNN 聲學建模

每個小批量由 PyTorch 實現的神經網絡處理,該神經網絡將特征作為輸入,並作為輸出在依賴於上下文的電話狀態上的一組后驗概率。 該代碼旨在輕松插入自定義模型。 如圖 2 中報告的偽代碼中所報告的,可以通過在 neural_nets.py 中添加新類來簡單地定義新模型。 該類必須由初始化方法和定義要執行的計算的正向方法組成,初始化方法通過初始化方法指定參數。

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

2.6 解碼和評分

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

3 實驗設置

在以下子部分中,描述了實驗活動所采用的語料庫和 DNN 設置。


3.1 語料庫和任務

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


為了在更具挑戰性的情景中驗證我們的模型,還在 DIRHA-English 數據集 444 的遠距離談話條件下進行了實驗。該數據集由語言數據聯盟(LDC)分發。 [36,37]。 訓練基於原始的 WSJ-5k 語料庫(由 83 名發言者發出的 7318 個句子組成),這些語句被一系列在家庭環境中測量的脈沖響應所污染 [37]。 測試階段是使用數據集的實際部分進行的,其中包括由六位美國本土人士在上述環境中發出的 409 WSJ 句子。


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


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

3.2 DNN 設置

實驗考慮了不同的聲學特征,即 39 MFCC13 個靜態 +Δ+ΔΔ),40 個對數濾波器組特征(FBANKS),以及 40 fMLLR 特征 [24](根據 s5 配方中的報告提取) Kaldi),使用 25 ms 的窗口計算,重疊為 10 ms


根據 Glorot 的方案 [38] 初始化前饋模型,而使用正交矩陣初始化復發權重 [39]。循環 dorpout 被用作正則化技術 [40]。正如 [41,42] 中提出的那樣,僅對前饋連接采用批量歸一化。使用運行 24 個時期的 RMSprop 算法完成優化。在每個時期之后監測開發組的表現,並且當相對性能改善低於 0.1%時學習率減半。在開發數據集上調整模型的主要超參數(即,學習速率,隱藏層數,每層隱藏神經元,丟失因子以及雙正則化項λ)。

4 基線

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


1 顯示了使用不同特征的幾種前饋和重復模型獲得的性能。 為了確保架構之間的更准確的比較,針對每個模型和特征進行了五個改變初始化種子的實驗。 因此,該表報告了所有實驗的平均電話錯誤率(PER555 標准偏差范圍在 0.15 0.2 之間。

結果表明,正如預期的那樣,由於揚聲器適應過程,fMLLR 功能優於 MFCC FBANKs 系數。 循環模型明顯優於標准 MLP 模型,特別是在使用 LSTMGRU Li-GRU 架構時,通過乘法門有效地解決了梯度消失問題。 使用 Li-GRU 模型 [31] 獲得最佳結果(PER = 14.2%),該模型基於單個門,因此比標准 GRU 節省了 33%的計算。

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


到目前為止討論的實驗基於單個神經模型。在表 3 中,我們將最佳 Li-GRU 系統與更復雜的架構進行比較,該架構基於由一系列特征提供的前饋和后續模型的組合。據我們所知,后一種系統實現的 PER = 13.8%會在 TIMIT 測試集上產生最佳發布的性能。

以前的成就是基於用 Kaldi 計算的標准聲學特征。 但是,在 PyTorch-Kaldi 中,用戶可以使用自己的功能。 表 4 顯示了通過標准 FBANKs 系數或原始聲波波形直接饋送的卷積模型所獲得的結果。基於原始樣本的標准 CNN 與由 FBANK 特征饋送的標准 CNN 類似地執行。 使用 SincNet [33] 可以略微提高性能,這是第一次突出顯示處理語音識別原始波形的有效性。

我們現在將實驗驗證擴展到其他數據集。 在這方面,表 5 顯示了在 DIRHACHiME Librispeech100h)數據集上取得的性能。該表始終顯示出使用 Li-GRU 模型的更好性能,證實了我們之前在 TIMIT 上取得的成就。 DIRHA CHiME 的結果顯示了所提出的工具包在嘈雜條件下的有效性。 特別是,DIRHA 代表了一項非常具有挑戰性的任務,其特點是存在相當大的噪音和混響。 在此數據集上獲得的 WER = 23.9%表示迄今為止在單麥克風任務上發布的最佳性能。 最后,使用 Librispeech 獲得的性能在所考慮的 100 小時子集上優於相應的 p - 范數 Kaldi 基線(WER=6.5%)。

結論

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


目前版本的 PyTorch-Kaldi 已經公開發布,並附有詳細的文檔。該項目仍處於初始階段,我們邀請所有潛在的貢獻者參與其中。我們希望建立一個足夠大的開發人員社區,以逐步維護,改進和擴展我們當前工具包的功能。在未來,我們計划增加在我們的框架中編碼的預先實現的模型的數量,並且我們希望通過集成神經語言模型訓練以及對端到端 ASR 系統的適當支持來擴展當前項目。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM