劉 瓊
(西安航空職業技術學院通識教育學院,陜西西安 710089)
關鍵字:開源語音識別工具;HTK;Spinx;Kaldi;語言模型;聲學模型
在過去的幾十年里,大量的連續語音識別系統被開發出來。一方面,諸如AT&T Watson、Microsoft Speech Server、谷歌Speech API和Nuance識別器等十分成熟的語音識別系統已經得到較為廣泛的商業應用[1-4]。另一方面,商業語音識別器幾乎不能為其他專用系統提供接口功能,使得對其他軟件實現本地的功能集成造成極大限制,導致大量開源自動語音識別系統成為研究熱點[5-6]。
由于開源語音系統的數量不斷增加,越來越難以準確理解哪一種最適合給定目標應用的需求[7]。將通過實驗的方法比較目前較為主流的開源大詞匯量語音工具包的可用性和識別準確率。對比的開源語音識別工具包括:HDecode(v3.4.1)、Julius(v4.3)、Pocketsphinx(v0.8)、Sphinx4、Kaldi。
本研究使用一個自行錄制的實驗語料庫應用于四個語音識別工具包的對比分析中。為了使得本文的對英語識別結論具有較好的普遍性,因此使用閱讀式語料而不是對話式的語料。研究的最終目標是通過開源語音識別工具包的全面評估,為提高英語語音識別系統的口語理解能力提供參考。
研究使用的英語語料庫包含4男4女,內容為大聲朗讀的人民日報英文版。語料庫包括訓練集、開發集和測試集。語料庫的詳細信息如表1所示。
解碼器HDecode和Julius的聲學模型使用HTK工具包進行訓練。HTK工具包提供了一個很好的參考文檔和一個包含基本功能的訓練示例,這為進一步進行深入開發提供了較好的幫助,有效提高了開發效率[8]。
基于HTK參考手冊所提供的功能描述搭建本研究的訓練方法。HTK工具包中的語音文件操作軟件HCopy軟件將音頻數據從語料庫中的語音文件轉化為具有零階梅爾頻率倒譜系數和倒頻譜均值歸一化的特征文件[9]。主要編碼參數如表2所示。

表2 編碼參數
單聲道訓練包括靜音處理和重新排列,以增強發音和聲學數據之間的匹配。在訓練的每一步中,都會執行四次Baum-Welch算法以重估訓練結果。
在完成單音符訓練后,使用了幾個接收器來訓練單詞內部和單詞之間的音素。盡管單詞內部音素參數是默認設置,但是單詞之間的音素參數是HDecode解碼器所必需的,并可作為Julius的選項進行測試。對于捆綁和合成看不見的音素狀態,使用基于決策樹的集群。將隱馬爾可夫模型與高斯混合的訓練分離,首先在兩個步驟中完成,之后是預先設定的步驟。
在單詞之間的三音素的識別訓練時,基于樹的聚類的細節以及用混合高斯訓練模型的方法必須由用戶進行自定義開發。還有更多先進的技術,例如個性化適應和區分性訓練來提高識別系統的可用性能,但是這種工具鏈的開發費用顯著增加,沒有豐富的知識就不可能建立起來,所以我們在比較中沒有使用這些技術。
pocketsphinx和Sphinx-4的聲學模型使用CMU sphinxtrain(v1.0.8)工具包進行了訓練,sphinxtrain工具包提供了訓練特征文件的所有必要工具。配置參數都可以很容易地設置在配置文件中,因此不需要編寫對應的配置腳本[10]。但是在構建語音識別器的過程中,需要由相當的程度的專業知識,因為sphinxtrain的參考文檔支持度不夠。
除了連續的聲學模型,sphinxtrain還可以訓練半連續高斯混合模型[11]。這些模型接受了梅爾頻率倒譜矢量的訓練。在默認情況下,sphinxtrain與HTK相似,由13倒譜系數、13個變量增量和13個加速系數組成。進一步的特征提取參數如表3所示。此外,本文利用線性判別分析,最大似然線性變換(LDA+MLLT)來減少特征維數。

