李凱飛,徐凌樺
(貴州大學(xué)電氣工程學(xué)院,貴陽(yáng)550025)
語(yǔ)音識(shí)別技術(shù)在近些年發(fā)展得極為快速?;谡Z(yǔ)音識(shí)別技術(shù)的產(chǎn)品層出不窮,各類(lèi)移動(dòng)設(shè)備、智能家具、智能機(jī)器人等都已集成語(yǔ)音識(shí)別功能,極大地便利了人機(jī)交互,方便了人們的生活。語(yǔ)音識(shí)別起源于1952年,貝爾實(shí)驗(yàn)室Davis等人創(chuàng)造出一個(gè)小型語(yǔ)音識(shí)別系統(tǒng),可以識(shí)別10個(gè)英文數(shù)字發(fā)音[1],并將其轉(zhuǎn)化為文本。近年來(lái)隨著技術(shù)的發(fā)展,語(yǔ)音識(shí)別準(zhǔn)確率不斷攀升[2-4],但相關(guān)研究皆是針對(duì)英語(yǔ)或漢語(yǔ)普通話。我國(guó)是一個(gè)地大物博、人口眾多的大國(guó),擁有五大語(yǔ)系,129種語(yǔ)言[5],這些識(shí)別系統(tǒng)在面對(duì)地方方言時(shí)識(shí)別準(zhǔn)確率驟降,因此開(kāi)發(fā)針對(duì)地方方言的語(yǔ)音識(shí)別系統(tǒng)很有必要。目前針對(duì)不同方言已有一些相關(guān)研究工作,文獻(xiàn)[6]提出一種基于深度神經(jīng)網(wǎng)絡(luò)的四川方言語(yǔ)音識(shí)別方法;文獻(xiàn)[7]基于Kaldi實(shí)現(xiàn)普米語(yǔ)語(yǔ)音識(shí)別;文獻(xiàn)[8]提出一種結(jié)合注意力機(jī)制和因果卷積網(wǎng)絡(luò)的維吾爾語(yǔ)方言識(shí)別方法。貴陽(yáng)方言屬于西南官話的一支,貴陽(yáng)常住人口中有近五百萬(wàn)人使用方言交流,因此貴陽(yáng)方言識(shí)別仍然具有一定的研究?jī)r(jià)值。
工廠環(huán)境是語(yǔ)音識(shí)別的一個(gè)應(yīng)用場(chǎng)景。在工廠環(huán)境中,涉及到任務(wù)調(diào)度或交接,工作人員需要通過(guò)對(duì)講機(jī)等通話設(shè)備對(duì)接或下發(fā)工作,若發(fā)生安全事故,造成經(jīng)濟(jì)財(cái)產(chǎn)損失或人員傷亡,究竟是操作人員自身的操作問(wèn)題,還是上級(jí)錯(cuò)誤指派工作的問(wèn)題,只是口頭上的對(duì)話沒(méi)有追責(zé)的依據(jù),因此需要有相應(yīng)手段記錄進(jìn)行任務(wù)交接的對(duì)話過(guò)程,為日后查找提供相關(guān)證據(jù)。直接將語(yǔ)音進(jìn)行存儲(chǔ)需要占用大量的存儲(chǔ)空間,不合理,若能將其轉(zhuǎn)換為文本進(jìn)行存儲(chǔ)可以節(jié)省大量空間,滿足場(chǎng)景要求。
據(jù)此,嘗試基于Kaldi語(yǔ)音識(shí)別工具,構(gòu)建一個(gè)貴陽(yáng)方言工廠指令識(shí)別系統(tǒng)。
Kaldi是由美國(guó)約翰霍普金斯大學(xué)開(kāi)發(fā)的語(yǔ)音識(shí)別工具[9],是當(dāng)前最流行的開(kāi)源語(yǔ)音識(shí)別工具。
Kaldi下指令識(shí)別與傳統(tǒng)語(yǔ)音識(shí)別流程大致相同,主要步驟包括:Kaldi格式下數(shù)據(jù)準(zhǔn)備及規(guī)范、特征提取、準(zhǔn)備字典、構(gòu)建模型、訓(xùn)練模型、解碼、評(píng)價(jià)。詳解如下:
Kaldi格式下數(shù)據(jù)準(zhǔn)備及規(guī)范:自制數(shù)據(jù)集由于格式問(wèn)題,無(wú)法直接運(yùn)用在Kaldi特征提取中,因此需要預(yù)先處理,讀取音頻文件及對(duì)應(yīng)文本標(biāo)簽,生成相關(guān)文件,存儲(chǔ)說(shuō)話人信息、音頻路徑、音頻名、每句話對(duì)應(yīng)的音素與文本等信息,為后續(xù)特征提取做準(zhǔn)備。
特征提?。赫Z(yǔ)音信號(hào)含有大量數(shù)據(jù),無(wú)法將其直接作為輸入?yún)?shù)訓(xùn)練網(wǎng)絡(luò),而是需要在大量的參數(shù)中提取少量的特征。語(yǔ)音識(shí)別中常見(jiàn)的兩種特征為fbank和mfcc,前者通常使用在DNN聲學(xué)模型建模中,后者則常用在GMM聲學(xué)模型建模中。Kaldi中默認(rèn)的mfcc特征包括12維基礎(chǔ)mfcc、12維一階倒數(shù)、12維二階導(dǎo)數(shù)、1維能量、1維能量的一階倒數(shù)和1維能量的二階倒數(shù),共組成39維。由于不同麥克風(fēng)及音頻通道影響,不同說(shuō)話人不同音頻相同音素的特征都會(huì)相差較大,對(duì)于識(shí)別不利,因此特征提取完后需要進(jìn)行倒譜均值方差歸一化,得到均值0方差1的標(biāo)準(zhǔn)特征。
準(zhǔn)備字典:字典是音素與字或詞的對(duì)應(yīng),是將聲學(xué)模型和語(yǔ)言模型聯(lián)系起來(lái)的工具。Kaldi首先核查準(zhǔn)備字典的相關(guān)文件,生成Kaldi下標(biāo)準(zhǔn)語(yǔ)言文件夾并創(chuàng)建ARPA格式語(yǔ)言模型(后綴名為3gram.lm),然后轉(zhuǎn)換成FST格式(后綴名為fst),最終形成一個(gè)龐大的詞匯庫(kù),用于將音素組合成為字或單詞。
構(gòu)建模型:模型包括聲學(xué)模型和語(yǔ)言模型兩部分。聲學(xué)模型通過(guò)語(yǔ)音數(shù)據(jù)庫(kù)訓(xùn)練出來(lái),輸入為特征,輸出為音素信息。聲學(xué)模型得到了語(yǔ)音對(duì)應(yīng)的音素信息,但是還需要組合成最通順的語(yǔ)句,這就需要語(yǔ)言模型,通過(guò)對(duì)大量文本信息進(jìn)行訓(xùn)練,得到字或詞相互關(guān)聯(lián)的概率。
訓(xùn)練模型、解碼、評(píng)價(jià):構(gòu)建模型后需要訓(xùn)練,隨后解碼,將聲學(xué)模型、語(yǔ)言模型和字典這三部分整合在一起,實(shí)現(xiàn)語(yǔ)音到文本的映射。對(duì)于訓(xùn)練出來(lái)的模型,需要評(píng)價(jià)它的性能,一般采用的評(píng)價(jià)手段是測(cè)試集的字錯(cuò)誤率,錯(cuò)誤率越低模型性能越好。在Kaldi中,每構(gòu)建一個(gè)模型,都需要進(jìn)行此三步,評(píng)價(jià)每一個(gè)模型的性能。
編譯Kaldi工具包對(duì)實(shí)驗(yàn)環(huán)境有的較高的要求,同時(shí)本實(shí)驗(yàn)中DNN訓(xùn)練需要用到GPU加速運(yùn)算,因此G++、GCC、cuda、cuDNN及顯卡驅(qū)動(dòng)有明確的版本對(duì)應(yīng),本次實(shí)驗(yàn)環(huán)境詳見(jiàn)表1。
表1 實(shí)驗(yàn)環(huán)境配置
首先在GitHub下載好Kaldi數(shù)據(jù)包,從終端進(jìn)入Kaldi下tools文件夾,輸入extras/check_dependen cies.sh核查編譯Kaldi所必須的庫(kù),其中包括G++、make、automake、autoconf、git、sox、gfortran、libtool、sub version、python。用“sudo apt-get install...”語(yǔ)句安裝所需庫(kù),之后輸入sudo make編譯tools文件夾,再跳轉(zhuǎn)到src文件夾,執(zhí)行以下三步:
至此完成Kaldi的最終編譯。
實(shí)驗(yàn)自制數(shù)據(jù)集包括四部分:語(yǔ)音音頻、對(duì)應(yīng)抄本、字典、噪聲。音頻集是由十名貴陽(yáng)本地人在安靜的室內(nèi)通過(guò)手機(jī)麥克風(fēng)錄制完成,男女各半,年齡涵蓋20歲到50歲,每人錄制300條音頻,每個(gè)音頻包含一條方言指令、對(duì)應(yīng)一個(gè)TXT抄本文件,抄本文件由三人完成,保證音頻與文本相對(duì)應(yīng)。錄制三種工廠常見(jiàn)噪音:板切割及電器設(shè)備焊接、汽車(chē)生產(chǎn)車(chē)間、電機(jī)轉(zhuǎn)動(dòng)帶動(dòng)傳送帶,混合三種噪聲得到七種噪聲,將七種噪聲與純凈的音頻混合,得到24000條音頻,訓(xùn)練集包括16800條音頻,交叉驗(yàn)證集包括2400條音頻。測(cè)試集包含純凈測(cè)試集和帶噪測(cè)試集,用來(lái)測(cè)試系統(tǒng)魯棒性。純凈測(cè)試集包括600條音頻;帶噪數(shù)據(jù)集包括4200條音頻。實(shí)驗(yàn)數(shù)據(jù)集具體情況如表2所示。
表2 數(shù)據(jù)集的數(shù)據(jù)構(gòu)成
由于Kaldi對(duì)內(nèi)存占用率非常高,防止內(nèi)存不足報(bào)錯(cuò),采用單步運(yùn)行如下:
第1步:?jiǎn)我羲豀MM模型訓(xùn)練(mono):首先進(jìn)行訓(xùn)練迭代,迭代后對(duì)齊,得到單音素模型(final.mdl),建立識(shí)別網(wǎng)絡(luò),輸出有限狀態(tài)轉(zhuǎn)換器(HCLG.fst),計(jì)算WER,最后再進(jìn)行一次對(duì)齊,以便于下一步驟的三音素訓(xùn)練;
第2步:三音素HMM模型訓(xùn)練(deltas):與單音素基本相同,區(qū)別在于三音素訓(xùn)練需要進(jìn)行決策樹(shù)狀態(tài)的綁定,對(duì)單音素所有狀態(tài)的特征做擴(kuò)展,綁定上下文得到三音素狀態(tài)對(duì)應(yīng)的特征集合;
第3步:最大似然線性變換訓(xùn)練(lda_mllt):通過(guò)線性變換可以提取區(qū)分能力較強(qiáng)的特征向量,常用的方法有線性判別分析(LDA)和最大似然線性變換(MLLT)。此二法可以依據(jù)標(biāo)注信息,估計(jì)一組線性變換系數(shù),增強(qiáng)輸入特征表達(dá)能力;
第4步:說(shuō)話人自適應(yīng)訓(xùn)練(sat):使用特征最大似然線性回歸(fMLLT)技術(shù)進(jìn)行說(shuō)話人特定的特征變換,得到的新特征重新訓(xùn)練GMM模型;
第5步:quick模型訓(xùn)練(quick):此階段不進(jìn)行任何類(lèi)型的特征空間學(xué)習(xí),要做的只是綜合利用先前訓(xùn)練得到的模型的優(yōu)點(diǎn)構(gòu)建當(dāng)前模型;
第6步:深層神經(jīng)網(wǎng)絡(luò)模型訓(xùn)練(DNN):此階段訓(xùn)練主要包含兩個(gè)網(wǎng)絡(luò):特性變換網(wǎng)絡(luò)和DNN網(wǎng)絡(luò)。特性變換網(wǎng)絡(luò)用于將低維特征擴(kuò)展到高維特征,節(jié)省磁盤(pán)空間和吞吐量。特性變換網(wǎng)絡(luò)含有3個(gè)隱藏層,各層維度為40-440-440-440,產(chǎn)生9000個(gè)參數(shù);DNN網(wǎng)絡(luò)含有9個(gè)隱藏層,各層的維度為440-1024-1024-1024-1024-1024-1024-1024-3456-3456,主要是Affine Transform層(仿射變換)和Sigmoid層(非線性映射),產(chǎn)生1200000個(gè)參數(shù).另外,在DNN訓(xùn)練中,需要用到CUDA來(lái)調(diào)用GPU實(shí)現(xiàn)并行加速。
實(shí)驗(yàn)采用測(cè)試集的音素錯(cuò)誤率和字錯(cuò)誤率來(lái)表征各個(gè)階段模型的性能。其中PER1表示純凈測(cè)試集音素錯(cuò)誤率,PER2表示帶噪測(cè)試集音素錯(cuò)誤率,WER1表示純凈測(cè)試集字錯(cuò)誤率,WER2表示帶噪測(cè)試集字錯(cuò)誤率,具體數(shù)據(jù)見(jiàn)表3。
表3 不同訓(xùn)練階段的錯(cuò)誤率對(duì)比單位:%
為了更直觀表示識(shí)別結(jié)果的變化規(guī)律,由表3數(shù)據(jù)繪制折線圖,如圖1。由圖1可以看出,隨著訓(xùn)練步驟的進(jìn)行,識(shí)別錯(cuò)誤率逐步降低;在相同訓(xùn)練步驟下在純凈測(cè)試集中加入噪聲,錯(cuò)誤率會(huì)顯著上升,但隨著訓(xùn)練步驟進(jìn)行到最后一步DNN,純凈和帶噪數(shù)據(jù)集錯(cuò)誤率已相差不太大,證明最后訓(xùn)練出來(lái)的DNN模型具有較好的魯棒性。
圖1 不同訓(xùn)練階段的錯(cuò)誤率變化
從語(yǔ)音識(shí)別的發(fā)展歷程、方言識(shí)別的研究背景、語(yǔ)音信號(hào)到文本的轉(zhuǎn)換流程方面綜合考慮,針對(duì)當(dāng)下工廠環(huán)境中口頭任務(wù)調(diào)度交接依據(jù)性差、事故追責(zé)困難的問(wèn)題,對(duì)工廠環(huán)境下指令識(shí)別的研究具有實(shí)際意義。以自制的貴陽(yáng)方言工廠指令數(shù)據(jù)集作為數(shù)據(jù),以Kaldi為框架,實(shí)現(xiàn)指令識(shí)別整體流程。期間用到的數(shù)據(jù)處理、特征提取方法及關(guān)鍵訓(xùn)練算法都有詳細(xì)說(shuō)明,最終搭建完成指令識(shí)別系統(tǒng)。對(duì)比六種訓(xùn)練出來(lái)的模型,DNN模型具有最低的識(shí)別錯(cuò)誤率,魯棒性良好,滿足工廠環(huán)境下應(yīng)用要求。