馮成立 程 雯
(武漢郵電科學(xué)研究院 武漢 430000)
語(yǔ)音識(shí)別技術(shù)是人工智能領(lǐng)域發(fā)展較為迅猛的方向。其目的是為了將人說(shuō)話的聲音轉(zhuǎn)換為其對(duì)應(yīng)的語(yǔ)言文本信息。傳統(tǒng)語(yǔ)音識(shí)別由聲學(xué)模型和語(yǔ)言模型構(gòu)成。傳統(tǒng)的聲學(xué)建模采用高斯混合模型(Gaussian Mixture Model,GMM)來(lái)提取語(yǔ)音的聲學(xué)特征信息,語(yǔ)言模型則使用隱馬爾可夫模型[1](Hidden Markov Model,HMM),提取其對(duì)應(yīng)的語(yǔ)言特性。隨著深度學(xué)習(xí)發(fā)展,基于神經(jīng)網(wǎng)絡(luò)的語(yǔ)音識(shí)別迅速發(fā)展起來(lái),聲學(xué)模型漸漸發(fā)展為深度神經(jīng)網(wǎng)絡(luò)(Deep Neural Network,DNN),循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Network Network,RNN),卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,Cnn)等。如,科大訊飛的DFCNN、百度的Deep Speech 等。文本以DFCNN 作為基礎(chǔ)模型進(jìn)行研究,分析了其模型優(yōu)缺點(diǎn),并基于此進(jìn)行改進(jìn),對(duì)改進(jìn)前后的準(zhǔn)確率效果進(jìn)行對(duì)比。
文本采用的是16k 語(yǔ)音數(shù)據(jù),語(yǔ)音數(shù)據(jù)預(yù)處理通常兩種做法,提取MFCC和Filter bank特征。MFCC 是在Mel 標(biāo)度頻率域提取出來(lái)的倒譜參數(shù),是一種在語(yǔ)音識(shí)別領(lǐng)域與說(shuō)話人識(shí)別領(lǐng)域中廣泛使用的特征。Mel 標(biāo)度模擬了人耳頻率的非線性特性,它與頻率的關(guān)系可用下式近似表示:
主要對(duì)音頻數(shù)據(jù)處理過(guò)程分為以下幾步驟:預(yù)加重,分幀,加窗,快速傅里葉變換(STFT),梅爾濾波,去均值,離散余弦變換(DCT)等。最后構(gòu)造成一個(gè)基于人耳頻率的語(yǔ)音特征頻譜圖。Fbank 和MFCC 基本類(lèi)似,但是在最后一步?jīng)]有使用離散余弦變換,因此fbank包括更豐富的語(yǔ)音特征信息,在使用深度神經(jīng)網(wǎng)絡(luò)的時(shí)候,我們通常使用filter bank特征來(lái)作為網(wǎng)絡(luò)特征的輸入。
獲得MFCC 語(yǔ)音頻譜特征后,需要使用深度殘差CNN 提取音頻特征。文本提出的聲學(xué)模型使用5層的3×3卷積神經(jīng)網(wǎng)絡(luò)增強(qiáng)卷積層的局部特征提取能力。其中每一層中間是兩層的CNN 結(jié)構(gòu)。并且使用批正則化(Batch Normalization),對(duì)每層的輸入數(shù)據(jù)的分布進(jìn)行歸一化處理。加快深度網(wǎng)絡(luò)中的訓(xùn)練速度。
其中該CNN 結(jié)構(gòu)是借助于2016 年VGGNet[5]中的CNN3×3 大小的卷積核思想。VGG Net 由Google DeepMind 公司的研究員和牛津大學(xué)的視覺(jué)幾何組一起研發(fā)的深度卷積神經(jīng)網(wǎng)絡(luò),在2014 的ILSVRC 比賽上取得了優(yōu)異的成績(jī),將top5 錯(cuò)誤率降到7.3%。它使用多層3×3 的卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行堆疊,將語(yǔ)音頻譜特征看成一張圖,提取頻譜圖的深度局部特征。并且其感受野大小為3,相比直接使用5×5,7×7 等卷積核大小,采用深度卷積核為(3,3)的感受野大小類(lèi)似,但卻不增加太多訓(xùn)練參數(shù)的量。VGGNet中的該方法在不增加參數(shù)的情況下,更好的增強(qiáng)深度卷積神經(jīng)網(wǎng)絡(luò)對(duì)數(shù)據(jù)的擬合能力。
在語(yǔ)音識(shí)別技術(shù)中,序列幀和標(biāo)準(zhǔn)目標(biāo)之間的長(zhǎng)度通常都是不一致的,所以在連接時(shí)序分類(lèi)(Connection Temporal Classification,CTC)提出前,通長(zhǎng)使用GMM 來(lái)將序列幀與目標(biāo)之間強(qiáng)制對(duì)齊,序列幀和目標(biāo)幀對(duì)齊問(wèn)題是一個(gè)較難處理的問(wèn)題,會(huì)產(chǎn)生較大誤差。針對(duì)這個(gè)問(wèn)題鏈接時(shí)序分類(lèi)(CTC)被研究人員提出。CTC 通過(guò)引入空符號(hào)blank,在不對(duì)音素對(duì)齊的前提下,最大化解碼路徑中組合的后驗(yàn)概率。
其中p(xi)為組成X 序列的一條路徑概率。通過(guò)極大似然估計(jì)將所有路徑之和的最大值,可以求得最優(yōu)解。其路徑變換后的結(jié)果及為CTC 解碼結(jié)果。變換的過(guò)程則是合并相同字符,并且將空字符合并并分割不同字符。
NiN(Network in Network)是一種2014 年提出的一種深度網(wǎng)絡(luò)結(jié)構(gòu)[11]。它可以增強(qiáng)模型在感受野內(nèi)對(duì)局部區(qū)域的辨別能力。傳統(tǒng)CNN是一種廣義線性變換,僅僅是將輸入進(jìn)行線性組合,因此其抽象能力是比較低的。NiN 中為了提取更深層特征提出MLP conv(multi-layer perception)卷積網(wǎng)絡(luò)。在CNN后使用1×1的卷積網(wǎng)絡(luò),相當(dāng)于在CNN后加一層多層感知機(jī)。從特征效果上看,在通道之間做了特征融合。
每一層卷積之后加一個(gè)激活函數(shù),比原結(jié)構(gòu)多了一層激活函數(shù),增加了模型的非線性表達(dá)能力。在NiN 網(wǎng)絡(luò)中,還提出一種方法全局平均池化(Global Average Pool,GAP),GAP 是在網(wǎng)絡(luò)輸出層代替全連接層。對(duì)CNN 卷積通道上進(jìn)行求平均,直接輸出通道上的平均值。
在語(yǔ)音識(shí)別求softmax 的時(shí)候,由于輸入維度過(guò)大,導(dǎo)致全連接參數(shù)過(guò)多,容易發(fā)生過(guò)擬合,雖然使用dropout,但是仍然不好把控dense 的擬合程度。為了解決這個(gè)問(wèn)題,我們使用GAP 來(lái)代替全連接層。全局平均池化可以大大降低參數(shù),并且直接接在CNN 后,對(duì)每個(gè)通道求一個(gè)平均,具有實(shí)際含義,易解釋。
本文使用的殘差SENet 是繼ResNet 之后的更有效殘差機(jī)制網(wǎng)絡(luò)[19],SeNet 引入一種通道加權(quán)殘差技術(shù)SE-Block。針對(duì)傳統(tǒng)殘差結(jié)構(gòu)只是將輸入加到輸出里,而無(wú)法對(duì)輸入中不同通道內(nèi)特征進(jìn)行選擇。通過(guò)該方法,可以對(duì)通道數(shù)據(jù)進(jìn)行加權(quán),強(qiáng)調(diào)多通道內(nèi)有效信息,抑制無(wú)效信息,類(lèi)似一個(gè)通道內(nèi)注意力機(jī)制。如圖1 所示,SE-Block 主要分為兩個(gè)部分,Squeeze 操作和Excitation 操作。Squeeze將一個(gè)channel上整個(gè)空間特征編碼為一個(gè)全局特征,采用全局平均池化來(lái)實(shí)現(xiàn),得到一個(gè)channel上的全局描述特征。Excitation 操作針對(duì)不同channal上的關(guān)系進(jìn)行建模。學(xué)習(xí)到一個(gè)channel 上的權(quán)重。利用兩個(gè)全連接層,第一個(gè)FC 層起到降維的作用,降維系數(shù)為r 是個(gè)超參數(shù),然后采用ReLU 激活。最后的FC層恢復(fù)原始的維度。最后將學(xué)習(xí)到的各個(gè)channel的激活值。
圖1 SE-Block殘差機(jī)制
圖2 self attention注意力機(jī)制
其中zc為squeeze后得到的每個(gè)通道上的全局平均池特征。再使用兩個(gè)全連接變換得到匹配度s,第一個(gè)全連接層對(duì)z進(jìn)行降維,降維系數(shù)維r。將原始通道樹(shù)C,變換到C/r,并且使用Relu 激活函數(shù)對(duì)其非線性變換。然后進(jìn)行第二層全連接恢復(fù)其維度C,通過(guò)這兩個(gè)操作得到不同通道間的權(quán)重。然后針對(duì)s進(jìn)行softmax 操作,即可得到通道的權(quán)重歸一化數(shù)值,再對(duì)uc進(jìn)行加權(quán)求和得到通道加權(quán)后的特征。相當(dāng)于對(duì)不同通道添加了一個(gè)注意力機(jī)制。
語(yǔ)言模型采用的是transformer 結(jié)構(gòu),transformer 是2017 年谷歌公司提出的一種特殊的序列特征提取網(wǎng)絡(luò)[3]。分為編碼與解碼兩個(gè)部分,每個(gè)部分包括6 層,編碼器部分可以拆分為自注意力機(jī)制(self attention)以及前饋神經(jīng)網(wǎng)絡(luò)(feed forward neural network)。解碼器部分拆分為自注意力機(jī)制(self attention),編碼解碼注意力機(jī)制(encoder-decoder attention)和前饋神經(jīng)網(wǎng)絡(luò)。編碼器對(duì)拼音序列的上下文進(jìn)行建模,解碼器則根據(jù)這種依賴關(guān)系對(duì)拼音漢字的過(guò)程實(shí)現(xiàn)轉(zhuǎn)換。
Transformer 是一種極其高效的序列特征提取器。其中起主要作用的是自注意力機(jī)制(self attention)。self attention 也叫"Scaled Dot-Product Attention"(縮放點(diǎn)乘注意力)。是一種對(duì)序列自身的不同序列幀之間的依賴關(guān)系進(jìn)行建模的注意力機(jī)制,通過(guò)該方法,可以獲得充足的上下文信息。Self attention計(jì)算圖如下所示。
通過(guò)Q,K 來(lái)計(jì)算query 與key 之間的匹配系數(shù),經(jīng)過(guò)softmax歸一化處理作為權(quán)重與V乘積。前饋神經(jīng)網(wǎng)絡(luò)是通過(guò)兩層的全鏈接層對(duì)數(shù)據(jù)進(jìn)行融合計(jì)算。通過(guò)max函數(shù)提取融合后的特征信息。
相比于傳統(tǒng)的循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,RNN),transformer 可以解決長(zhǎng)距離上的依賴難以傳遞的問(wèn)題,并且可以實(shí)現(xiàn)并行計(jì)算。充分提高訓(xùn)練速度以及增強(qiáng)序列上下文建模能力。使用該方法作為語(yǔ)言模型,實(shí)現(xiàn)拼音到中文漢字的轉(zhuǎn)換是具有穩(wěn)定性以及魯棒性的。
本項(xiàng)目自動(dòng)語(yǔ)音識(shí)別模型采用開(kāi)源中文普通話數(shù)據(jù)集,使用了四個(gè)開(kāi)源數(shù)據(jù)集,除去測(cè)試驗(yàn)證集合,總訓(xùn)練數(shù)據(jù)樣本大約為400h,如表1所示。
表1 中文語(yǔ)音數(shù)據(jù)集
Thchs30 是清華大學(xué)開(kāi)源的30 小時(shí)中文語(yǔ)音庫(kù)。采樣頻率16kHz,采樣大小16bits。ST-CMDS是由AI 數(shù)據(jù)公司發(fā)布的中文語(yǔ)音數(shù)據(jù)集,包含10萬(wàn)余條語(yǔ)音文件,大約100 余小時(shí)的語(yǔ)音數(shù)據(jù)。AiShell-V1 是由北京希爾公司發(fā)布的一個(gè)中文語(yǔ)音數(shù)據(jù)集,其中包含約178h 的開(kāi)源版數(shù)據(jù),采樣率為16kHz。Primewords 包含了大約100h 的中文語(yǔ)音數(shù)據(jù)。
使用聲學(xué)模型搭建語(yǔ)言模型進(jìn)行實(shí)驗(yàn),聲學(xué)模型采用DFCNN 作為baseline,并改進(jìn)為文本提出的DRCNN,語(yǔ)言模型則采用HMM 和transformer-encoder,使用HMM 作為baseline。采用四個(gè)數(shù)據(jù)集音頻fbank 幀序列以及其拼音數(shù)據(jù)。Fbank 幀長(zhǎng)為15ms,幀移為10ms,提取fbank200 維的語(yǔ)音特征。構(gòu)建序列語(yǔ)音長(zhǎng)度為1600 幀(大約為16s),超過(guò)該長(zhǎng)度的語(yǔ)音信號(hào)剔除掉不作處理。聲學(xué)模型采用采用5 大層3×3 的CNN 的結(jié)構(gòu),每一層使用兩小層CNN,卷積深度依次由淺到深,分別為32、64、128、256、256,且所有的卷積核步長(zhǎng)都為2。池化層采用NiN 網(wǎng)絡(luò)中提出的全局平均池化。其中每一層的CNN 前都使用Batch Normalization加以處理。最后使用全連接層縮放到拼音詞表維度,送入CTC解碼,輸出層為CTC 的損失函數(shù)。采用Adam 優(yōu)化器,初始學(xué)習(xí)率設(shè)置為0.001,采用指數(shù)學(xué)習(xí)率衰減,設(shè)置warm-up 預(yù)熱機(jī)制,訓(xùn)練到100pochs。降低到0.1 左右。語(yǔ)言模型,數(shù)據(jù)采用四個(gè)數(shù)據(jù)集訓(xùn)練樣本,即帶聲標(biāo)的拼音以及所對(duì)應(yīng)的漢字?jǐn)?shù)據(jù),模型搭建一個(gè)6 層的transformer-encoder 結(jié)構(gòu),輸入數(shù)據(jù)為拼音的度獨(dú)熱編碼,輸出為漢字的向量。設(shè)置初始學(xué)習(xí)率設(shè)置為0.003,采用預(yù)熱機(jī)制,采用指數(shù)學(xué)習(xí)率衰減,訓(xùn)練大約50epoch,即可得到較好的語(yǔ)言模型。
基于以上實(shí)驗(yàn),統(tǒng)計(jì)在四個(gè)數(shù)據(jù)集合中測(cè)試集的中文語(yǔ)音識(shí)別字錯(cuò)誤率。字錯(cuò)誤率的計(jì)算為計(jì)算預(yù)測(cè)與標(biāo)準(zhǔn)標(biāo)簽的編輯距離與總字的個(gè)數(shù)的比例。
采用上述實(shí)驗(yàn)得到的聲學(xué)模型和語(yǔ)言模型,對(duì)四個(gè)數(shù)據(jù)集的測(cè)試集綜合進(jìn)行驗(yàn)證,實(shí)驗(yàn)數(shù)據(jù)結(jié)果字錯(cuò)誤率如表2 所示,證明本文所提出的改進(jìn)CNN聲學(xué)模型,及transformer-encoder的語(yǔ)言模型,在四個(gè)數(shù)據(jù)集的測(cè)試集上平均WER 降低到19.12。相比傳統(tǒng)DFCNN-HMM 而言的23.15 比較,詞錯(cuò)誤率降低了4.03%。并且統(tǒng)一在transformer 語(yǔ)言模型下,采用不同聲學(xué)模型來(lái)實(shí)驗(yàn),得到數(shù)據(jù)顯示,本文所提出的DRCNN 模型相比傳統(tǒng)DFCNN 模型大約有2.28%提升。在統(tǒng)一的DRCNN 模型下,采用transformer 語(yǔ)言模型相比HMM 語(yǔ)言模型,WER 大約提升了1.76%。本文所提出的DRCNN 聲學(xué)模型及transformer 語(yǔ)言模型,在傳統(tǒng)的DFCNN 模型及HMM 語(yǔ)言模型基礎(chǔ)上語(yǔ)音識(shí)別效果均有所提升。
表2 實(shí)驗(yàn)結(jié)果WER
本文提出一種改進(jìn)的CNN 聲學(xué)模型結(jié)構(gòu),通過(guò)卷積神經(jīng)網(wǎng)絡(luò)構(gòu)建深度CNN,并融入殘差機(jī)制,全局平均池化網(wǎng)絡(luò)等,使用SENet 機(jī)制對(duì)殘差網(wǎng)絡(luò)進(jìn)行通道上的權(quán)重,提取強(qiáng)相關(guān)特征,弱化無(wú)關(guān)特征,學(xué)習(xí)到深層的語(yǔ)音特征表示。使用NiN 網(wǎng)絡(luò)多特征進(jìn)行多通道融合以及對(duì)上下層參數(shù)進(jìn)行降維。并采用鏈接時(shí)序分類(lèi)CTC 對(duì)語(yǔ)音特征進(jìn)行解碼,并且采用transformer 的encoder 語(yǔ)言模型,學(xué)習(xí)中文漢字的語(yǔ)言特征。解決了傳統(tǒng)語(yǔ)音識(shí)別模塊難訓(xùn)練,難收斂等問(wèn)題。結(jié)果表明本文提出的DRCNN-CTC 模型能夠有效提高中文語(yǔ)音識(shí)別準(zhǔn)確率。