表3 sphinx特征提取參數
與pocketsphinx相比,Sphinx-4僅限于連續的聲學模型。
KALDI工具包為不同語料庫提供了幾個示例性數據準備。這些數據準備的功能包括LDA+MLLT、說話人自適應訓練(SAT)、最大似然線性回歸(MLLR),特征空間 MLLR(fMLLR)和最大互信息(MMI、FMMI)。Kaldi識別工具包還支持高斯混合模型(GMM)和子空間模型(SGMM)。進一步在基于受限玻爾茲曼機的分層預訓練,基于每幀交叉熵訓練和序列鑒別訓練的GMM模型上對深度神經網絡(DNN)進行訓練,使用網格框架并優化狀態最小值貝葉斯風險準則[12,13]。
Kaldi訓練的計算成本很高,需要在技術實現上通過并行計算加以優化,因此在DNN的訓練中支持使用GPU實現高并發計算以加快處理速度。
HDecode和Julius的語言模型是ARPA ngram模型。在語言建模的第一步,使用HTK工具構建工具鏈的訓練,訓練的結果文件不能用于外部解碼器。然后用CMU語言模型工具包進行語言模型訓練。該工具鏈包含從輸入文本中提取單詞頻率和詞匯,并使用text2wfreq和wfreq2vocab生成帶有text2idngram和idngram2lm的ARPA語言模型文件。使用Julius將ARPA文件轉換為二進制格式,直接與HDecode一起使用,并使用工具mkbingram加速ARPA文件的加載[14]。
Sphinx同樣使用的CMU語言模型工具。其中ARPA文件也使用mkbingram轉換為二進制格式,以提高解碼的效率[15]。
Kaldi語言模型由于其內部表示為有限狀態轉換器,因此要求將上述工具所訓練的ARPA語言模型轉換為特定于解碼的二進制格式[16]。為此,需要使用了工具arpa2fst、fstcompile和多個Perl腳本等一些實用工具對ARPA語言模型進行格式轉換。
首先構建HDecode和Julius的語言模型。在第一步中,本文將n-gram順序增加到四,發現三個是對實驗語料庫的最佳選擇。觀察三個階段的最佳結果,決定將這些結果用于其他解碼器。在測試運行中,本文使用了HDecode和Julius的ARPA trigram語言模型。在第二步中,本研究比較了不同的模型初始化參數構建n-grams語言模型。通過對比發現Witten-Bell discounting是語料庫和Julius的HDecode的最佳選擇。
其次是構建聲學模型。由于聲學模型的參數數量太多,因此構建聲學模型的重點是性能調優。調優過程是一個相當困難的任務,有許多自由度,覆蓋它們幾乎是不可能的。本文對以下參數進行調優研究。
對Julius使用單詞內部與單詞之間音素識別的影響。在對實驗語料庫開發集進行了大量實驗之后,發現采用單詞之間的音素識別是更好的選擇。
基于狀態和基于決策樹的集群配置。在樹狀結合狀態下,測試了不同的問題集。測試的主要目的是區分輔音(摩擦音、爆破音、滑音、鼻音、流音)和元音(前元音、中元音、后元音)。還要對消除異常噪音的閾值(RO)、綁定狀態和決策樹修剪閾值等參數(TB)可用性進行測試。在測試中,本文采用基于決策樹聚類的訓練模型。解碼實驗語料庫測試集與HDecode一起使用的模型具有2300個綁定狀態(RO 100,TB 1250),Julius 2660 綁定狀態的模型(RO 100,TB 1000)。在實驗語料庫上,用于兩個解碼器的所用模型具有6571個綁定狀態(RO 100,TB 2500)。這些參數的選擇是基于我們在開發集上的大量調試運行中產生的最佳結果,并根據參數建立一組準確度值。
混合數量和分裂策略。根據已有的研究成果,HDecode和Julius的最佳高斯混合數量為32和24。在第一次測試運行中,使用了分裂為兩次冪的混合物。基于使用較小的步驟以提高性能的考慮,因此稍后的測試運行中使用了增加高斯數量的預定義步驟(1-2-4-6-8-12-16-24-32-48-64)。
解碼器的構建。解碼器可以有多種不同的配置。通過對HDecode的實驗,得出最優參數為:字插入代價為0、語言模型的權重為10、修剪閾值為150。總結出的Julius評估的解碼參數如表4所示。表4中的參數值增加了計算資源的使用,減緩了解碼過程,但提高了識別的準確性。

