Kaldi中thchs30训练自己数据集的步骤

一、数据准备过程
网上下载的thchs-openslr数据集需要换成自己的数据集,包含两个文件夹:data_thchs30和resource。下面讲解如何搞定这一部分。
数据集在data_thchs30文件中,包含四个部分(data、train、dev、test)。
data文件夹中包含(.wav文件和.trn文件;trn文件里存放的是.wav文件的描述:第一行为词,第二行为拼音,第三行为音素);
train文件夹中包含(.wav文件和.trn文件;trn文件存放的是.wav文件对应的data里trn文件的路径)
dev文件夹中包含(同上)
test文件夹中包含(同上)
上面这一部分的数据准备如果不太明白,可参考thchs30数据集的格式(注意.wav文件的命名也是比较重要的。尽量按照原例子中的格式)。
除数据集之外还包括训练好的语音模型word.3gram.lm和phone.3gram.lm以及相应的词典。(这两种LM用SRILM来训练)
SRILM是一个统计和分析语言模型的工具,需要安装和更改相关配置。
具体如何安装请参考链接:https://blog.csdn.net/u011500062/article/details/50781101,这个教程的最后一步修改环境变量有点问题,改为:export PATH=~/GaoMY/ZhangX/srilm-1.7.1/bin/i686-m64/:~/GaoMY/ZhangX/srilm-1.7.1/bin/:$PATH 这种形式即可,这个是临时环境变量,即关机开机之后会无效,如何改为永久环境变量参考网上关于环境变量的文章即可。

二、利用SRILM工具建立语言模型
建立语言模型的过程包含1两个步骤
步骤1:统计预料库生成n-gram统计文件
命令行:ngram-count -vocab segment_dict.txt -text train_data -order 3 -write my.count -unk
segment_dict.txt:词典文件,一行代表一个切词;
train_data:语料库,一行行的数据,行内数据用空格隔开来表示切词
输出文件为my.count:统计文件
步骤2:生成语言模型
命令行:ngram-count -read my.count -order 3 -lm train.lm -interpolate
输入为统计文件
输出文件为train.lm:语言模型
网上有许多代码是:ngram-count -read my.count -order 3 -lm train.lm -interpolate -kndiscount
这时候会报错误,如下图:
这里写图片描述
只要把命令行后面的-kndiscount去掉即可
步骤3:在生成语言模型之后,我们需要将词典文件segment_dict.txt重命名为lexicon,将语言模型重命名为word.3gram.lm,并将这两个文件防放入thchs30数据集中的lm_word文件
以上为构造lm_word文件内词典和语言模型的过程;
构造lm_phone文件内词典和语言模型的过程同上,只是定义的词典和语料库不同。

运行run.sh文件
在准备好数据、lm_word和lm_phone文件后,就可以运行run.sh了,在运行之前需要更改相关的代码,参考如下链接:https://blog.csdn.net/snowdroptulip/article/details/78943748
在执行代码时,建议手动一步一步执行。
我在执行#build a large lexiocn that invovles words in both the training and decoding这一段代码的时候,我是把

cat $thchs/resource/dict/lexicon.txt $thchs/data_thchs30/lm_word/lexicon.txt | \
grep -v '<s>' | grep -v '</s>' | sort -u > data/dict/lexicon.txt || exit 1;

这一段给注释掉,直接将lm_word中的lexicon写入thchs30/data/dict/内,格式模仿原例子,注意lexicon文件的编码方式为U8-UNIX方式(即要在Linux系统下编译,不然会报文件中存在不被识别的空格和回车符)。
同样的道理,将lm_phone中的lexicon写入thchs30/data/dict_phone/内
下面就可以正常的训练了。
训练过程中的错误率存放在exp的对应的文件内,比如tri1,tri2b等等。

猜你喜欢

转载自blog.csdn.net/ninesky110/article/details/82179541