[转]kaldi基于GMM作分类问题

转自:http://blog.csdn.net/zjm750617105/article/details/55211992前端

对于每一个类别的GMM有几种思路: 
第一是将全部训练数据按类别分开每类的数据训练一个GMM模型 
第二是将全部的数据训练一个UBM模型,而后将训练数据按类别分开,用MAP去训练每一个类别的GMM(对角UBM的MAP貌似kaldi 没有) 
第三就是将全部的数据训练一个UBM模型,而后不作MAP,直接用训好的UBM所GMM的初始值,而后将全部训练数据按类别分开,训练三个GMM模型在第一种方法的GMM初始化用训好的UBMvim

准备测试集数据,若是训练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

相关文章
相关标签/搜索