轉自:http://blog.csdn.net/zjm750617105/article/details/55211992前端
對於每一個類別的GMM有幾種思路:
第一是將全部訓練數據按類別分開,每類的數據訓練一個GMM模型
第二是將全部的數據訓練一個UBM模型,而後將訓練數據按類別分開,用MAP去訓練每一個類別的GMM(對角UBM的MAP貌似kaldi 沒有)
第三就是將全部的數據訓練一個UBM模型,而後不作MAP,直接用訓好的UBM所GMM的初始值,而後將全部訓練數據按類別分開,訓練三個GMM模型(在第一種方法的GMM初始化用訓好的UBM)vim
準備測試集數據,若是訓練GMM是用的是原始的MFCC特徵的話,也就是不通過add-delta apply-cmvn selected-voiced 等操做的話,那就直接用測試集的MFCC特徵的feats.scp文件就行了。
可是若是你的特徵在訓GMM的腳本里通過一些處理,那就是按照相同的處理,意思就是在輸入模型以前特徵的前端處理必須保持一致
好比:app
select-voiced-frames scp:feats.scp scp:vad.scp ark:- | compute-cmvn-stats ark:- ark:- | apply-cmvn --norm-vars=false ark:- scp:feats.scp ark:- | add-deltas --delta-window=3 --delta-order=2 ark:- ark:- | select-voiced-frames ark:- scp:vad.scp ark,t:final_feats.txt #通過處理以後的特徵在final_feats.txt中,能夠直接vim打開驗證一下維度對不對.
訓好三個diag_GMM以後, 能夠直接用kaldi的工具進行計算對數似然值:工具
#這個能夠,計算的每一幀的似然值 gmm-global-get-frame-likes final.dubm scp:feats.scp ark,t:F_likes #對每一幀的似然值取平均,每句話獲得一個似然值 gmm-global-get-frame-likes --average=true final.dubm scp:feats.scp ark,t:F_likes #因爲上面測試集的數據是 final_feats.txt,那麼咱們的腳本就是: gmm-global-get-frame-likes --average=true final.dubm ark,t:final_feats.txt ark,t:F_likes #獲得的輸出文件F_likes,內容格式: uttId score
計算似然值的公式也很簡單,不少現有值在GMM的模型裏已經算出來了, weights , gconst , invvars, means_invvars直接根據這些結果只進行計算就能夠了。測試
訓練獲得的diag gmm 模型是 final.dubm ,能夠用轉化成文本
spa
gmm-global-copy --binary=false final.dubm final_dubm.txt
.net