使用kaldi提取bnf特征,基于bnf特征进行语种识别

参考《I2R-NUS Submission to Oriental Language Recognition AP16-OL7 Challenge》

现在很多研究通过bnf特征作为输入特征进行语种识别取得了很不错的效果,利用kaldi对该方法进行了实现:

1.主要利用了kaldi开源工具中的 steps/nnet2/train_tanh_bottleneck.sh 训练一个包含瓶颈层的神经网络

     在他之前还需要另外一个带标注的语种语料训练三音素模型,利用fmllr和sat等方法进行对齐。

     我这里训练kaldi中的librispeech的100小时clean数据,

     steps/nnet2/train_tanh_bottleneck.sh脚本需要librispeech中的 data/train_clean_100 里面包含了准备数据以及使用mfcc或是fbank提取的特征文件,  data/lang 里面包含了音素和词的一些信息, exp/tri4b_ali_clean_100 里面包含对齐数据,使用以上数据就可以训练一个带有瓶颈层的神经网络,具体脚本的配置可以使用默认的也可以自己看注释结合论文进行配置。

2.在获得瓶颈层的神经网络之后,可以利用steps/nnet2/dump_bottleneck_features.sh该脚本进行提取我们实际上训练和测试语料的bnf特征。

    该脚本需要训练和测试语料的特征数据,需要注意的是我们在训练神经网络所用特征的维度需要与此时语料的维度对应上才不会出错,另外还需要第1步训练好的神经网络目录,然后他会提取对应的bnf特征。到此时特征就已提取完毕,下面就可以用常规的TV模型对语种进行训练。

结果如下,虽然仅仅是100小时的英语就已经比直接用mfcc特征好很多了(mfcc的eer结果在6左右):

使用kaldi提取bnf特征,基于bnf特征进行语种识别_第1张图片

   

你可能感兴趣的:(语音识别,kaldi)