表4 解碼參數
根據前面的HTK解碼器研究,對Pocketspinx也采用ARPA trigram語言模型。
在HTK解碼器的研究已經對聲學模型的參數調優進行實驗。針對Pocketspinx識別工具包的特點,基于對以下參數的調優構建的聲學模型。
半連續和連續模型的影響。在使用兩種模型類型的默認參數的第一個評估周期中,本文發現連續聲學模型比半連續聲學模型在開發集上的效率為36.10%。
通過基于最大似然度變換(MLLT)的LDA算法來減少混合和音素的數量并減少特征矢量的數量。如表5所示,將維數從39個減少到32個,結果識別錯誤率提高2%。在實驗語料庫的測試中,使用了每個句子64個混合詞、1750個句子以及LDA+MLLT的模型。

表5 在實驗語料庫開發集上測試pocketsphinx
在Pocketspinx的實驗中,除了表5中所示的特征提取參數以外,其他均使用Pocketspinx語音解碼器的默認參數。
首先建立語言模型。針對實驗語料庫,將用于pocketsphinx和Pocketsphinx的ARPA trigram模型轉換為Kaldi所需的有限狀態轉換器表示。在轉換過程中使用了預定義的訓練腳本,其中包括生成4-gram語言模型。
其次是建立聲學模型。在所有的Kaldi的測試運行中,使用預定義培訓腳本,這些腳本僅針對輸入數據進行了調整。在測試運行中,在實驗語料庫中使用具有LDA+MLLT+SAT+fMLLR的GMM模型之上的DNN。
最后是解碼器的配置。在所有的Kaldi的測試運行中,本研究都使用預定義的解碼腳本。
不同識別工具在實驗中的錯誤率結果如表6所示。

表6 在實驗測試集上的錯誤率
由表6的可以看出,與其他識別器相比,Kaldi具有更好的識別正確率。
在實驗中,花在設置、準備、運行和優化工具包上的時間最多的是HTK,更少的Sphinx和最少的Kaldi。
Kaldi的出色表現可以看作是開源語音識別技術的一場革命。該系統能夠提供方便調用的LDA、MLLT、SAT、fMLLR、fMMI和 DNNs等十分全面先進的技術。即使系統開發者不是語言識別的專家,也能夠使用Kaldi所提供提供的菜單和腳本也能在短時間內完成系統的集成。
Sphinx系列的語音工具包也提供了一個聲學模型訓練工具,但是所提供的訓練工具不夠全面,導致訓練精度不高,但在Sphinx系列的語音工具包聲學模型的訓練和語音識別也較為簡便。
HTK是使用最困難的工具包。建立系統需要聲學模型訓練工具的開發,這個過程費時且容易出錯。基于HTK的語音識別系統的開發和集成需要開發者具有較好的專業語音識別領域的專業知識和熟練的開發技巧。
對較為主流的開源語音識別工具包的進行的較為全面評估。在試驗評估中,本研究訓練了HDecode、Julius、pocketsphinx、Sphinx-4 和 Kaldi的語言和聲學模型,部分調整和優化了識別系統的參數,并在試驗英語語料庫上進行了測試。實驗結果顯示了Kaldi超越了所有其他的識別工具包的識別正確率,并且Kaldi工具包還提供了較為全面的先進聲學模型訓練技術的支持。Kaldi工具包這些特點便于在短時間內實現最佳識別結果,但是其計算成本也是最高。Sphinx工具包提供了僅次于Kaldi的聲學模型訓練技術的支持,但是其訓練效率優于Kaldi。Sphinx需要用戶開發高級部件進行廣泛的性能調優。HTK提供了最簡單的啟動工具包,需要開發者自行開發自訓練的識別系統來達到的所需的識別性能。