1. 程式人生 > >語音識別工具Kaldi 筆記

語音識別工具Kaldi 筆記

一、遠端控制VS本地執行:

cmd.sh
Kaldi被設計用於與SunGrid叢集一起工作。它還與其他叢集一起工作。我們想在本地執行它,它也可以這樣做。通過設定cmd.sh變數:而不是用 queue.pl.

export train_cmd=run.pl
export decode_cmd=run.pl

訓練階段和測試階段,仍被分成多個jobs,分別處理不同的資料集。

二、訓練識別器

steps/train_mono.sh [options] <training-data-dir> <lang-dir> <exp-dir>
  • training-data-dir
    是提前準備好的訓練資料的路徑。
  • lang-dir 是包含所有語言模型檔案目錄的路徑,也可以提前準備。
  • expr -dir是訓練儲存其所有輸出的路徑。如果它不存在,它將被建立。
    2、配置和選項
    train_mono指令碼有許多配置選項。它們可以通過將它們作為標記傳遞給指令碼:如下所示:--<option-name> <value>--。或者將它們全部放入一個配置bash指令碼中,並新增標記--config <path>。還可以通過編輯steps/train_mono中的預設設定來設定它們。

  • nj 並行執行的jobs數。預設為4

  • cmdjob 呼叫指令碼 ,預設為run.pl
  • scale_opts獲取一個字串(用引號括起來)來控制縮放選項。預設為--transition-scale=1.0 --acoustic-scale=0.1 --self-loop-scale=0.1
  • transtic-scale預設為1.0
  • acoustic-scale預設為0.1
  • self-loop-scale預設為0.1
  • num_iters訓練迭代次數,預設為40
  • max_iter_inc增加高斯數量的最大值,預設為30
  • totgauss高斯的目標值,預設為1000
  • careful傳遞給gmm-align-compiled。引用它的文件:“如果是真的,要做careful的對齊,這樣更容易檢測到對齊是否失敗(包括對解碼圖進行迴圈)。“(預設false)
  • boost_silence在對齊時可以提高靜音段的似然性( Factor by which to boost silence likelihoods in alignment)。預設為1.0
  • realign_iters重新對齊時的迭代次數(預設1 2 3 4 5 6 78 9 10 12 14 16 18 20 23 26 29 32 35 38)
  • power 從發生計數中確定高斯分佈的指數,預設0.25
  • cmvn_opts選項將被傳遞到cmvn——比如scale_opts
  • stage如果程式崩潰了,這將允許您跳過一些步驟。階段變數設定開始的階段。下一節將討論各個階段(預設-4)
    3、在訓練階段工作的並行是什麼
    在訓練期間,訓練集可以分開,每個不同的過程在不同的話語子集上訓練,每個迭代被合併。

三、初始化階段

1、初始化GMM(Stage -3)
/kaldi-truck/src/gmmin/gmm-int-mono.這定義了一開始有多少個GMM模型。
2、編譯訓練圖(Stage -2)
/kaldi-trunk/source/bin/compile-training-graphs ,用--help 選項獲得更多資訊。請參閱文件的這一部分:http://kaldi.sourceforge.net/graph_recipe_train.html
3、平等的對齊資料(Stage -1)
建立一個等間距的對齊,作為進一步調整階段的起點。用/kaldi-trunk/source/bin/align-equal-compiled .使用--help 選項獲得更多的資訊。
4、估計高斯函式(Stage 0)
基於gmm的聲學模型進行最大似然估計。使用/ kaldi-trunk / src / gmmbin / gmm-est。用-help選項呼叫更多資訊。這個指令碼說明:
在接下來的步驟中,--min-gaussian-occupancy=3選項很重要,否則我們將無法使用“rare”的phones.之後,它們永遠不會正確對齊。

四、訓練(Stage=Iteration completed)

每次迭代都執行了許多步。
1、重新對齊
如果迭代是realign_iters的其中之一,那麼:
- Boost Silence
Silence 被提升用/kaldi-trunk/src/gmmbin/gmm-boost/silence,--help選項獲得更多資訊。值得注意的是,它並不一定會提高silence phone (但它在這個培訓案例中確實如此),它可以提升任何phone。它通過修改GMM的權重來做到這一點。
- 對齊
給定的GMM模型的特徵被對齊。用/kaldi-trunk/src/gmmbin/gmm-align-compiled.用 --help 選項獲取更多資訊。
2、重新估計GMM模型
第一個積累的統計資料,在下一步中使用。這是用/kaldi-trunk/src/gmmbin/gmm- accs -states-ali完成的。用--help選項獲得更多資訊。
然後重做基於gmm的聲學模型。這是用/kaldi-trunk/src/gmmbin/gmm-est完成的,但是使用了不同的引數。再一次用--help選項來獲取更多資訊。
3、合併GMMs
然後,通過使用gmm-acc-sum來生成一個模型(a.mdl檔案),然後合併來自分段訓練資料集的所有不同的GMMs。可以使用/kaldi-trunk/src/gmmbin/gmm-info對模型進行檢查,得到關於高斯分佈的一些非常基本的資訊。
最後,增加gausans的數量(由max_iter_inc限制),這樣當所有的迭代(num_iters)都完成時,它將接近gausans (totgauss)的目標總數——假設max_iter_inc沒有限制它。

五、製作譯碼圖

如前所述,語法(G)可以由詞典 (L)組成,從而得到一個音素到字的對映。
這篇部落格文章詳細介紹了創作的細節。這將是資料準備步驟的一點修改。

util/mkgraph.sh 的使用方法 :最後的圖使用util/mkgraph.sh建立的。對該指令碼的介紹:建立一個完全擴充套件的譯碼圖(HCLG),它代表我們模型中的所有語言模型、語音字典(lexicon)、上下文依賴關係和HMM結構。輸出是一個有限狀態機,它在輸出上有word-id,在輸入上有pdf-id。

它還建立了前面提到的上下文依賴圖。使用:

utils/mkgraph.sh [options] <lang-dir> <model-dir><graphdir>

lang-dir 和前面一樣,目錄中包含所有語言模型檔案的路徑
model-dir 是前一個traino -mono步驟的exp -dir,它現在包含了經過訓練的模型
graph-dir 是將最終圖形放入的目錄。在示例指令碼中,這是在expr -dir下作為一個圖子目錄生成的。如果它不存在,它將被建立。

六、上下文選項

有三個選項可以定義使用多少phone來建立上下文。這些都作為utils/mkgraph.sh指令碼的傳遞選項。

  • –mono 為單因素模型。例一個音素沒有上下文(在steps/train_mono.sh中使用)
  • no flag(default) 為三因素模型。
  • --quinphone為五音子模型 。
  • 擴充套件mkgraph指令碼以建立任意長度的上下文並不困難。mkgraph指令碼的部分負責這個,使用/kaldi-trunk/src/fstbin/fstcomposecontext,檢視它的——幫助獲取更多資訊。