1. 程式人生 > >Kaldi結果檔案視覺化檢視

Kaldi結果檔案視覺化檢視

目錄

L.fst

tree

樣例是用自己的資料跑的,改編自wsj,檔名稱不是很標準,但重點是工具的使用,加路徑是為了好理解,內容暫時不解釋,以後有時間來補充。

這個文件太棒了,理解每一個步驟,語音識別的整個流程也就懂了,太贊

L.fst

1. 檢視生成的字尾為fst的狀態機檔案,比如用基於lexicon生成的L.fst檔案

 kaldi/tools/openfst-1.3.4/bin/fstprint L.fst | head -n 10

0    1    0    0    0.693147182
0    1    1    0    0.693147182
1    1    1    1
1    3    41    2
1    4    9    3
1    5    9    3
1    6    50    4
1    1    3    5    0.693147182
1    2    3    5    0.693147182
1    1    2    6    0.693147182


這裡全是狀態編號,音素編號,我們加上in out的symbol, 再來看一下:
kaldi/tools/openfst-1.3.4/bin/fstprint --isymbols=phones.txt --osymbols=words.txt L.fst | head -n 15

0    1    <eps>    <eps>    0.693147182
0    1    SIL    <eps>    0.693147182
1    1    SIL    !SIL
1    3    l    0
1    4    y    1
1    5    y    1
1    6    b    8
1    1    NSN    <NOISE>    0.693147182
1    2    NSN    <NOISE>    0.693147182
1    1    SPN    <SPOKEN_NOISE>    0.693147182
1    2    SPN    <SPOKEN_NOISE>    0.693147182
1    1    SPN    <UNK>    0.693147182
1    2    SPN    <UNK>    0.693147182
1    7    y    一
1    9    zh    丁

MFCC&FBANK

2.檢視生成的特徵檔案是最常用的,比如 MFCC FBANK , 我們可以把特徵提取出來用到其他的地方。 字尾是ark.
~/kaldi/src/featbin/copy-feats ark:raw_mfcc_test_hires.1.ark ark,t:- | head

