使用kaldi进行语音自动切分、模型训练和强制对齐

这里,主要介绍一下网上的教程,经过一步步实验,对某些可能让人容易误解的地方进行注释。

1. 只有原始录音和音素标注,进行初次以及多轮的单音素、三音素模型训练,并且基于这些模型进行语音切分:

http://pages.jh.edu/~echodro1/tutorial/kaldi/kaldi-training.html

手工实验下来,只有两个地方略微不同。

1. 网上谈到要在lexicon.txt的顶部加入 ,然后在silence_phones.txt中加入oov。在初次进行训练时,他给的命令是: 

cd mycorpus
utils/prepare_lang.sh data/local/lang 'OOV' data/local/ data/lang

这里出错了,说OOV没有定义。
所以,实际上,在lexicon顶部要加入的是 oov oov,没有尖括号,小写。在silence_phones.txt中写入的也是oov,小写,没有尖括号。那么在这个命令中,要写成'oov',这样才能对齐。其实,可以把oov都换成sp,等,任何符号,表示静音段或者不认识的音素。
2. 写入silence_phones.txt的代码,作者写的是:

echo –e 'SIL'\\n'oov' > silence_phones.txt

我用的ubuntu 16.X,这个命令生成的phones.txt是一行 -e SIL\noov。显然,这不是想要的,我们要生成的是两行,第一行是SIL,第二行是oov。
3. 偶尔会有些路径上的不一致。不过,至少,在这个教程里,绝大部分路径是一致的。这个教程与接下来的强制对齐的路径略有不同,主要是 exp/tri4a_ali,后者写的是exp/tri4a_alignment。

2. 在第一个教程的基础上,进行强制对齐。
http://pages.jh.edu/~echodro1/tutorial/kaldi/kaldi-forcedalignment.html

我运行完第4步,完成了强制对齐文件ctm文件的获取。基于这个文件和data/lang/phones.txt等就可以抽取出想要的音素对齐结果了,不用再使用他的工具了。其实,主要是我看不懂.R文件,暂时不想学,所以,这一步,我可以直接用python生成最终的TextGrid文件了,一步到位。

你可能感兴趣的:(linux,kaldi,force-alignment)