廖盛澨,曾 俊,徐 崇
(江西應(yīng)用技術(shù)職業(yè)學院,江西 贛州 341000)
智能語音識別技術(shù)(Automatic Speech Recognition,ASR)是以人類語音為輸入的新型交互技術(shù)。通過智能語音識別技術(shù),人類可以與機器進行“交流”,機器能夠聽懂人類的語言,并且能夠反饋結(jié)果給人類。智能語音識別系統(tǒng)主要由語音的采集與識別、語義的理解以及語音的合成組成。實際上,人們在20 世紀50 年代就開始研究智能語音識別技術(shù),時至今日,語音識別技術(shù)已經(jīng)取得突破性的進展。智能語音識別是實現(xiàn)人機智能交互最好的入口,也是完全機器翻譯和自然語言理解的基礎(chǔ)。特別是近年來,大數(shù)據(jù)和云計算時代的到來,加上深度神經(jīng)網(wǎng)絡(luò)技術(shù)的進步,語音識別系統(tǒng)的性能獲得了顯著的提升。語音識別技術(shù)也逐步走向?qū)嵱没彤a(chǎn)品化,智能語音識別技術(shù)在物聯(lián)網(wǎng)產(chǎn)品中也得到更廣泛的應(yīng)用。從各種離線物聯(lián)網(wǎng)(Internet of Things,IoT)設(shè)備,再到各種公共服務(wù)和智慧政務(wù)等場合的應(yīng)用,智能語音識別技術(shù)正在逐步影響人們的生活。
目前常用的語音識別工具有CMU Sphinx、HTK、Julius、ISIP 及Kaldi。其中,Kaldi 是由Dan Povey 博士和BUT 大學合作開發(fā)的一套完整的語音識別套件[1]。Kaldi 的文檔覆蓋全面,代碼靈活易于擴展。作為一個開源項目,Kaldi 的社區(qū)比較活躍,版本穩(wěn)定。而且,Kaldi 同時包括了語音識別解決方案中的語音和深度學習方法。Kaldi 智能語音識別算法主要由C++編程語言實現(xiàn),作為一個跨平臺的相對輕量級的智能語音識別算法,比較適合移植到嵌入式領(lǐng)域中。
語音識別原理比較復(fù)雜,主要分為前端處理和后端處理兩部分,系統(tǒng)結(jié)構(gòu)如圖1 所示。其中,前端處理是對麥克風采集的音頻數(shù)據(jù)做處理,主要過程可分為端點檢測、降噪及語音特征提?。缓蠖颂幚碇饕菍σ纛l數(shù)據(jù)與聲學模型、語言模型進行匹配,以及對音頻數(shù)據(jù)的解碼。
圖1 語音識別系統(tǒng)結(jié)構(gòu)框圖
端點檢測也叫語音活動檢測(Voice Activity Detection,VAD),它的目的是從帶有噪聲的語音中準確地定位出語音的開始點和結(jié)束點,去掉靜音的部分,降低對后續(xù)步驟造成的干擾[2]。
降噪又稱噪聲抑制(Noise Reduction),麥克風采集到的音頻通常會有一定的噪音,如果噪聲較大,會對語音識別產(chǎn)生較大的影響,比如影響語音識別率,導(dǎo)致端點檢測靈敏度下降等。所以,噪聲抑制在語音的前端處理中顯得尤為重要。
特征提取是將預(yù)處理之后的語音的特征值提取出來,由于語音波形在時域上的表述能力很弱,需要將語音做波形轉(zhuǎn)換。常見的一種變換方法為MFCC 特征值提取。
聲學模型、語言模型和解碼器是語音識別系統(tǒng)最重要也是最復(fù)雜的部分。聲學模型主要用來構(gòu)建輸入語音和輸出聲學單元之間的概率映射關(guān)系;語言模型用來描述不同字詞之間的概率搭配關(guān)系;解碼器負責結(jié)合聲學單元概率數(shù)值和語言模型在不同搭配上的打分進行篩選,最終得到最可能的識別結(jié)果[3]。
Kaldi 是當前最流行的開源語音識別工具(Toolkit),它使用有限加權(quán)狀態(tài)轉(zhuǎn)換機(Weighted Finite State Transducers,WFST)來實現(xiàn)解碼算法。Kaldi 的主要代碼由C++語言編寫,在此基礎(chǔ)上使用bash 和python 腳本做了一些工具,比較適合移植到嵌入式設(shè)備當中。此外,Kaldi 開源社區(qū)相對于其他開源社區(qū)更加活躍,可以更高效地得到技術(shù)反饋。因此,Kaldi 是物聯(lián)網(wǎng)應(yīng)用的較好選擇。
Kaldi 的框架如圖2 所示,最上面是外部的工具,包括線性代數(shù)庫BLAS/LAPACK 和OpenFst。中間是Kaldi 的庫,包括HMM 和GMM 等代碼,接下來是可執(zhí)行程序,最下面則是一組腳本,用于實現(xiàn)語音識別的不同步驟(比如特征提取、訓(xùn)練單因子模型等)。
圖2 Kaldi 框架圖
以前常用的聲學模型是GMM-HMM 模型,由于建模能力有限,無法準確地表征語音內(nèi)部復(fù)雜的結(jié)構(gòu),因此識別率低。Kaldi 支持DNN-HMM 聲學模型。相比于GMM-HMM 模型,DNN-HMM 模型加入了深度學習模型,不需要假設(shè)聲學特征所服從的分布,所使用的特征是FBank,這個特征保持著相關(guān)性。為了充分利用上下文的信息,深度神經(jīng)網(wǎng)絡(luò)(Deep Neural Networks,DNN)采用連續(xù)的拼接幀作為輸入[4]。本文采用DNN-HMM 模型,在服務(wù)器中訓(xùn)練好之后,將DNN-HMM 模型移植到G1 平臺中。
本文采用煊揚G1 的嵌入式處理器作為硬件平臺。G1 是輕型AIoT 雙核芯片,內(nèi)置了一顆音頻編解碼器,是作為離線語音識別平臺的較好選擇。語音識別模型需要在服務(wù)器中訓(xùn)練好之后移植到G1平臺中?;贕1 的語音識別框架如圖3 所示。
圖3 基于G1 芯片的智能語音識別框架圖
在實現(xiàn)中,將CPU Core0 主要用做麥克風數(shù)據(jù)的采集和音頻數(shù)據(jù)的前處理,CPU Core1 運行Kaldi 語音識別套件。CPU Core0 處理完的數(shù)據(jù)是PMD 數(shù)字音頻信號。將該信號送給音頻Decoder,然后將解碼后的音頻信號傳給CPU Core1。CPU Core1 將運行Kaldi 語音識別算法,得到最終的識別結(jié)果。
基于G1 芯片的智能語音識別平臺實物如圖4 所示。本文將采用風扇作為控制對象,G1 芯片將識別后的結(jié)果發(fā)送給控制風扇的微控制單元(Micro Control Unit,MCU),從而達到利用語音控制風扇的目的。
圖4 基于G1 芯片的智能語音識別平臺實物
在G1 平臺上完成Kaldi 整套工具移植后,需要對系統(tǒng)進行測試。本文總共測試8 條命令,第一條命令為喚醒詞,如表1 所示。由于喚醒詞的識別率最能影響客戶體驗,因此針對喚醒詞在Kaldi 中做了客制化,用來提升喚醒詞的識別率。
表1 測試命令表
本文的測試方法是:先用PC 錄音工具錄取10個人的語料,然后用PC 播放器反復(fù)播放語料,來測試繼承了Kaldi 套件的G1 平臺的語音識別效果。通過抓取G1 平臺串口打印的信息,可以計算總共識別成功的次數(shù),從而計算出識別率。由于聲音的大小直接影響到識別率,本實驗在PC 中設(shè)置了三種不同的聲音大小,分別為30 dB、50 dB、70 dB。喚醒詞每種聲音大小測試2 000 次,其他命令各測試1 000 次。
測試結(jié)果如表2 所示。可以看出,喚醒詞的識別率在92.4%以上,其他7 條命令的識別率大多在85%以上。命令識別率偏低的原因主要是當時風扇正在工作,從麥克風采集的語音數(shù)據(jù)具有較大噪音。G1 作為輕型的物聯(lián)網(wǎng)芯片,搭載Kaldi 語音識別框架,選擇風扇作為控制對象,識別率能夠達到85%以上。
表2 Kaldi 智能識別算法識別率
本設(shè)計通過對開源智能語音識別套件Kaldi 的研究,將Kaldi 移植到煊揚G1 語音芯片中,將風扇作為語音控制對象,實現(xiàn)了智能語音離線識別。經(jīng)過系統(tǒng)測試,語音識別率在85%以上,證明可以滿足日常物聯(lián)網(wǎng)產(chǎn)品需求。
隨著物聯(lián)網(wǎng)芯片性能的逐步加強和5G 通信技術(shù)的普及,加上大數(shù)據(jù)技術(shù)和云計算技術(shù)的逐漸成熟,在線智能語音識別運用在物聯(lián)網(wǎng)中將會成為主流[5],識別率和識別速度將得到很大提升。如何將智能語音識別技術(shù)和云計算、大數(shù)據(jù)技術(shù)融合運用,將會是今后的研究方向。