源碼目錄結構分析
egs/ 開放資料集合,主要目錄 wsj, rm
|- README.txt
src/ 代碼主目錄
|- configure 建構 kaldi.mk 檔案(c庫,編譯優化參數等)
|- Makefile 組織整體代碼依賴相關内容
|- ……
tools/ 基礎工具包
|- atlas 數學算法庫
|- clpack cl線代庫加速包
|- srilm 語言模型生成工具
|- openfst 權重有限狀态機(Makefile檔案中自動下載下傳并編譯)
|- sctk Speech Recognition Scoring Toolkit(Makefile檔案中自動下載下傳并編譯)
|- sph2pipe SPHERE 檔案轉換(其他音頻)工具(Makefile檔案中自動下載下傳并編譯)
|- openblas 開源blas庫(Makefile檔案中自動下載下傳并編譯)
|- extras 擴充工具包
常見檔案格式
常見内容标記說明
标記名稱 | 說明 |
---|---|
utterance-id | 發音編号, 可以是任意的文本字元串 |
speaker-id | 說話人編号, 常作為發音編号的字首 |
record-id | 和在“wav.scp”中使用的是同一個辨別字元串, 與 uttid 一樣 |
word | 單詞清單 |
segment-begin/segment-end | 以秒為機關。它們指明了一段發音在一段錄音中的時間偏移量 |
比如:
檔案名稱 | 内容格式 |
---|---|
text | < uttid > < word > |
wav.scp | < uttid > < utter_file_path > |
utt2spk | < uttid > < speakid > |
spk2utt | < speakid > < uttid > |
segments | <uttid> <recid> <segbegin> <segend> |
feats.scp | < uttid > <extended-filename-of-features> |
注意:
對于 text 中不一定要保證每個單詞都必須出現在詞彙表中,若詞彙表中沒有則被映射到 lang/oov.txt 檔案中(lang/oov.int 檔案為其 SPN 的數字形式,從 words.txt 中提取)。
在每一個 feats.scp 特征檔案中儲存的都是Kaldi格式的矩陣。在這個例子中,矩陣的次元是13(譯者注:即列數;行數則 和你的檔案長度有關,标準情況下幀長20ms,幀移10ms,是以一行特征資料對應10ms的音頻資料)。比如:
s5# head -3 data/train/cmvn.scp
// 表示 2001-A 對應的特征從 cmvn_train.ark 檔案的 7 位元組開始讀取資料
2001-A /home/xxxx/kaldi/egs/swbd/s5/mfcc/cmvn_train.ark:7
// 表示 2001-B 對應的特征從 cmvn_train.ark 檔案的 253 位元組開始讀取資料
2001-B /home/xxxx/kaldi/egs/swbd/s5/mfcc/cmvn_train.ark:253
// 表示 2005-A 對應的特征從 cmvn_train.ark 檔案的 499 位元組開始讀取資料
2005-A /home/xxxx/kaldi/egs/swbd/s5/mfcc/cmvn_train.ark:499
對于 phones.txt 和 words.txt 分别存放詞典, 比如:
s5$ head -3 data/lang/phones.txt
<eps> 0
SIL 1
SIL_B 2
s5$ head -3 data/lang/words.txt
<eps> 0
!SIL 1
-'S 2
這些為符号标 (symbol-table) 檔案,符合 OpenFst 的格式定義。
在 kaldi 中, 這些檔案被用于音素符号的文本形式和數字形式之間進行轉換。大多數情況下,隻有腳本 utils/int2sym.pl 和 utils/sym2int.pl 及 OpenFst 中 fstcompile 和 fstprint 會讀取這些檔案。
檔案 L.fst 是 FST 形式的發音詞典, 其中輸入是音素,輸出為詞彙。
檔案 L_disambig.fst 也為發音詞典,但還包含為消歧而引入的符号(比如 #1, #2 等,以及自環(self-loop) 而引入的 #0)。
lang/topo 檔案指明 HMM 模型拓撲結構
lang/G.fst 檔案中存放了語言模型(文法),FST 格式表示,解碼時使用,根據使用的語言模型的不同,生産 G.fst 的步驟會不同。比如:
# 在 rm 中使用 local/rm_data_prep.sh 檔案裡面
# 生成 G.txt 文法檔案
local/make_rm_lm.pl $RMROOT/rm1_audio1/rm1/doc/wp_gram.txt > $tmpdir/G.txt || exit 1;
# 在 local/rm_prepare_grammar.sh 會将文本格式文法檔案轉換為二進制 G.fst 檔案
fstcompile --isymbols=data/lang/words.txt --osymbols=data/lang/words.txt --keep_isymbols=false \
--keep_osymbols=false $tmpdir/G.txt > data/lang/G.fst