劉 瓊
(西安航空職業(yè)技術(shù)學(xué)院通識(shí)教育學(xué)院,陜西西安 710089)
關(guān)鍵字:開源語(yǔ)音識(shí)別工具;HTK;Spinx;Kaldi;語(yǔ)言模型;聲學(xué)模型
在過去的幾十年里,大量的連續(xù)語(yǔ)音識(shí)別系統(tǒng)被開發(fā)出來。一方面,諸如AT&T Watson、Microsoft Speech Server、谷歌Speech API和Nuance識(shí)別器等十分成熟的語(yǔ)音識(shí)別系統(tǒng)已經(jīng)得到較為廣泛的商業(yè)應(yīng)用[1-4]。另一方面,商業(yè)語(yǔ)音識(shí)別器幾乎不能為其他專用系統(tǒng)提供接口功能,使得對(duì)其他軟件實(shí)現(xiàn)本地的功能集成造成極大限制,導(dǎo)致大量開源自動(dòng)語(yǔ)音識(shí)別系統(tǒng)成為研究熱點(diǎn)[5-6]。
由于開源語(yǔ)音系統(tǒng)的數(shù)量不斷增加,越來越難以準(zhǔn)確理解哪一種最適合給定目標(biāo)應(yīng)用的需求[7]。將通過實(shí)驗(yàn)的方法比較目前較為主流的開源大詞匯量語(yǔ)音工具包的可用性和識(shí)別準(zhǔn)確率。對(duì)比的開源語(yǔ)音識(shí)別工具包括:HDecode(v3.4.1)、Julius(v4.3)、Pocketsphinx(v0.8)、Sphinx4、Kaldi。
本研究使用一個(gè)自行錄制的實(shí)驗(yàn)語(yǔ)料庫(kù)應(yīng)用于四個(gè)語(yǔ)音識(shí)別工具包的對(duì)比分析中。為了使得本文的對(duì)英語(yǔ)識(shí)別結(jié)論具有較好的普遍性,因此使用閱讀式語(yǔ)料而不是對(duì)話式的語(yǔ)料。研究的最終目標(biāo)是通過開源語(yǔ)音識(shí)別工具包的全面評(píng)估,為提高英語(yǔ)語(yǔ)音識(shí)別系統(tǒng)的口語(yǔ)理解能力提供參考。
研究使用的英語(yǔ)語(yǔ)料庫(kù)包含4男4女,內(nèi)容為大聲朗讀的人民日?qǐng)?bào)英文版。語(yǔ)料庫(kù)包括訓(xùn)練集、開發(fā)集和測(cè)試集。語(yǔ)料庫(kù)的詳細(xì)信息如表1所示。
解碼器HDecode和Julius的聲學(xué)模型使用HTK工具包進(jìn)行訓(xùn)練。HTK工具包提供了一個(gè)很好的參考文檔和一個(gè)包含基本功能的訓(xùn)練示例,這為進(jìn)一步進(jìn)行深入開發(fā)提供了較好的幫助,有效提高了開發(fā)效率[8]。
基于HTK參考手冊(cè)所提供的功能描述搭建本研究的訓(xùn)練方法。HTK工具包中的語(yǔ)音文件操作軟件HCopy軟件將音頻數(shù)據(jù)從語(yǔ)料庫(kù)中的語(yǔ)音文件轉(zhuǎn)化為具有零階梅爾頻率倒譜系數(shù)和倒頻譜均值歸一化的特征文件[9]。主要編碼參數(shù)如表2所示。
表2 編碼參數(shù)
單聲道訓(xùn)練包括靜音處理和重新排列,以增強(qiáng)發(fā)音和聲學(xué)數(shù)據(jù)之間的匹配。在訓(xùn)練的每一步中,都會(huì)執(zhí)行四次Baum-Welch算法以重估訓(xùn)練結(jié)果。
在完成單音符訓(xùn)練后,使用了幾個(gè)接收器來訓(xùn)練單詞內(nèi)部和單詞之間的音素。盡管單詞內(nèi)部音素參數(shù)是默認(rèn)設(shè)置,但是單詞之間的音素參數(shù)是HDecode解碼器所必需的,并可作為Julius的選項(xiàng)進(jìn)行測(cè)試。對(duì)于捆綁和合成看不見的音素狀態(tài),使用基于決策樹的集群。將隱馬爾可夫模型與高斯混合的訓(xùn)練分離,首先在兩個(gè)步驟中完成,之后是預(yù)先設(shè)定的步驟。
在單詞之間的三音素的識(shí)別訓(xùn)練時(shí),基于樹的聚類的細(xì)節(jié)以及用混合高斯訓(xùn)練模型的方法必須由用戶進(jìn)行自定義開發(fā)。還有更多先進(jìn)的技術(shù),例如個(gè)性化適應(yīng)和區(qū)分性訓(xùn)練來提高識(shí)別系統(tǒng)的可用性能,但是這種工具鏈的開發(fā)費(fèi)用顯著增加,沒有豐富的知識(shí)就不可能建立起來,所以我們?cè)诒容^中沒有使用這些技術(shù)。
pocketsphinx和Sphinx-4的聲學(xué)模型使用CMU sphinxtrain(v1.0.8)工具包進(jìn)行了訓(xùn)練,sphinxtrain工具包提供了訓(xùn)練特征文件的所有必要工具。配置參數(shù)都可以很容易地設(shè)置在配置文件中,因此不需要編寫對(duì)應(yīng)的配置腳本[10]。但是在構(gòu)建語(yǔ)音識(shí)別器的過程中,需要由相當(dāng)?shù)某潭鹊膶I(yè)知識(shí),因?yàn)閟phinxtrain的參考文檔支持度不夠。
除了連續(xù)的聲學(xué)模型,sphinxtrain還可以訓(xùn)練半連續(xù)高斯混合模型[11]。這些模型接受了梅爾頻率倒譜矢量的訓(xùn)練。在默認(rèn)情況下,sphinxtrain與HTK相似,由13倒譜系數(shù)、13個(gè)變量增量和13個(gè)加速系數(shù)組成。進(jìn)一步的特征提取參數(shù)如表3所示。此外,本文利用線性判別分析,最大似然線性變換(LDA+MLLT)來減少特征維數(shù)。
表3 sphinx特征提取參數(shù)
與pocketsphinx相比,Sphinx-4僅限于連續(xù)的聲學(xué)模型。
KALDI工具包為不同語(yǔ)料庫(kù)提供了幾個(gè)示例性數(shù)據(jù)準(zhǔn)備。這些數(shù)據(jù)準(zhǔn)備的功能包括LDA+MLLT、說話人自適應(yīng)訓(xùn)練(SAT)、最大似然線性回歸(MLLR),特征空間 MLLR(fMLLR)和最大互信息(MMI、FMMI)。Kaldi識(shí)別工具包還支持高斯混合模型(GMM)和子空間模型(SGMM)。進(jìn)一步在基于受限玻爾茲曼機(jī)的分層預(yù)訓(xùn)練,基于每幀交叉熵訓(xùn)練和序列鑒別訓(xùn)練的GMM模型上對(duì)深度神經(jīng)網(wǎng)絡(luò)(DNN)進(jìn)行訓(xùn)練,使用網(wǎng)格框架并優(yōu)化狀態(tài)最小值貝葉斯風(fēng)險(xiǎn)準(zhǔn)則[12,13]。
Kaldi訓(xùn)練的計(jì)算成本很高,需要在技術(shù)實(shí)現(xiàn)上通過并行計(jì)算加以優(yōu)化,因此在DNN的訓(xùn)練中支持使用GPU實(shí)現(xiàn)高并發(fā)計(jì)算以加快處理速度。
HDecode和Julius的語(yǔ)言模型是ARPA ngram模型。在語(yǔ)言建模的第一步,使用HTK工具構(gòu)建工具鏈的訓(xùn)練,訓(xùn)練的結(jié)果文件不能用于外部解碼器。然后用CMU語(yǔ)言模型工具包進(jìn)行語(yǔ)言模型訓(xùn)練。該工具鏈包含從輸入文本中提取單詞頻率和詞匯,并使用text2wfreq和wfreq2vocab生成帶有text2idngram和idngram2lm的ARPA語(yǔ)言模型文件。使用Julius將ARPA文件轉(zhuǎn)換為二進(jìn)制格式,直接與HDecode一起使用,并使用工具mkbingram加速ARPA文件的加載[14]。
Sphinx同樣使用的CMU語(yǔ)言模型工具。其中ARPA文件也使用mkbingram轉(zhuǎn)換為二進(jìn)制格式,以提高解碼的效率[15]。
Kaldi語(yǔ)言模型由于其內(nèi)部表示為有限狀態(tài)轉(zhuǎn)換器,因此要求將上述工具所訓(xùn)練的ARPA語(yǔ)言模型轉(zhuǎn)換為特定于解碼的二進(jìn)制格式[16]。為此,需要使用了工具arpa2fst、fstcompile和多個(gè)Perl腳本等一些實(shí)用工具對(duì)ARPA語(yǔ)言模型進(jìn)行格式轉(zhuǎn)換。
首先構(gòu)建HDecode和Julius的語(yǔ)言模型。在第一步中,本文將n-gram順序增加到四,發(fā)現(xiàn)三個(gè)是對(duì)實(shí)驗(yàn)語(yǔ)料庫(kù)的最佳選擇。觀察三個(gè)階段的最佳結(jié)果,決定將這些結(jié)果用于其他解碼器。在測(cè)試運(yùn)行中,本文使用了HDecode和Julius的ARPA trigram語(yǔ)言模型。在第二步中,本研究比較了不同的模型初始化參數(shù)構(gòu)建n-grams語(yǔ)言模型。通過對(duì)比發(fā)現(xiàn)Witten-Bell discounting是語(yǔ)料庫(kù)和Julius的HDecode的最佳選擇。
其次是構(gòu)建聲學(xué)模型。由于聲學(xué)模型的參數(shù)數(shù)量太多,因此構(gòu)建聲學(xué)模型的重點(diǎn)是性能調(diào)優(yōu)。調(diào)優(yōu)過程是一個(gè)相當(dāng)困難的任務(wù),有許多自由度,覆蓋它們幾乎是不可能的。本文對(duì)以下參數(shù)進(jìn)行調(diào)優(yōu)研究。
對(duì)Julius使用單詞內(nèi)部與單詞之間音素識(shí)別的影響。在對(duì)實(shí)驗(yàn)語(yǔ)料庫(kù)開發(fā)集進(jìn)行了大量實(shí)驗(yàn)之后,發(fā)現(xiàn)采用單詞之間的音素識(shí)別是更好的選擇。
基于狀態(tài)和基于決策樹的集群配置。在樹狀結(jié)合狀態(tài)下,測(cè)試了不同的問題集。測(cè)試的主要目的是區(qū)分輔音(摩擦音、爆破音、滑音、鼻音、流音)和元音(前元音、中元音、后元音)。還要對(duì)消除異常噪音的閾值(RO)、綁定狀態(tài)和決策樹修剪閾值等參數(shù)(TB)可用性進(jìn)行測(cè)試。在測(cè)試中,本文采用基于決策樹聚類的訓(xùn)練模型。解碼實(shí)驗(yàn)語(yǔ)料庫(kù)測(cè)試集與HDecode一起使用的模型具有2300個(gè)綁定狀態(tài)(RO 100,TB 1250),Julius 2660 綁定狀態(tài)的模型(RO 100,TB 1000)。在實(shí)驗(yàn)語(yǔ)料庫(kù)上,用于兩個(gè)解碼器的所用模型具有6571個(gè)綁定狀態(tài)(RO 100,TB 2500)。這些參數(shù)的選擇是基于我們?cè)陂_發(fā)集上的大量調(diào)試運(yùn)行中產(chǎn)生的最佳結(jié)果,并根據(jù)參數(shù)建立一組準(zhǔn)確度值。
混合數(shù)量和分裂策略。根據(jù)已有的研究成果,HDecode和Julius的最佳高斯混合數(shù)量為32和24。在第一次測(cè)試運(yùn)行中,使用了分裂為兩次冪的混合物。基于使用較小的步驟以提高性能的考慮,因此稍后的測(cè)試運(yùn)行中使用了增加高斯數(shù)量的預(yù)定義步驟(1-2-4-6-8-12-16-24-32-48-64)。
解碼器的構(gòu)建。解碼器可以有多種不同的配置。通過對(duì)HDecode的實(shí)驗(yàn),得出最優(yōu)參數(shù)為:字插入代價(jià)為0、語(yǔ)言模型的權(quán)重為10、修剪閾值為150??偨Y(jié)出的Julius評(píng)估的解碼參數(shù)如表4所示。表4中的參數(shù)值增加了計(jì)算資源的使用,減緩了解碼過程,但提高了識(shí)別的準(zhǔn)確性。
表4 解碼參數(shù)
根據(jù)前面的HTK解碼器研究,對(duì)Pocketspinx也采用ARPA trigram語(yǔ)言模型。
在HTK解碼器的研究已經(jīng)對(duì)聲學(xué)模型的參數(shù)調(diào)優(yōu)進(jìn)行實(shí)驗(yàn)。針對(duì)Pocketspinx識(shí)別工具包的特點(diǎn),基于對(duì)以下參數(shù)的調(diào)優(yōu)構(gòu)建的聲學(xué)模型。
半連續(xù)和連續(xù)模型的影響。在使用兩種模型類型的默認(rèn)參數(shù)的第一個(gè)評(píng)估周期中,本文發(fā)現(xiàn)連續(xù)聲學(xué)模型比半連續(xù)聲學(xué)模型在開發(fā)集上的效率為36.10%。
通過基于最大似然度變換(MLLT)的LDA算法來減少混合和音素的數(shù)量并減少特征矢量的數(shù)量。如表5所示,將維數(shù)從39個(gè)減少到32個(gè),結(jié)果識(shí)別錯(cuò)誤率提高2%。在實(shí)驗(yàn)語(yǔ)料庫(kù)的測(cè)試中,使用了每個(gè)句子64個(gè)混合詞、1750個(gè)句子以及LDA+MLLT的模型。
表5 在實(shí)驗(yàn)語(yǔ)料庫(kù)開發(fā)集上測(cè)試pocketsphinx
在Pocketspinx的實(shí)驗(yàn)中,除了表5中所示的特征提取參數(shù)以外,其他均使用Pocketspinx語(yǔ)音解碼器的默認(rèn)參數(shù)。
首先建立語(yǔ)言模型。針對(duì)實(shí)驗(yàn)語(yǔ)料庫(kù),將用于pocketsphinx和Pocketsphinx的ARPA trigram模型轉(zhuǎn)換為Kaldi所需的有限狀態(tài)轉(zhuǎn)換器表示。在轉(zhuǎn)換過程中使用了預(yù)定義的訓(xùn)練腳本,其中包括生成4-gram語(yǔ)言模型。
其次是建立聲學(xué)模型。在所有的Kaldi的測(cè)試運(yùn)行中,使用預(yù)定義培訓(xùn)腳本,這些腳本僅針對(duì)輸入數(shù)據(jù)進(jìn)行了調(diào)整。在測(cè)試運(yùn)行中,在實(shí)驗(yàn)語(yǔ)料庫(kù)中使用具有LDA+MLLT+SAT+fMLLR的GMM模型之上的DNN。
最后是解碼器的配置。在所有的Kaldi的測(cè)試運(yùn)行中,本研究都使用預(yù)定義的解碼腳本。
不同識(shí)別工具在實(shí)驗(yàn)中的錯(cuò)誤率結(jié)果如表6所示。
表6 在實(shí)驗(yàn)測(cè)試集上的錯(cuò)誤率
由表6的可以看出,與其他識(shí)別器相比,Kaldi具有更好的識(shí)別正確率。
在實(shí)驗(yàn)中,花在設(shè)置、準(zhǔn)備、運(yùn)行和優(yōu)化工具包上的時(shí)間最多的是HTK,更少的Sphinx和最少的Kaldi。
Kaldi的出色表現(xiàn)可以看作是開源語(yǔ)音識(shí)別技術(shù)的一場(chǎng)革命。該系統(tǒng)能夠提供方便調(diào)用的LDA、MLLT、SAT、fMLLR、fMMI和 DNNs等十分全面先進(jìn)的技術(shù)。即使系統(tǒng)開發(fā)者不是語(yǔ)言識(shí)別的專家,也能夠使用Kaldi所提供提供的菜單和腳本也能在短時(shí)間內(nèi)完成系統(tǒng)的集成。
Sphinx系列的語(yǔ)音工具包也提供了一個(gè)聲學(xué)模型訓(xùn)練工具,但是所提供的訓(xùn)練工具不夠全面,導(dǎo)致訓(xùn)練精度不高,但在Sphinx系列的語(yǔ)音工具包聲學(xué)模型的訓(xùn)練和語(yǔ)音識(shí)別也較為簡(jiǎn)便。
HTK是使用最困難的工具包。建立系統(tǒng)需要聲學(xué)模型訓(xùn)練工具的開發(fā),這個(gè)過程費(fèi)時(shí)且容易出錯(cuò)?;贖TK的語(yǔ)音識(shí)別系統(tǒng)的開發(fā)和集成需要開發(fā)者具有較好的專業(yè)語(yǔ)音識(shí)別領(lǐng)域的專業(yè)知識(shí)和熟練的開發(fā)技巧。
對(duì)較為主流的開源語(yǔ)音識(shí)別工具包的進(jìn)行的較為全面評(píng)估。在試驗(yàn)評(píng)估中,本研究訓(xùn)練了HDecode、Julius、pocketsphinx、Sphinx-4 和 Kaldi的語(yǔ)言和聲學(xué)模型,部分調(diào)整和優(yōu)化了識(shí)別系統(tǒng)的參數(shù),并在試驗(yàn)英語(yǔ)語(yǔ)料庫(kù)上進(jìn)行了測(cè)試。實(shí)驗(yàn)結(jié)果顯示了Kaldi超越了所有其他的識(shí)別工具包的識(shí)別正確率,并且Kaldi工具包還提供了較為全面的先進(jìn)聲學(xué)模型訓(xùn)練技術(shù)的支持。Kaldi工具包這些特點(diǎn)便于在短時(shí)間內(nèi)實(shí)現(xiàn)最佳識(shí)別結(jié)果,但是其計(jì)算成本也是最高。Sphinx工具包提供了僅次于Kaldi的聲學(xué)模型訓(xùn)練技術(shù)的支持,但是其訓(xùn)練效率優(yōu)于Kaldi。Sphinx需要用戶開發(fā)高級(jí)部件進(jìn)行廣泛的性能調(diào)優(yōu)。HTK提供了最簡(jiǎn)單的啟動(dòng)工具包,需要開發(fā)者自行開發(fā)自訓(xùn)練的識(shí)別系統(tǒng)來達(dá)到的所需的識(shí)別性能。