基于WFST的语音识别解码器
學(xué)習(xí)語音識別有些時間了。老板要求我們基于Kaldi搭一個語音識別系統(tǒng),在設(shè)備上通過MIC講話,連著設(shè)備的PC的console上就能基本實時顯示出講話的內(nèi)容。由于我們都是小白,剛開始可以要求低些,就用傳統(tǒng)的GMM-HMM,能實現(xiàn)孤立詞識別就算達標了,后面隨著這方面能力的提高,再做更難一點的。任務(wù)下達后我根據(jù)之前對kaldi的簡單理解把模塊分成了三部分:數(shù)據(jù)準備和MFCC、GMM-HMM、解碼網(wǎng)絡(luò)創(chuàng)建和解碼,由三個人每人負責(zé)一部分學(xué)習(xí),掌握基本原理,搞清楚有哪些事情要做。在其他兩個同學(xué)先挑了模塊后就由我來負責(zé)解碼網(wǎng)絡(luò)構(gòu)建和解碼部分了。
?
我們?nèi)齻€學(xué)習(xí)了kaldi兩三個星期后感覺下來kaldi不是很容易上手,主要原因有四。一是我們都是新手,語音識別領(lǐng)域的一些概念和套路還沒完全搞清楚。二是kaldi的文檔偏少,不利于代碼的理解。三是kaldi是算法和工具的集合,語音識別的整個流程是靠很多復(fù)雜的shell和Perl腳本把這些工具串起來實現(xiàn)的,不易讀。四是kaldi是用C++實現(xiàn)的,而我們先前主要是用C開發(fā)軟件(芯片公司的軟件工程師多數(shù)都是在底層用C開發(fā)軟件)。我們克服了這些困難,理出了每個模塊有哪些事情要做,也搞清楚了軟件實現(xiàn)分訓(xùn)練和識別兩大部分,有些模塊在訓(xùn)練和識別中都有,比如MFCC,而有些模塊只在訓(xùn)練中有。訓(xùn)練是給識別做準備的,訓(xùn)練得到聲學(xué)模型、字典和語言模型,并基于WFST將這三個合并成一個大的解碼網(wǎng)絡(luò)用于識別中。真正運行起來的語音識別系統(tǒng)只有識別部分的軟件在運行。
?
具體到我負責(zé)的解碼,主要有兩大部分組成,一是生成解碼網(wǎng)絡(luò),二是基于解碼網(wǎng)絡(luò)解碼。這里面的重中之重就是WFST(加權(quán)的有限狀態(tài)轉(zhuǎn)換器)。WFST屬于半環(huán)代數(shù)理論。我是學(xué)控制出身,讀本科時學(xué)了高數(shù)、矩陣、概率論等,讀研究生時對矩陣進行了更深入的學(xué)習(xí)(控制學(xué)科對矩陣的要求較高),其他數(shù)學(xué)分支都沒學(xué)過,半環(huán)代數(shù)理論顯然是新東西。由于相關(guān)基礎(chǔ)沒有,學(xué)習(xí)起來不是很輕松,網(wǎng)上也說這學(xué)科對學(xué)數(shù)學(xué)和計算機理論的人學(xué)起來輕松些。現(xiàn)階段我們只是搭語音識別系統(tǒng),不需要深入研究算法,再加上時間也不允許(老板給我們定下了dealline),就僅僅了解了WFST的基本原理,后面就通過具體的例子來熟悉腳本和代碼流程。Kaldi里有兩種類型的解碼器:offline 和 online。yesno就是最簡單的offline解碼器的例子,通過運行這個例子基本搞清楚了相關(guān)腳本和函數(shù)的意思。因為我們要搭的是在線實時系統(tǒng),offline的參考性不大,也就沒太關(guān)注,轉(zhuǎn)而去看kaldi里的online decoder了。kaldi里的online decoder有兩個版本:online(老版本) 和online2(新版本)。官網(wǎng)推薦用online2(基于例子RM(resource management)),并且聲稱要逐漸把老版本online廢棄掉。但是現(xiàn)在RM的語料庫無法從網(wǎng)絡(luò)上下載到,所以例子RM就無法運行,只能去用老版本的online了。還好好多使用者說還是老版本的online好用,總算給我吃了一顆定心丸。看了相關(guān)的博客,都是基于kaldi里的唯一的中文識別的例子thchs30來做在線解碼的。根據(jù)博客的指導(dǎo),先下語料庫,做各種訓(xùn)練得到解碼網(wǎng)絡(luò)等。再下載portaudio,使能從PC的MIC上采集到語音數(shù)據(jù)。最后改寫腳本運行,這樣一個在線解碼的例子就跑起來了,PC的console上實時顯示出了說的文字。在代碼里加些log跟蹤一下,也就搞清楚了在線解碼時軟件實現(xiàn)的機制和各種調(diào)用過程。
?
就這樣解碼相關(guān)的除了算法外其他的基本都搞清楚了。按照慣例,要做PPT給組內(nèi)同學(xué)講,讓大家共同提高。我就根據(jù)自己的理解做了語音識別解碼器相關(guān)的內(nèi)容(一些圖片還是借用了各種文檔和博客里的,再此表示感謝,就不一一列出了)。下面就是我做的PPT的內(nèi)容,給有需要的朋友看看。如果有錯誤,煩請指出,非常感謝!
總結(jié)
以上是生活随笔為你收集整理的基于WFST的语音识别解码器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [css] 如何禁止长按保存或复制图像
- 下一篇: [css] 举例说明with属性的fi