董家仁,劉廣聰
(廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院,廣州510006)
語音識別技術(shù)在各領(lǐng)域中的作用與日俱增,例如智能音箱、語音助手等應(yīng)用,都是通過識別人們口頭表達(dá)的語音來執(zhí)行操作。因?yàn)檎Z音的采集不僅受環(huán)境噪聲的影響,還受每個語音表達(dá)者的語速、語言種類、口音等的影響,這就對模型的魯棒性和識別度要求比較高,這都是語音識別技術(shù)需要克服的一些問題。
過去,在語音識別領(lǐng)域應(yīng)用較為廣泛的是混合高斯-隱馬爾科夫模型(GMM-HMM),這種模型發(fā)展得比較成熟,具有較為良好的處理時間序列的能力,實(shí)現(xiàn)起來也方便,但隨著數(shù)據(jù)量的增大,處理效率越來越無法滿足人們需求,而神經(jīng)網(wǎng)絡(luò)在并行處理和分類的問題上表現(xiàn)出了極大的優(yōu)勢。神經(jīng)網(wǎng)絡(luò)具有較強(qiáng)的自適應(yīng)性、容錯性,將隱馬爾科夫模型和神經(jīng)網(wǎng)絡(luò)結(jié)合能將兩者的優(yōu)缺點(diǎn)互補(bǔ)。對于時間序列來說,上下文的關(guān)聯(lián)性是提高識別效率的關(guān)鍵,因此循環(huán)神經(jīng)網(wǎng)絡(luò)RNN 作為一種時序處理能力非常好的網(wǎng)絡(luò),非常適用于語音識別領(lǐng)域,而LSTM(Long Short-Term Memory)網(wǎng)絡(luò)是RNN 比較常見的一種變形結(jié)構(gòu),通過輸入門、遺忘門、輸出門這三個門單元來更好地處理上下文的關(guān)聯(lián)性,而GRU 是LSTM 的一種變形結(jié)構(gòu),把三個門單元合成了兩個門單元,結(jié)構(gòu)變得更加簡單,處理效率也更高,是一種不錯的變形結(jié)構(gòu),將它與CTC 結(jié)合,正確率和效率能取得不小的提升。
循環(huán)神經(jīng)網(wǎng)絡(luò)的特點(diǎn)在于其輸入不僅僅只有當(dāng)前的語音數(shù)據(jù)的特征信息,還包括單元之間內(nèi)部狀態(tài)的反饋和前饋,也就是將過去已經(jīng)被處理過的時間序列中的信息進(jìn)行編碼,在當(dāng)前時刻再對其進(jìn)行判斷處理,這樣就可以學(xué)習(xí)和處理一定時間范圍內(nèi)序列間的相關(guān)性,也就是具有了一定的記憶能力。
傳統(tǒng)的循環(huán)神經(jīng)網(wǎng)絡(luò)的記憶能力已經(jīng)無法滿足更復(fù)雜、更大量的輸入,在處理許多不同類別的輸入序列時無法更充分有效地利用歷史信息,并且BPTT 算法會帶來梯度消失的問題。而由Hochreiter 等人[1]在1997提出的長短期記憶網(wǎng)絡(luò)LSTM 的引入,能在一定程度上彌補(bǔ)傳統(tǒng)循環(huán)神經(jīng)網(wǎng)絡(luò)的不足,在循環(huán)神經(jīng)網(wǎng)絡(luò)中引入了時序的反饋機(jī)制,并用CEC(Constant Error Carrousel)單元解決BPTT 的梯度消失問題。
LSTM 網(wǎng)絡(luò)相較于傳統(tǒng)的循環(huán)神經(jīng)網(wǎng)絡(luò),在結(jié)構(gòu)中增加了三個門控制單元(輸入門、遺忘門、輸出門),輸入門負(fù)責(zé)決定當(dāng)前時刻的輸入保留多少用于當(dāng)前時刻的學(xué)習(xí);遺忘門負(fù)責(zé)決定上一時刻學(xué)習(xí)到的信息保留多少到當(dāng)前時刻;輸出門負(fù)責(zé)決定輸出多少當(dāng)前時刻學(xué)習(xí)到的信息。這三種門能提高取舍上下文有效信息的效率。LSTM 在t 時刻的計(jì)算原理如下:
GRU(Gate Recurrent Unit)是Cho 等人在2014 年提出的一種基于LSTM 網(wǎng)絡(luò)的變形結(jié)構(gòu)[3]。傳統(tǒng)的RNN 隨著神經(jīng)網(wǎng)絡(luò)層數(shù)的增加,容易陷入局部極小值,梯度逐漸趨近于0,發(fā)生梯度消失的問題,GRU 將LSTM 的三個門結(jié)構(gòu)整合為兩個門結(jié)構(gòu),不僅和LSTM一樣,解決了梯度消失的問題,并在原有的基礎(chǔ)上,提升了模型的性能,簡化了LSTM 的結(jié)構(gòu),同時提升了速度。GRU 在LSTM 原有的記憶功能基礎(chǔ)上,結(jié)構(gòu)變得更加簡單,將輸入門、遺忘門、輸出門變?yōu)閮蓚€門:更新門和重置門。更新門的作用是控制前一處理時刻的狀態(tài)信息與當(dāng)前處理狀態(tài)的關(guān)聯(lián)程度,更新門的值越大說明前一處理時刻的狀態(tài)信息與當(dāng)前的關(guān)聯(lián)程度越大。重置門的作用是控制遺忘前一處理時刻的狀態(tài)信息的程度,重置門的值越小說明遺忘得越多。一個GRU 單元結(jié)構(gòu)如圖1。
圖1 GRU單元結(jié)構(gòu)
通過t-1 時刻傳輸下來的狀態(tài)ht-1和當(dāng)前單元在t時刻的輸入xt來得到更新門和重置門的狀態(tài)信息,兩個門的狀態(tài)信息獲取計(jì)算過程如下,其中zt為更新門,rt為更新門,σ 為Sigmoid 函數(shù),W 為權(quán)重:
獲得兩個門的狀態(tài)信息后,先使用重置門rt來得到重置后的ht-1*rt,再與輸入xt連接,通過tanh 激活函數(shù)得到,然后選擇性地把它添加到當(dāng)前的狀態(tài)中,這一過程就是記憶和遺忘的過程,更新門zt的值域?yàn)?~1,值越接近于1,表示記憶下來的信息越多,值越接近于0,表示遺忘的信息越多,最后得出當(dāng)前單元的狀態(tài)信息ht:
GRU 的優(yōu)勢就體現(xiàn)在一個門運(yùn)算過程里同時進(jìn)行了記憶和遺忘的過程,而LSTM 需要多個門運(yùn)算過程來完成,因此GRU 在結(jié)構(gòu)的簡化程度和效率上相較于LSTM,都有不小的提升。
連接時序分類CTC(Connectionist Temporal Classification)是由Graves 等人2006 年提出來的一種時序分類算法[5]。與一些傳統(tǒng)模型常用的交叉熵?fù)p失函數(shù)(Cross Entropy Loss)方法不同,交叉熵?fù)p失函數(shù)要求在處理語音序列數(shù)據(jù)之前訓(xùn)練數(shù)據(jù)的標(biāo)簽做到幀級別上的對齊,對齊操作需要耗費(fèi)一定的工作量,而且模型需要知道每一幀對應(yīng)的標(biāo)簽才能進(jìn)行訓(xùn)練,因此降低了工作效率,而CTC 不需要標(biāo)簽在幀級別對齊就可以進(jìn)行訓(xùn)練,對輸入數(shù)據(jù)的任意時刻做出的預(yù)測不關(guān)心,而是重點(diǎn)關(guān)注整體上的輸出是否與標(biāo)簽一致。CTC 可以讓模型自己去學(xué)習(xí)對齊操作,從而節(jié)省時間,提高效率,CTC 可以根據(jù)一個輸入序列和輸出序列就進(jìn)行訓(xùn)練,并且直接輸出預(yù)測序列的概率。
CTC 最為突出的特點(diǎn)就在于引入了一個blank 節(jié)點(diǎn),主要是為了對靜音、停頓等沒有有效信息的部分進(jìn)行建模,來表示網(wǎng)絡(luò)對不確定信息預(yù)測時的輸出狀態(tài),CTC 中還有一個F 變換,若網(wǎng)絡(luò)的一個輸出序列能通過F 變換映射到正確標(biāo)注序列,那么該輸出序列就為一條CTC 路徑,F(xiàn) 變換的過程為:先去除序列中相鄰的blank 節(jié)點(diǎn)之間重復(fù)的標(biāo)注,然后去除blank 節(jié)點(diǎn),例如如下變化方式,其中?為blank 節(jié)點(diǎn):
F(?XY ??YY ?ZZ)=XYYZ
首先,需要對語音信號進(jìn)行預(yù)處理,這是為了消除語音信號中噪聲的干擾,得到更好的樣本,提高識別率。然后,將語音信號的模擬信號數(shù)字化,轉(zhuǎn)化成數(shù)字信號。根據(jù)人發(fā)聲的特征,語音信號在經(jīng)過嘴唇發(fā)出來后,高頻信號會不斷減弱,而往往高頻信號的信息量比較大,所以還需要對語音信號預(yù)加重,通過傳遞函數(shù)為H(z)=1-αz-1的高通數(shù)字濾波器來實(shí)現(xiàn)預(yù)加重,其中α 為預(yù)加重系數(shù)。接下來,要對語音信號分幀加窗,窗函數(shù)中比較常用的有矩形窗和漢明窗,本文采用漢明窗作為窗函數(shù),因?yàn)闈h明窗的時域波形圖呈鐘型,能更好地表現(xiàn)語音信號的時域特征,漢明窗的表達(dá)式為:
其中N 表示窗的寬度。然后,要對語音信號進(jìn)行起點(diǎn)和終點(diǎn)的判斷,去除無用的聲音部分,因此還需要對信號進(jìn)行端點(diǎn)檢測,本文采用的是雙門限法。
預(yù)處理結(jié)束后,要對語音信號進(jìn)行特征提取,提取出能有效區(qū)分信號的特征,由于語音信號在時域上變化非???,所以常常將信號從時域轉(zhuǎn)換到頻域上來分析,這就可以用到Mel 頻率倒譜。常用的語音特征系數(shù)有基音頻率、線性預(yù)測系數(shù)(LPC)、線性預(yù)測倒譜系數(shù)(LPCC)、Mel 頻率倒譜系數(shù)(MFCC),本文選用Mel頻率倒譜系數(shù)(MFCC)。MFCC 是一種比較貼合真實(shí)的人耳聽覺特征提出來的參數(shù),能更好地模擬出人對聲音信息的反應(yīng)。獲取Mel 頻率倒譜系數(shù)的過程為:對每一幀信號進(jìn)行快速傅里葉變換,得到頻域值和功率譜,將功率譜通過Mel 濾波器,得到Mel 頻譜,對Mel頻譜進(jìn)行倒譜運(yùn)算,得到MFCC,計(jì)算過程為:
z 表示該訓(xùn)練語音對應(yīng)的音素信息,x 為每一小段做MFCC 后得到的結(jié)果。
本節(jié)將在Linux 操作系統(tǒng)下使用Kaldi 來進(jìn)行數(shù)據(jù)集測試的實(shí)驗(yàn),Kaldi 是一個開源的基于C++編寫的用于語音識別的工具箱,整合了HTK 的基本功能,是深度學(xué)習(xí)語音識別領(lǐng)域一款非常實(shí)用的開發(fā)平臺。
測試數(shù)據(jù)集選擇TIMIT 語音數(shù)據(jù)集,是由麻省理工大學(xué)建立的一組語音樣本集,包含6000 多個詞匯,由630 人每人念10 句話,共6300 條句子。本實(shí)驗(yàn)的對比組是將GRU-CTC、LSTM-CTC、GMM-HMM 進(jìn)行對比,以此來測試GRU-CTC 這種結(jié)合模型在模型訓(xùn)練和解碼部分與其他模型的優(yōu)缺點(diǎn)和準(zhǔn)確率。
提取MFCC 特征時,語音信號的預(yù)加重參數(shù)設(shè)置0.97,幀移設(shè)置為341,每一幀設(shè)置512 個采樣點(diǎn),窗函數(shù)使用漢明窗。提取13 階MFCC 參數(shù),并計(jì)算一階差分和二階差分,得到39 維。分別將GRU-CTC、LSTMCTC、GMM-HMM 聲學(xué)模型進(jìn)行訓(xùn)練,每個模型進(jìn)行5次實(shí)驗(yàn),取其平均值作為每個模型的結(jié)果。
圖2 聲音信號轉(zhuǎn)化過程
圖3 GRU-CTC、LSTM-CTC、GMM-HMM正確率迭代次數(shù)變化圖
表1 實(shí)驗(yàn)?zāi)P偷膯卧~句子正確率實(shí)驗(yàn)結(jié)果
從表1 可以得出,與傳統(tǒng)的混合高斯-隱馬爾科夫模型GMM-HMM 相比,基于神經(jīng)網(wǎng)絡(luò)的兩種聲學(xué)建模方法顯然效率更高,正確率更高。從單詞的正確率可以看出,LSTM-CTC 比GMM-HMM 提升了8.1%,而LSTM 的變形結(jié)構(gòu)GRU-CTC 模型比LSTM-CTC 又提升了8.8%。從句子的正確率看,LSTM-CTC 比GMMHMM 提升了7.7%,而GRU-CTC 模型比LSTM-CTC又提升了6.9%。
本文通過對比三種不同的模型性能分析,采用神經(jīng)網(wǎng)絡(luò)和CTC 結(jié)合的模型效率和正確率比傳統(tǒng)的GMM-HMM 模型有了明顯的提高,而通過對比GRUCTC 和LSTM-CTC 兩種結(jié)構(gòu)的性能,可以得出,GRU作為LSTM 的一種改進(jìn)變形結(jié)構(gòu),在性能上確實(shí)有了不小的提升。