點擊上方“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)