語音識別筆記 (五) MFCC,搜索-解碼,嵌入式訓練
來自專欄語音識別入門筆記4 人贊了文章
歡迎大家關注我的博客 http://pelhans.com/ ,所有文章都會第一時間發布在那裡哦~
講完聲學模型的建立,現在我們就來講講它的輸入和輸出應該怎麼處理.
梅爾頻率倒譜係數(MFCC)
在一個ASR系統中,第一步要做的就是特徵提取.從前面的計算音系學部分可知,聲音的音高等信息能體現一個人的語音特性.一個人的語音特性可以體現在聲道的形狀上,如果可以準確知道這個形狀,那麼我們就可以對產生的音素進行準確的描述.
聲道的形狀在語音短時功率譜的包絡中顯示出來.而MFCCs就是一種準確描述這個包絡的一種特徵.下面講解MFCC的獲取流程.
MFCC獲取流程
1) 首先我們有一個聲譜,它長成下面這個樣子.它的橫軸代表時間,縱軸代表振幅.很常見.
2) 我們知道ASR系統的實現是基於幀的,每幀大概10ms或者20ms.這樣聲音就變成了一個一個離散的片段.因為防止分幀時信息的丟失,因此幀與幀之間是有交叉的.
3)有了幀後,我們對其進行短時快速傅里葉變換(短時FFT)就得到了頻譜.頻譜表示頻率與能量的關係.在實際應用中,頻譜大體分為線性振幅譜,對數振幅譜和自功率譜.對於對數振幅譜由於振幅進行了對數計算,因此從坐標為分貝.
有時為了將時間信息加進來,我們把這些幅度映射到一個灰度級表示,幅度越大則顏色越深.如下圖所示:
此時的聲譜就很有用啦~首先通過聲譜我們可以觀察出音素的屬性,另外通過共振幅和它的轉變可以很好的識別聲音.同事還可以直觀的評估TTS系統.
4) 準備提取包絡啦,上面我們說到在語音的頻譜圖中,峰值表示語音的主要頻率成分(共振峰),它攜帶了聲音的辨識屬性.同時我們也要獲得峰值的變化情況,總結起來我們就是要獲取這個頻譜的包絡...
下圖給出一個常見的頻譜圖,其中紅色部分就是我們想要的包絡.
為了獲取它我們先對頻譜做FFT,由於是在頻譜上做,所以相當於逆傅里葉變換(IFFT),需要注意的是我們是在頻譜的對數域上處理的,此時在對數頻譜上做IFFT就相當於在一個偽頻率坐標軸上描述信號.
下圖給出結果,可以看到,包絡主要由在偽頻率坐標軸上的低頻部分描述,而細節部分則主要由高頻部分描述.因此我們將頻譜 處理得到x[k]加一個低通濾波器就可以得到包絡了.
上述六成總結如下圖所示:
5) 我們上面獲得了倒譜,那什麼是梅爾倒譜呢?
想了解它就要首先說一說梅爾頻率,實驗發現,人耳就像一個濾波器一樣,在低頻部分(1000Hz以下)性能超級好,但高頻部分感覺就沒那麼靈敏了.因此人耳是一個非線性系統,梅爾頻率就是基於該想法,它將不統一的頻率轉回統一的頻率,在梅爾頻域內,人對音調的感知度為線性關係.
將普通頻率轉化為梅爾頻率的公式為:
用圖表示為:
梅爾頻譜上面獲得的倒譜係數就成為梅爾頻率倒譜係數,簡稱MFCC.
小結
- 先對語音進行預加重、分幀和加窗;(加強語音信號性能(信噪比,處理精度等)的一些預處理)
- 對每一個短時分析窗,通過FFT得到對應的頻譜;(獲得分布在時間軸上不同時間窗內的頻譜)
- 將上面的頻譜通過Mel濾波器組得到Mel頻譜;(通過Mel頻譜,將線形的自然頻譜轉換為體現人類聽覺特性的Mel頻譜)
- 在Mel頻譜上面進行倒譜分析(取對數,做逆變換,實際逆變換一般是通過DCT離散餘弦變換來實現,取DCT後的第2個到第13個係數作為MFCC係數),獲得Mel頻率倒譜係數MFCC,這個MFCC就是這幀語音的特徵;(倒譜分析,獲得MFCC作為語音特徵)
這樣就可以通過這些倒譜向量對語音分類器進行訓練和識別了。
解碼
解碼就是在此處指的是給定聲學觀察量的情況下,我們怎樣選取最高先驗概率的文本.這裡我們採用維特比演算法對其進行解碼.任務就選用數字識別任務,因為它比較簡單,辭彙量也小.
首先我們明確一下HMM模型的基本組分:
表示一系列子音素狀態.
表示轉移矩陣A,一個狀態可以轉移到下一個狀態也可以轉回自身.
可觀察量的似然值,也叫發射概率:由子音素態i產生倒譜特徵向量 的概率.
明確以上變數後,我們需要知道HMM的結構,對於數字識別任務來說它可以來自於詞典和發音詞典.這樣對於每個數字的HMM結構,我們講發音詞典中的音素分為三個子音素,並把他們連接起來.為了更符合實際,我們還在每個音素之間加上靜音狀態.將他們連在一起就形成如下圖所示的狀態.
好了,準備工作結束,可以用維特比演算法了.
每維特比運算元 表示在HMM的狀態j時,它通過了最可能的狀態序列 並生成了可觀察狀態 的概率.公式表達為:
其中:
是時間t-1的維特比運算元;
是狀態 轉移到 的概率;
表示發射概率;
給定了以上狀態後,我們就可以使用前面介紹的維特比演算法進行計算了.下面給出維特比演算法的流程以便回憶.
好了,上面對數字識別任務的解碼做了簡要概述,但實際應用中可不是每個詞的開始和結束都那麼明顯,往往都是一個詞直接連著下一個詞,對於這種情況我們需建立對應的HMM結構,下圖給出一個2-gram的HMM結構.
此時一個詞的結尾子音素直接轉移到下一個詞的開始子音素,當然這種轉移我們可以藉助 來幫助我們解決.下圖給出此時的維特比格點圖:
嵌入式訓練
在之前的部分,我們完成了聲學特徵向量提取,聲學模型的建立,HMM的解碼等部分,現在我們來介紹訓練部分.
最理想的情況是使用手動標記的標籤數據集,其中每個聲音中的詞都被手動分開標記,並且其中的音素也都被很好的標記.我們只需要簡單的對其進行統計學習得到轉移矩陣A和發射概率B即可.但現實是人工對每幀進行標記工作量太大了甚至不可能完成,因此語音標記系統會在整個句子上對每個音素進行嵌入式訓練,它將在訓練步驟中自動完成辭彙切分,音素對齊的工作.下面以簡單數字語音識別系統來作為例子介紹.
數字識別任務中的每個波形文件包含一串數字,同事該數據集還提供了發音詞典和音素集等同來定義HMM的狀態(未訓練).這樣,對於每個句子,我們就可以建立一系列的HMM狀態了,如下圖所示.
現在我們可以使用Baum-Welch演算法來對其進行訓練得到轉移矩陣A和發射概率B.其中A的初始化可以設置為0.5或0.B的初始化概率可以通過設置高斯函數的均值和方差等於全體訓練數據集的均值和方差.
除了上面的Baum-Welch演算法外,我們還有另一個更高效的訓練方法-Viterbi 訓練.它不是採用BW演算法的那種累加所有可能路徑的方式,而是只計算最優的概率路徑.這種在訓練數據集上跑Viterbi演算法的方法叫維特比對齊或強制對齊(forced alignment),
在維特比訓練中,我們知道哪個詞對應的觀察量,所以我們可以通過設定合適的轉移概率強制使維特比演算法通過確定的詞.因此強制維特比演算法就被簡化成了通常的維特比解碼問題,即只需要指出正確的音素狀態序列而不需要考慮詞序列.因此強制對齊的結果就是一條對應於訓練可觀察序列的最佳路徑.我們就可以用這種對齊 的HMM狀態到可觀察態上來重新計算HMM的參數.重複這個過程知道HMM的參數收斂即可.
絮叨
基於GMM-HMM的語音識別框架算是大體寫完了,但腦海中還是有很多模糊的地方,因此上面有可能存在一些理解不到位寫錯的地方,如有發現還請指正.接下來還剩一個語音識別的高級話題了,寫完那部分就是大體寫一下基於深度學習的語音識別框架.也就是還剩下3講左右.再然後就是上Kaldi實戰了...到時候理解更深了就回來再審閱一下上面的內容....
推薦閱讀:
※語音識別
※態度不好語氣差?客服與客戶誰之錯?極限元基於情感識別技術的呼叫中心錄音質檢方案有解
※三步走,打造高效催收的「神葯」!
※基於金融大數據的用戶畫像
※想撩外國妹紙,你需要島國推出的這款翻譯神器!