10004_20131215_1500  [
  119.0376 -20.32184 -5.752641 -4.167009 -11.58426 -1.337468 -7.541201 12.98721 -1.089335 14.15153 -12.38381 11.27721 12.04524 7.761714 3.874496 3.799245 3.997328 9.124523 10.90271 4.434446 -1.662033 2.691407 0.189684 -0.5175514 -0.6428261 2.352945 3.224356 -1.128094 -0.3864679 -3.433785 -1.603787 2.32985 1.756699 -5.722286 -0.9243896 -3.551574 -1.636747 3.108243 -3.937289 2.92369 
  119.1508 -19.12406 -2.126905 -4.897838 1.783538 6.32558 1.863739 15.13863 0.264082 10.16311 -3.020157 10.0787 9.172827 10.3625 -0.9937901 -9.649223 -6.279063 2.917279 0.9189801 -8.659749 -7.546872 0.6900706 1.389359 -0.2164259 -0.3871719 1.281542 -0.9054519 -1.893233 -6.873401 -10.39719 -6.552455 3.396601 4.599606 -4.050654 8.241162 1.120707 -3.35814 -3.003432 -0.601518 2.619267 
  118.9244 -15.58515 2.636317 -7.382653 -5.063384 17.41087 10.11115 16.57291 1.31674 -3.213301 -14.29911 -1.906423 -0.3702135 -2.695652 0.3693304 -2.483643 -2.623828 1.305008 -1.192529 1.51228 0.9064405 2.555791 0.2533633 -0.2349472 -1.139931 0.2506592 -2.818117 0.4369624 0.7818432 -4.507071 -8.351133 2.152058 3.476663 -1.346211 -5.356442 -5.161659 -0.3225842 -2.24053 0.79828 -0.3354585 
  119.1508 -16.02071 2.351946 -2.559187 -14.40779 -0.9725609 -0.7762442 8.337196 -2.141994 -0.4936666 -5.573881 1.689113 18.33244 -3.188126 -4.012128 3.697093 4.18384 1.627462 -3.17522 -3.447 -2.169386 -0.1549793 -0.3595492 0.08454537 0.1667457 0.3449295 1.864596 0.3326254 3.628092 3.554996 0.9853668 -5.319868 -2.710215 -9.217516 -4.620385 2.959465 -3.915854 -8.763802 0.5119576 2.01042 


這裡需要注意的是在檔案前邊加ark關鍵字,告訴copy-feats是什麼格式的,還有後面加一個ark,t:- 表示輸出格式為t文字,否則預設是二進位制。
此時的ark是40維的,如果我們需要加差分該怎麼做呢:

~/kaldi/src/featbin/copy-feats ark:raw_mfcc_test_hires.1.ark ark:- |~/kaldi/src/featbin/add-deltas ark:- ark,t:- | head

10004_20131215_1500  [
  119.0376 -20.32184 -5.752641 -4.167009 -11.58426 -1.337468 -7.541201 12.98721 -1.089335 14.15153 -12.38381 11.27721 12.04524 7.761714 3.874496 3.799245 3.997328 9.124523 10.90271 4.434446 -1.662033 2.691407 0.189684 -0.5175514 -0.6428261 2.352945 3.224356 -1.128094 -0.3864679 -3.433785 -1.603787 2.32985 1.756699 -5.722286 -0.9243896 -3.551574 -1.636747 3.108243 -3.937289 2.92369 -0.01132202 1.067116 2.040365 -0.7162117 2.640955 4.515973 4.470964 0.932281 0.6165569 -3.871809 0.5533068 -2.756577 -2.770333 -1.831395 -1.187862 -2.601424 -2.351871 -2.184628 -3.41742 -1.893853 -0.07478918 -0.2272571 0.1327033 0.08663338 -0.07385565 -0.5275974 -1.621475 0.2364974 -0.4150311 -0.9109982 -1.844336 0.07111672 0.6282836 1.042378 0.03014457 0.145211 0.09069339 -1.680922 1.280691 -0.6822721 -0.07623863 0.1410118 0.5019157 0.2543283 -0.1998862 -0.2017508 0.3745222 -0.4321236 -0.6195646 -0.8956326 0.5959293 -0.2049536 0.9841186 -0.6311864 -0.3933576 0.4015603 0.4194488 -0.3587303 -0.7412351 -0.03453226 0.236979 -0.1024217 -0.07473225 0.02339086 0.002982635 -0.167089 0.005051896 0.209022 0.3103455 0.588097 0.04637083 -0.7635834 -0.4218428 -0.0124809 -0.5255278 0.1946553 -0.1449483 -0.5323422 0.2126002 -0.06912227 


將ark檔案以二進位制讀出來給add-deltas然後再輸出文字格式, 這時候發現每一行是120維。
如果要想在mfcc.sh中直接輸出只帶一階差分的特徵:

$cmd JOB=1:$nj $logdir/make_mfcc_${name}.JOB.log \

    compute-mfcc-feats  $vtln_opts --verbose=2 --config=$mfcc_config \

     scp,p:$logdir/wav_${name}.JOB.scp ark:- \| \

      copy-feats --compress=$compress ark:- ark:- \| \

         add-deltas --delta-order=1 ark:- ark,scp:$mfccdir/raw_mfcc_$name.JOB.ark,$mfccdir/raw_mfcc_$name.JOB.scp \

      || exit 1;

monophone, triphone

3. 檢視生成的GMM的模型,比如monophone, triphone的model
kaldi/src/gmmbin/gmm-copy --binary=false 0.mdl

關於這個檔案的解讀還是很重要的,大家先看參考連結中的demo,那個沒發直接copy,下面這個link是後來寫的檔案解讀:

http://blog.csdn.net/zjm750617105/article/details/52548798

tree

4. kaldi/src/bin/copy-tree --binary=false tree - | head

tree檔案也是和上面的mdl檔案相關聯的,可以看到phone pdf-id之間的關係,上面那個寫完了再來補充

ali.1.gz

5.kaldi/src/bin/copy-int-vector "ark:gunzip -c ali.1.gz|" ark,t:- | head -n 2

這個是forced alignment 階段的維特比對齊,這個演算法也很重要。

show-transitions

6.kaldi/src/bin/show-transitions ../../data/lang_nosp/phones.txt 0.mdl | head -n 10

transtion-id 是PDF-id更細分的id, 這個跟前幾步都有聯絡,0.mdl是初始狀態,40.mdl是訓練完的model

7. /home/zjm/kaldi/src/bin/show-transitions ../../data/lang_nosp/phones.txt 40.mdl 40.occs | head -n 10

.occs 檔案是指 occupation counts

這裡顯示的概率都是訓練之後的最後的轉移概率

8.檢視每次迭代的聲學似然概率

在mono0a/log/ 目錄下, grep Overall acc.{?.?,?.??,??.?,??.??}.log