以下是我看kaldi教程记的些笔记,希望能对你有所帮助(你可以把这个文档当成kaldi tutorial
的简要翻译)命令行我都加了下划线。
这部分基本略过了,比较简单。
从data/lang说起。
data/lang是由prepare_lang.sh 生成的。
首先生成的是
words.txt 和 phones.txt,这是openfst格式的symbol
tables(后来我就喜欢直接写英文了,与其费心思翻译为合适的中文,不如直接用原词来得原汁原味),它们是字符串(字符串是指标注文本的单位,)到整数的映射,下面这个是日语识别中的部分words.txt:
<eps> 0
a 1
b 2
ch 3
d 4
e 5
f 6
g 7
h 8
i 9
j 10
k 11
m 12
n 13
再看phones文件夹下以.csl为后缀的文件,分别有disambig.csl
nonsilence.csl
optional_silence.csl
silence.csl,它们的内容都是以冒号作为分割。他们是后续命令行中偶尔会用到的选项。
看phones.txt,在data/lang/下。这个是 phone symbol
table,也包含了标准FST脚本中的“消歧符号”,这些符号就是1,2,3,。。。。我们在此加了个0符号,代替了语言模型中的epsilon
transitions。
L.fst文件是编译后的FST格式的词典(lexicon)。想看里面有什么信息,输入:(from
s5/)
fstprint --isymbols=data/lang/phones.txt --osymbols=data/lang/words.txt data/lang/L.fst | head
然后下面是对应的输出:
0 1 <eps> <eps> 0.693147182
0 1 sil <eps> 0.693147182
1 2 a a 0.693147182
1 1 a a 0.693147182
1 1 b b 0.693147182
1 2 b b 0.693147182
1 1 ch ch 0.693147182
1 2 ch ch 0.693147182
1 1 d d 0.693147182
1 2 d d 0.693147182
G.fst是个描述这种语言语法结构的FST,下面是这个G.fst的内容:
0 2 21 21 0.000315946876
0 1 29 0 8.03088665
1 29 25 25 12.1202555
1 28 6 6 8.34519005
1 27 15 15 6.83906889
1 26 28 28 5.35383272
1 25 19 19 3.59180236
1 24 16 16 5.82719803
1 23 26 26 4.43024254
1 22 |