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