AI大語音(七)——基於GMM的0-9語音識別系統


點擊上方“AI大道理”,選擇“置頂”公眾號

重磅干貨,細致入微AI大道理

 ——————

1 系統概要

孤立詞識別:語音中只包含一個單詞的英文識別

識別對象:0-9以及o的英文語音

訓練數據:330句話,每個字符30句話,11個字符

測試數據:110句話,每個字符10句話,11個字符

模型:混合高斯模型(GMM),k=5個分量

環境:window、Pycharm、python3.5、utils、numpy、scipy

目標:單個字符的識別准確率大於97%

流程:

 

2 訓練數據准備

本系統所用的數據為0-9(其中0的標簽為Z(Zero))和o這11個字符的英文錄音,每個語音對應的39維MFCC特征提前提取好。

系統中,每個字符用一個GMM來建模,每個GMM包含5個Gaussion分量。

在識別、預測階段,對於某句話,對數似然最大的模型對應的字符為當前語音數據的預測結果。

訓練數據:330句話,每個字符30句話,11個字符。

train文件下有語音文件、feats.ark、feats.scp、wav.scp、text文件。

wav.scp:句子id到wav的路徑的映射,所用到的數據wav文件的相對路徑。

feats.scp:語音識別工具kaidi提取的特征文件之一,句子id到特征數據真實路徑和位置的映射。

text:句子id到標簽的映射,本實驗中標簽(語音對應的文本)只能是0-9,o這11個字符。

feats.ark:語音識別工具kaidi提取的特征文件之一,特征實際存儲在ark文件中,二進制。

3 GMM模型訓練

每個GMM(0-9,o)都是用它對應的語音數據訓練,測試的時候,也只能整段語音分幀、加窗、提特征,然后在每個GMM上,計算每一幀的似然最后求和得到最終似然。

GMM模型訓練過程:

(1)MFCC特征提取已事先提取好。

(2)K-Means算法進行初始化GMM參數。

K-Means算法的思想很簡單,對於給定的樣本集,按照樣本之間的距離大小,將樣本集划分為K個簇。讓簇內的點盡量緊密的連在一起,而讓簇間的距離盡量的大。

輸入:樣本集D={x1,x2,...xm},聚類的簇樹k=5,最大迭代次數N。

輸出:簇划分C={C1,C2,...Ck}

1) 從數據集D中隨機選擇k個樣本作為初始的k個質心向量:{μ1,μ2,...,μk}

2)對於n=1,2,...,N

    a) 將簇划分C初始化為Ct=∅,t=1,2...k

    b) 對於i=1,2...m,計算樣本xi和各個質心向量μj(j=1,2,...k)的距離:

將xi標記最小的為dij所對應的類別λi。此時更新Cλi=Cλi∪{xi}

    c) 對於j=1,2,...,k,對Cj中所有的樣本點重新計算新的質心

    d) 如果所有的k個質心向量都沒有發生變化,則轉到步驟3)

3) 輸出簇划分C={C1,C2,...Ck}

算法實現:

11個GMM都要初始化,其中Z的GMM模型的初始參數為:

mu.shape (5, 39)

sigma.shape (5, 39, 39)

pi.shape (1, 5)

 

(3)EM 算法訓練GMM模型

 

算法實現:

 
        

五次迭代,每次迭代后對數似然概率都在增大。

其中:

高斯概率:gaussian(X[n], self.mu[k], self.sigma[k])

算法實現:

對數似然:calc_log_likelihood(X)

算法實現:

迭代過程:(Z的GMM模型)

(O的GMM模型)

等等。

訓練時間:17.5分鍾

4 GMM預測

測試數據:110句話,每個字符10句話,11個字符

GMM預測過程:

(1)MFCC特征提取已事先提取好。

(2)11個GMM模型已經訓練好。

(3)每個測試語音計算每一個模型的對數似然概率。

(4)對數似然最大的對應的模型即為預測輸出。

(5)將預測輸出與標簽對比,計算模型測試准確率。

可見模型3對數似然最大,即這條語音預測為“3”。

predict_target:3

測試時間:test time:  12分鍾

模型測試准確率:97.27%

 

5總結

基於GMM的11個單詞孤立詞識別准確率達97.27,滿足設計要求。

基於GMM的0-9孤立詞識別系統以詞為訓練單位,添加新詞匯需要重新進行訓練,若要涵蓋所以詞,差不多6萬個詞,訓練量極大,預測時也要計算6萬個模型的似然,哪個大預測出哪個,在實際應用中有局限性,只能應用於小詞匯量場合。

本系統識別了0-9的數字的英文單詞,但是假如有人用英文報電話號碼,是識別不了整個號碼的,甚至識別不了其中的one。

孤立詞識別這個模型無法從一連串英文號碼(里面包含了one two等多個數字)中准確識別出one,關鍵點在於連續語音中不知道哪些語音信號是one,哪些是two,或者說不知道哪些幀是one哪些幀是two,所以需要HMM進行對齊,才能進行連續語音識別。

靈魂的拷問:如果使用孤立詞識別這個模型去預測連續的一個語音,會怎么樣呢?

AI大語音:結果會是給定的類別中的一個,這就造成了誤識別。系統中只有11個類別,任何語音,即使和我們的目標語音完全無關,也會根據計算的似然結果,選擇最大的這個。就像CNN進行圖像分類一樣,輸入的圖像不管是不是類別中的,都會有一個最大輸出,都會歸於一類中。

連續語音識別如微信語音識別(語音轉文字),輸入的都是句子,而不是單個詞,這就需要GMM-HMM模型了。

附錄(魔鬼寫手)

 

——————

淺談則止,細致入微AI大道理

掃描下方“AI大道理”,選擇“關注”公眾號

           歡迎加入!

    

▼下期預告▼AI大語音(八)——基於GMM-HMM的語音識別系統

 

▼往期精彩回顧▼

AI大語音(一)——語音識別基礎

AI大語音(二)——語音預處理

AI大語音(三)——傅里葉變換家族

AI大語音(四)——MFCC特征提取

AI大語音(五)——隱馬爾科夫模型(HMM)

AI大語音(六)——混合高斯模型(GMM)



 

 

                                                                                    留你心,言你想

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM