張允耀,黃鶴鳴,張會云
(1.青海師范大學(xué)計算機學(xué)院,青海 西寧 810008; 2.藏文信息處理教育部重點實驗室,青海 西寧 810008)
語音是人與人之間交流的一種重要方式,隨著人工智能(Artificial Intelligence, AI)時代的到來,語音逐漸成為人機交互的重要發(fā)展途徑之一。語音與通信密不可分,而通信是一個編碼與解碼的過程,可以將語音理解為信息的一種編碼形式,接收方收到語音后,通過特定規(guī)則解碼語音以獲得信息。自動語音識別(Automatic Speech Recognition, ASR)[1]是計算機將人類語音信號轉(zhuǎn)錄為文本的過程。一般來說,ASR研究可分為孤立詞語音識別、連續(xù)語音識別、大詞匯量連續(xù)語音識別、語音情感識別、說話人識別(聲紋識別)以及語音增強等內(nèi)容。其中,孤立詞語音識別是自動語音識別的基礎(chǔ),因此,對孤立詞識別的研究具有重要意義。
語音識別過程通常包括預(yù)處理、特征提取、聲學(xué)建模、語言建模等幾個階段[2]。在傳統(tǒng)的語音識別任務(wù)中,上述各部分的訓(xùn)練過程往往是相互獨立的。相較于聯(lián)合訓(xùn)練,這種方法可能無法很好地適配具體的識別任務(wù),即提取的特征可能與具體的識別任務(wù)不匹配,從而導(dǎo)致識別率下降。梅爾頻率倒譜系數(shù)(Mel Frequency Cepstrum Coefficient, MFCC)是傳統(tǒng)語音識別中最具代表性的特征,由于MFCC特征的提取早于模型訓(xùn)練,沒有進行二者間的聯(lián)合訓(xùn)練,而且該特征中語音的高頻部分損失較大,導(dǎo)致所提取的特征與識別任務(wù)并不完全匹配[1]。
本文引入深度自編碼器(Deep Auto Encoder, DAE)為特征提取器,使用雙向長短時記憶網(wǎng)絡(luò)(Bidirectional Long Short Term Memory Networks, BiLSTM)作為聲學(xué)模型,并將兩者進行聯(lián)合訓(xùn)練,從而找到最適合識別任務(wù)的特征,同時使模型之間的匹配度達到最高,進一步提升識別率。
衡量一個語音識別系統(tǒng)性能的指標有識別率、魯棒性以及泛化性。一般語音識別系統(tǒng)對于干凈語音表現(xiàn)出很好的識別性能,而對于含噪語音識別性能較差,為此,需對語音進行增強。傳統(tǒng)的語音增強方法有:譜減法、維納濾波、基于統(tǒng)計模型的方法和基于子空間的方法等[3]。而針對復(fù)雜噪聲環(huán)境下語音識別來說,目前的方法主要集中在特征提取與聲學(xué)模型上,如何在復(fù)雜噪聲環(huán)境下提取出更具魯棒性的特征與訓(xùn)練更具魯棒性的聲學(xué)模型是重中之重。
近年來,隨著深度學(xué)習(xí)興起,語音識別領(lǐng)域的研究者相繼將遷移學(xué)習(xí)、自編碼器、循環(huán)神經(jīng)網(wǎng)絡(luò)等技術(shù)應(yīng)用于魯棒性語音識別,并取得了可觀的性能[4-8]。
在遷移學(xué)習(xí)中[4],可以將聲學(xué)模型分為特征提取層和分類器層,由于含噪語音與干凈語音之間具有共性,因而可以使用遷移學(xué)習(xí)技術(shù)來提高語音識別系統(tǒng)的魯棒性。具體的操作流程為:首先,使用干凈語音訓(xùn)練一個較好的語音識別模型;然后,遷移該模型的特征提取層參數(shù)并重新初始化分類器層;最后,使用含噪語音重新訓(xùn)練,其中特征提取器層參數(shù)保持凍結(jié)或給予較小的學(xué)習(xí)率來更新;另外,通過閱讀相關(guān)文獻可以發(fā)現(xiàn)基于遷移學(xué)習(xí),可以遷移分類器層參數(shù),而重新初始化特征提取器層參數(shù),通過凍結(jié)分類器層參數(shù)來脅迫特征提取器層學(xué)習(xí)含噪語音與干凈語音之間的共性特征。上述特性都可以提高語音識別系統(tǒng)的魯棒性。
自編碼器網(wǎng)絡(luò)可以實現(xiàn)輸入特征的編碼和解碼[8],可以提取輸入語音的關(guān)鍵特征向量,相較于傳統(tǒng)的MFCC,這種特征具有更多的原始信息,從而能夠更好地表征語音。
循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network, RNN)隱藏層之間的結(jié)點是有連接的,隱藏層的輸入不僅包括輸入層的輸出,還包括上一時刻隱藏層的輸出,這種連接特性能使RNN對序列數(shù)據(jù)進行很好建模[9]。LSTM是一種特殊的循環(huán)神經(jīng)網(wǎng)絡(luò),它通過記憶單元和門控機制對先前時刻的信息進行選擇性記憶。語音是序列性數(shù)據(jù),當(dāng)前詞既與上文信息有關(guān)又與下文信息有關(guān),而BiLSTM可從正反2個方向?qū)?shù)據(jù)進行訓(xùn)練,因此,引入BiLSTM對語音進行上下文建模。
本文通過使用DAE來提取含噪語音與干凈語音之間的噪聲不變特征[10],結(jié)合遷移學(xué)習(xí)的思想,將DAE的特征提取器層遷移并與聲學(xué)模型結(jié)合,以此來提高噪聲數(shù)據(jù)訓(xùn)練下的識別準確率。
含噪語音與干凈語音之間具有一定的相似性,為了有效提取這種相似性特征,本文采用自編碼器來提取。為了保留更多的原始信息,采用含噪語音的FBANK[11]特征作為輸入,該特征擬合人耳接收的特性,符合聲音信號的本質(zhì)。傳統(tǒng)的MFCC特征需要進行離散余弦變換(Discrete Cosine Transform, DCT),而DCT變換是線性的,這種操作會丟失原語音信號中的一些非線性成分。與傳統(tǒng)的MFCC特征相比,F(xiàn)BANK特征因為不需要DCT變換,因而具有更多的原始特征。此外,本文采用均方誤差(Mean Squared Error, MSE)作為目標函數(shù)來最小化含噪語音與干凈語音之間的差異。
傳統(tǒng)的自編碼器包括普通自編碼器、多層自編碼器、卷積自編碼器、降噪自編碼器以及正則自編碼器[12]等多個類型。自編碼器一般分為編碼器和解碼器2個部分,如圖1所示。
圖1 自編碼器結(jié)構(gòu)
圖1展示的是一個自編碼器結(jié)構(gòu),輸入層到隱藏層之間的網(wǎng)絡(luò)結(jié)構(gòu)被稱為編碼器,實現(xiàn)輸入特征的壓縮和編碼;隱藏層到輸出層之間的網(wǎng)絡(luò)結(jié)構(gòu)被稱為解碼器,實現(xiàn)中間隱藏層神經(jīng)元輸出的解壓和解碼。
DAE是自編碼器的一種變體,本文構(gòu)造具有多個隱藏層的深度自編碼器來提取噪聲的不變特征。自編碼器結(jié)構(gòu)中,編碼器的第一層輸出h1為:
h1=f(wijxi+bj)
(1)
其中,xi是44維的含噪語音特征向量,wij為權(quán)重矩陣,bj為偏置向量。第一層的輸出h1是第二層的輸入,第二層輸出h2的計算方式與h1的計算方式一致,以此類推。最終的相似性特征,即自編碼器網(wǎng)絡(luò)中間隱藏層的輸出。
為了通過訓(xùn)練使模型得到更好的性能,采用均方誤差(MSE)損失函數(shù)指導(dǎo)訓(xùn)練過程。MSE損失函數(shù)定義為:
(2)
其中,X表示干凈語音,Y*表示自編碼器網(wǎng)絡(luò)的輸出。通過均方誤差損失函數(shù)可以很容易計算出含噪語音與干凈語音之間的差別。相較于其它損失函數(shù),均方誤差損失函數(shù)更加直觀更容易理解。
RNN能夠有效處理時間序列數(shù)據(jù),因此,RNN處理語音數(shù)據(jù)時有較好的性能。在語音識別中,當(dāng)前詞與上下文信息密切相關(guān),通過循環(huán)機制可以很好地對其進行建模。但RNN存在梯度爆炸以及梯度消失問題,LSTM是RNN的一種變體[13-14],它巧妙地通過門控機制引入加法運算來緩解RNN中的梯度消失,從而較好地解決了梯度問題。圖2展示的是LSTM的基本單元結(jié)構(gòu)。
圖2 LSTM單元結(jié)構(gòu)
圖2中,從左至右的虛線框區(qū)域分別為遺忘門、輸入門和輸出門,S結(jié)點表示Sigmoid激活函數(shù),T結(jié)點表示Tanh激活函數(shù),ct-1表示前一時刻細胞單元狀態(tài),C表示當(dāng)前細胞單元狀態(tài),Xt表示當(dāng)前的輸入,ht-1表示前一時刻的輸入,ht表示當(dāng)前時刻的隱狀態(tài)。具體的計算公式為:
ft=σ(Wfxt+Vfht-1)
(3)
it=σ(Wixt+Viht-1)*tanh(Wixt+Viht-1)
(4)
ct=ct-1*ft+it
(5)
ot=σ(Woxt+Voht-1)
(6)
ht=ot*tanh(ct)
(7)
在式(3)~式(7)中,Wf、Wi、Wo分別是上一隱層與當(dāng)前記憶單元的遺忘權(quán)重、輸入權(quán)重和輸出權(quán)重,Vf、Vi、Vo分別是同一層隱狀態(tài)之間的遺忘權(quán)重、輸入權(quán)重和輸出權(quán)重,σ(·)代表激活函數(shù)sigmoid,*代表點積運算。激活函數(shù)Sigmoid的取值范圍是(0,1),表示在遺忘門中當(dāng)前細胞單元被遺忘的概率,在輸入門中表示當(dāng)前輸入信息中被輸入到細胞單元的信息占比,而在輸出門中表示更新后的細胞單元信息被輸出到下一個LSTM單元的占比。
BiLSTM網(wǎng)絡(luò)從正反2個方向?qū)斎氲臄?shù)據(jù)進行訓(xùn)練,可以學(xué)習(xí)到更多的上下文信息。而且通過堆棧雙向長短時記憶網(wǎng)絡(luò)(Stack_BiLSTM)[15]能夠增加神經(jīng)網(wǎng)絡(luò)的深度,從而學(xué)習(xí)到更抽象的高層隱特征向量。因此,本文在聲學(xué)建模中主要使用BiLSTM。
預(yù)訓(xùn)練好自編碼器模型后,保留其參數(shù)及結(jié)構(gòu),將其遷移到聲學(xué)模型進行聯(lián)合訓(xùn)練,通過微調(diào)參數(shù)使其完全匹配聲學(xué)模型處理的任務(wù)。相應(yīng)的模型架構(gòu)如圖3所示。
圖3 遷移后的聯(lián)合模型架構(gòu)
通過圖3得知,自編碼器擁有多個隱藏層結(jié)構(gòu),其中,編碼器由5層Dense構(gòu)成,解碼器由4層Dense構(gòu)成。訓(xùn)練好該模型后,將編碼器層參數(shù)遷移到聲學(xué)模型中。
聲學(xué)模型由2層BiLSTM網(wǎng)絡(luò)以及全連接層構(gòu)成,使用Softmax激活函數(shù)得到每個樣本的預(yù)測概率,利用交叉熵損失函數(shù)(Cross Entropy Loss, CE)對網(wǎng)絡(luò)模型進行訓(xùn)練。其中,Softmax激活函數(shù)的定義為:
(8)
而函數(shù)LCE定義為:
(9)
本文在Google Commands數(shù)據(jù)集上設(shè)計了不同的對照實驗以驗證本文提出模型Encoder+Stack_BiLSTM+Fine的有效性,實驗所采用的評價指標是準確率與混淆矩陣。
Google Commands數(shù)據(jù)集包含30個類別的孤立詞語音,每個類別包含不同年齡段的男聲、女聲以及不同語速的語音片段等,語音內(nèi)容主要包括數(shù)字和命令詞。分別從每種語音類別中隨機抽取500條樣本,共計得到15000條樣本。數(shù)據(jù)集的采樣率為2.205 kHz,以16 bit量化存儲為WAV格式。
將干凈語音分別與粉紅噪聲(pink_noise)、高斯噪聲(white_noise)、exercise_bike、doing_the_dishes、dude_miaowing、running_tap等6種不同類型的噪聲混合,信噪比類型設(shè)置為0 dB與5 dB。在驗證魯棒性層面,主要使用含高斯噪聲的含噪語音來驗證,并將其劃分為訓(xùn)練集和測試集,驗證泛化性層面,使用含其它噪聲的含噪語音來驗證。
本文的實驗主要為了驗證在低信噪比情況下含噪語音是否能夠保持一定的識別率,因此,本文實驗過程中,以信噪比0 dB與5 dB為例。
具體的信噪比公式為:
(10)
其中,Psignal為信號功率,Pnoise為噪聲功率,Asignal為信號幅度,Anoise為噪聲幅度。信噪比越大,表明噪聲所占比重較少,語音比較清晰,而信噪比越小,表明噪聲所占比重較多,語音受到的破壞比較嚴重。
本文整體模型的訓(xùn)練過程為:1)對孤立詞語音進行標注;2)使用python_speech_feature庫提取含噪孤立詞語音的FBANK特征并將其用于DAE訓(xùn)練;3)從DAE中提取噪聲不變特征,用于聲學(xué)模型的訓(xùn)練。
本文采用一定的規(guī)則挑選特征,舍棄維度小于44的特征,得到40×44的FBANK特征。同時采用深度學(xué)習(xí)框架Tensorflow、Keras進行聲學(xué)模型的構(gòu)建。為了更加直觀地看出含噪語音與干凈語音之間的差別,本文使用信噪比為0 dB的高斯噪聲混合。圖4為干凈語音的語譜圖,圖5為混合高斯噪聲后語音的語譜圖,其中,橫軸表示時間、縱軸表示頻率。對比圖4和圖5可以看出:1)在相同時間點,2個語音信號在不同頻率上的能量不同;2)相較于圖4,圖5丟失了很多細節(jié)。由于在實際生活中需要處理的語音往往帶有噪聲和混響,因此,增強語音識別系統(tǒng)的魯棒性與泛化性至關(guān)重要。
圖5 含噪語音的語譜圖
本文采用深度神經(jīng)網(wǎng)絡(luò)(Deep Neural Network, DNN)為基線模型,進行模型魯棒性對比實驗,主要研究在低信噪比情況下含噪語音的識別準確率。為了驗證本文所提出方法的有效性,首先,訓(xùn)練擁有9個隱藏層的DAE;其次,數(shù)據(jù)預(yù)處理后將含高斯噪聲的含噪語音作為訓(xùn)練數(shù)據(jù),干凈語音作為標簽,優(yōu)化器采用RMSprop[17],激活函數(shù)使用SELU[18],為了加快模型訓(xùn)練速度,本文方法加入了批標準化層(Batch Normalization, BN);最后,使用損失函數(shù)MSE衡量網(wǎng)絡(luò)輸出分布與干凈語音之間的差別。表1對比了在使用不同激活函數(shù)的情況下,DAE達到的損失值。
表1 不同激活函數(shù)下的損失
通過對比上述使用3種不同的激活函數(shù)得到的損失,可以發(fā)現(xiàn)在使用SELU激活函數(shù)時取得了最低的損失值,探究原因,SELU可以使訓(xùn)練數(shù)據(jù)自動歸一化到零均值和單位方差,因此,使用SELU不僅可以提高訓(xùn)練速度,而且可以取得更低的損失。
訓(xùn)練DAE的過程中,通過迭代200個epoch,發(fā)現(xiàn)DAE損失下降至21.03%左右,并趨近于收斂,以此判斷出DAE訓(xùn)練的終止條件。在迭代中,損失函數(shù)的變化過程如圖6所示。
圖6 自編碼器訓(xùn)練損失
為了構(gòu)建具有一定魯棒性的語音識別系統(tǒng),首先,在干凈孤立詞數(shù)據(jù)集上提取FBANK特征;然后,用該特征分別訓(xùn)練DNN、CNN[19]、BiLSTM以及Stack_BiLSTM聲學(xué)模型;最后,使用含高斯噪聲的孤立詞數(shù)據(jù)集進行評估。每種實驗的epoch均設(shè)置為100。對比實驗如表2所示。
表2中,本文所提出的語音識別系統(tǒng)編號為5和6,其訓(xùn)練過程為:1)通過自編碼器提取含噪孤立詞語音的噪聲不變特征;2)用該特征訓(xùn)練聲學(xué)模型Stack_BiLSTM;3)對級聯(lián)噪聲自編碼器的編碼器層進行語音識別。其中,編號為5的識別系統(tǒng),Encoder為固定參數(shù);編號為6的識別系統(tǒng),Encoder采用Adadelta優(yōu)化器給予較小的學(xué)習(xí)率進行微調(diào),而使用含噪語音關(guān)鍵特征訓(xùn)練好的Stack_BiLSTM參數(shù)保持不變,以輔助Encoder進一步學(xué)習(xí)噪聲不變特征。
表2 不同信噪比含噪語音在各聲學(xué)模型中的識別率
通過對比表2中編號1~編號4的識別系統(tǒng)的性能發(fā)現(xiàn):無論是對干凈語音還是含噪語音,CNN的識別準確率均為最優(yōu)。這是由于使用不同尺度的卷積核形成了不同空間維度的特征圖。然而,CNN存在耗時長、計算量大的問題,故本文沒用采用。通過表2可以看出:DNN與Stack_BiLSTM的性能差別不大,但BiLSTM更加符合具有序列性的語音。因此,本文選用Stack_BiLSTM作為聲學(xué)模型。
通過與基線模型相比,可以得出編號為6的識別系統(tǒng)的識別準確率在信噪比為0 dB時提升了約22個百分點,在信噪比為5 dB時提升了約23個百分點;與傳統(tǒng)模型結(jié)構(gòu)中識別率最高的CNN相比,本文提出的方法在信噪比為0 dB時提升了約11個百分點,而信噪比為5 dB時提升了約13個百分點。但是由于本文所提出模型是在含噪語音條件下提取相似性特征訓(xùn)練而成的,故直接使用干凈語音進行測試性能有所下降。
相較于基線系統(tǒng),本文提出的模型每個epoch需要2 s,而基線系統(tǒng)的每個epoch需要1 s,雖然時間復(fù)雜度增加了,但總體識別率得到了一定提升,從而驗證了本文方法確實可以提高低信噪比情況下語音識別的識別率。
這里本文利用除含高斯噪聲外的含噪語音來驗證本文所提出方法的泛化性。為了簡潔,用model A表示Encoder+Stack_BiLSTM,用model B表示Encoder+Stack_BiLSTM+Fine。
通過對比上述2種模型在其余5種含噪語音上的識別率,可以判斷模型是否提取到了噪聲語音和干凈語音之間的相似性特征,即噪聲不變特征,由此判斷聯(lián)合優(yōu)化訓(xùn)練是否取得了更好的識別結(jié)果。表3和表4是2種模型在其余5種不同信噪比含噪語音上的對比實驗。
表3 SNR為0 dB時2種模型的識別結(jié)果
表4 SNR為5 dB時2種模型的識別結(jié)果
從表3、表4可以看出:
1)在pink_noise噪聲條件下,Model B的識別性能最好,準確率在信噪比為0 dB與5 dB時分別達到了60.62%與66.53%的識別效果,這是因為該類型噪聲與white_noise較為接近,都屬于平穩(wěn)噪聲,相對于不平穩(wěn)噪聲來說,比較容易識別。
2)整體而言,在5個測試集上,無論是信噪比為0 dB還是5 dB,Model A與Model B均表現(xiàn)出了較為穩(wěn)定的識別率,表明2類模型的泛化性較好。
3)2類模型的平均識別率相差較大,根據(jù)表中的結(jié)果,信噪比為0 dB時,Model A的平均識別率為30.36%,而Model B的平均識別率為52.16%,信噪比為5 dB時,Model A的平均識別率為32.41%,而Model B的平均識別率為55.75%。表明經(jīng)過微調(diào),Model B的性能更優(yōu)。
除了識別準確率,本文還采用混淆矩陣[20]評估模型性能。在混淆矩陣中,每一行代表每個類別所含語音樣本的數(shù)量,每一列代表預(yù)測為該類別的語音樣本數(shù)量,對角線數(shù)字表示相應(yīng)類別的語音樣本被正確識別的數(shù)量。對角線顏色越深,表示對應(yīng)的語音樣本識別準確率越高。
圖7展示了本文方法Encoder+Stack_BiLSTM+Fine模型測試在信噪比為0 dB時含高斯噪聲的含噪語音所得到的混淆矩陣。
從圖7可以看出:孤立詞sheila有394個樣本被正確識別,準確率為78.8%,這是一個比較可觀的識別結(jié)果;孤立詞one僅有181個樣本被預(yù)測正確,識別準確率僅為36.2%,說明噪聲嚴重破壞了語音細節(jié)特征;將孤立詞one識別為on的次數(shù)為47,識別為no的次數(shù)為49,說明孤立詞on和no與孤立詞one的語譜圖相似。
圖7 本文方法在White_noise上的混淆矩陣
為了突出本文所提出模型性能的優(yōu)勢,驗證該方法確實可以提高低信噪比情況下語音識別的性能,現(xiàn)使用前人的研究方法進行實驗并與本文方法進行對比。具體的實驗結(jié)果對比如表5所示。
表5 本文方法與其他模型的性能對比
在表5中,上述前人的成果因所使用的數(shù)據(jù)集均不同,故只能借鑒前人的研究方法,通過在本文所使用的數(shù)據(jù)集上進行實驗得到上述結(jié)果。通過對比發(fā)現(xiàn),本文所提出模型無論信噪比為0 dB還是5 dB,均表現(xiàn)出了較好的識別結(jié)果。
本文提出了一種新的提升含噪語音識別魯棒性與泛化性的聲學(xué)模型Encoder+Stack_BiLSTM+Fine,該模型由DAE和Stack_BiLSTM組成。其中,DAE用于特征提取,Stack_BiLSTM用于聲學(xué)建模,在聲學(xué)建模過程中,遷移DAE中編碼器的結(jié)構(gòu)和參數(shù)。在含噪Google Commands數(shù)據(jù)集上的實驗表明,該模型具有很好的性能,同時具有較好的泛化性。
在以后的研究中,將不斷改進深度自編碼器的結(jié)構(gòu)以及使用不同類型的聲學(xué)模型,以此來探索更有效的增強魯棒性的方法。