記錄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 多一個輸入引數,這裡我們使用WFST圖中各個轉移機率進行解碼(採用faster-decoder)得到最佳路徑而不是隨機生成的路徑。

Usage: gmm-align-compiled [options] \

[scores-wspecifier]

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