kaldi 如何自制语料来做中文识别

由于需求只是做命令词识别,没有太高的要求,所以在跑thchs30的时候,没有跑dnn。

跑完thchs30后就琢磨着自己录些语料训练和识别,那就开始从网上看资料,大家都推荐按Kaldi for Dummies tutorial的例子来做,我也跟着例子来写文件。理想很丰满,现实很骨感,一跑才发现很多问题,报错原因也是千奇百怪。折腾了一天后才恍然大悟,我是需要做识别中文,为啥要用英文的例子呢,这才转向分析thchs30。下面从语料准备到训练,再到在线识别的步骤。

语料准备

使用audacity来进行录制,我是在笔记本上接一个耳麦录制的,在录音的时候需要设置两个红色框的参数,录制结果保存为wav格式,截图如下:

kaldi 如何自制语料来做中文识别_第1张图片
audacity

语料的内容只有一二三四五,五个数字,找了10个人来录音,每人录音10次。

数据准备

1、语料按SPEAKERID_ID的方式命名,参考thchs30的数据目录把语料放到data_thchs30/data目录下,并生成scp和trn文件,这两个文件的格式必须和thchs30保持一致。

2、按要求生成train、dev、test目录,并把训练、开发、测试的wav文件分别进行copy,并生成trn文件。trn文件的内容是真实trn文件的路径。

3、修改data_thchs30/lm_word下的lexicon.txt文件,按训练的实际内容修改。

4、修改resource/dict下的lexicon.txt、lexiconp.txt文件。

运行脚本

修改run脚本的数据路径后就可以跑了,我最开始只跑了单音素的,后面再增加到三音素。

在线测试

拷贝egs/voxforge下的online_demo到当前工程目录下,拷贝训练出来的文件。

.下面是路径内容,其中trans.txt和works目录下的文件是解码后生成的,不需要copy。

├── online-data

│   ├── audio

│   │   ├── test.wav

│   │   └── trans.txt

│   └── models

│      ├── mono

│      │   ├── 40.mdl

│      │   ├── final.mdl

│      │   ├── HCLG.fst

│      │   └── words.txt

│      └── tri1

│          ├── 35.mdl

│          ├── final.mdl

│          ├── HCLG.fst

│          └── words.txt

├── README.txt

├── run.sh

├── run_tri.sh

└── work

    ├── ali.txt

    ├── hyp.txt

    ├── input.scp

    ├── ref.txt

    └── trans.txt


不知道是不是太简单的原因,识别效果还行:)

kaldi 如何自制语料来做中文识别_第2张图片
识别出来的结果

遇到的坑

1、run文件中没有修改数据路径,训练是用的thchs30的数据。在修改后在训练时有些文件是没有删除的,在训练前要把data、exp、mfcc三个目录清楚再训练。

2、如果只是训练的话,是可以去掉dev和test目录的,但是要相应的修改脚本。但如果要做在线测试,请把test目录留起来,并且保证test目录下wav文件大于1个,不然会报错。

你可能感兴趣的:(kaldi 如何自制语料来做中文识别)