記錄kaldi命令的功能,來源於網路和自己的理解
feat-to-dim
輸出特徵維度
Usage: feat-to-dim [options]
e。g。: feat-to-dim scp:feats。scp -
2。 gmm-init-mono
Initialize monophone GMM 初始化GMM
Usage: gmm-init-mono
e。g。:
gmm-init-mono topo 39 mono。mdl mono。tree
topo:是utils/prepare_lang。sh裡呼叫utils/gen_topo。pl生成的,代表HMM的拓撲結構 ,一般來說是sil有6個狀態,其他的有4的狀態。
輸出是GMM-HMM模型和tree,關於tree的分析:
可用如下命令檢視tree:
copy-tree ——binary=false exp/mono/tree
3。 compile-train-graphs
建立訓練圖,用於HMM訓練
compile-train-graphs
Usage: compile-train-graphs [options]
e。g。: compile-train-graphs tree 1。mdl lex。fst ‘ark:sym2int。pl -f 2- words。txt text|’ \
ark:graphs。fsts
構造訓練的網路,從原始碼級別分析,是每個句子構造一個phone level 的fst網路。
構造monophone解碼圖就是先將text中的每個句子,生成一個fst(類似於語言模型中的G。fst,只是相對比較簡單,只有一個句子),然後和L。fst 進行composition 形成訓練用的音素級別(phone level)fst網路(類似於LG。fst)。
在Kaldi中,單音素GMM的訓練用的是Viterbi training,而不是Baum-Welch training。用viterbi路徑代替前向後向機率的路徑,HMM的狀態轉移矩陣A就是可以靠數數來更新,對於觀察機率矩陣B,每一個HMM狀態有一個對應的GMM機率密度函式(pdf),在知道了特徵序列和對齊序列後,找出某一個HMM狀態對應的所有觀測,就得到了GMM所對應的所有觀測。知道了該GMM對應的所有觀測、該GMM的當前引數,就可以根據EM演算法更新GMM引數了。詳解:
圖的構建部分理論來自大佬
Mohri
的論文SPEECH RECOGNITION WITH WEIGHTED FINITE-STATE TRANSDUCERS由模型,決策樹,詞典對每個訓練的音訊檔案說的話構建HCLG的圖。所用的函式是
CompileGraphsFromText
4。align-equal-compiled 和 gmm-align-compiled
align-equal-compiled
Write an equally spaced alignment (for getting training started)
Usage: align-equal-compiled
e。g。: align-equal-compiled 1。fsts scp:train。scp ark:equal。ali
訓練時需要將標註跟每一幀特徵進行對齊,由於現在還沒有可以用於對齊的模型,所以採用最簡單的方法 —— 均勻對齊
根據標註數目對特徵序列進行等間隔切分,例如一個具有5個標註的長度為100幀的特徵序列,則認為1-20幀屬於第1個標註,21-40屬於第2個。。。
gmm-align-compiled
Align features given [GMM-based] models。
比 align-equal-compiled 多一個輸入引數
Usage: gmm-align-compiled [options]
e。g。: gmm-align-compiled 1。mdl ark:graphs。fsts scp:train。scp ark:1。ali
對於每一幀的特徵和其對齊(transition-id)
5。gmm-acc-stats-ali
Accumulate stats for GMM training。
Usage: gmm-acc-stats-ali [options]
e。g。: gmm-acc-stats-ali 1。mdl scp:train。scp ark:1。ali 1。acc
fst。JOB。gz 中每個key對於的value儲存一個句子中音素兩兩之間互聯的邊。gmm-acc-stats-ali 會統計每條邊(例如a->b)出現的次數,然後記錄到acc檔案中。
6。 gmm-est
gmm-est
Do Maximum Likelihood re-estimation of GMM-based acoustic model
Usage: gmm-est [options]
e。g。: gmm-est 1。mdl 1。acc 2。mdl
主要分兩部分,一部分更新TransitionModel,一部分更新GMM。
更新轉移模型:根據gmm-acc-stats-ali統計的tid出現的次數,做一個除法就可以更新轉移機率矩陣A。
更新GMM:gmm-acc-stats-ali已經得到了三個GMM引數更新公式的分子部分,方差累積量只需要減去更新後的均值的平方即可得到正確的方差更新公式。
分母部分也已幾乎得到,做一個簡單的除法就可以更新GMM的分量機率、均值、方差。
7。 gmm-sum-accs
gmm-acc-stats-ali生成的累計量分散在JOB個檔案中,該程式將分散的對應同一trans-id、pdf-id的累計量合併在一起。
gmm-sum-accs
Sum multiple accumulated stats files for GMM training。
Usage: gmm-sum-accs [options]
E。g。: gmm-sum-accs 1。acc 1。1。acc 1。2。acc
總結:
我的理解
gmm-init-mono初始化HMM-GMM模型,初始化HMM的轉移機率矩陣,GMM的均值、方差,共享音素列表等等
compile-train-graphs 對於每一句的抄本,生成G。fst然後和L。fst compose生成每句話的LG。fst,即由抄本轉為音素序列
align-equal-compiled,均勻對齊,每一個phone,平均分配所有的frame
gmm-acc-stats-ali 計算HMM GMM統計量
gmm-sum-accs 將gmm-acc-stats-ali 不同JOB生成的統計量合併
gmm-est 利用統計量更新 HMM GMM
進入迴圈迭代:
compile-train-graphs,重新進行抄本轉音素序列,生成fst檔案
gmm-align-compiled ,使用剛訓練的GMM HMM進行最大似然的對齊,給每一個音素分配幀
gmm-acc-stats-ali 計算HMM GMM統計量
gmm-sum-accs 將gmm-acc-stats-ali 不同JOB生成的統計量合併
gmm-est 利用統計量 更新 HMM GMM