Kaldi如何准备自己的数据

您所在的位置:网站首页 03b错误代码 Kaldi如何准备自己的数据

Kaldi如何准备自己的数据

2023-12-03 21:58| 来源: 网络整理| 查看: 265

Introduction

跑完kaldi的一些脚本例子,你可能想要自己用Kaldi跑自己的数据集。这里将会阐述如何准备好数据。

run.sh较上的部分是有关数据准备的,通常local与数据集相关。

例如:RM数据集

local/rm_data_prep.sh /export/corpora5/LDC/LDC93S3A/rm_comp || exit 1; utils/prepare_lang.sh data/local/dict '!SIL' data/local/lang data/lang || exit 1; local/rm_prepare_grammar.sh || exit 1;

 

再例如:再WSJ数据集

wsj0=/export/corpora5/LDC/LDC93S6B wsj1=/export/corpora5/LDC/LDC94S13B local/wsj_data_prep.sh $wsj0/??-{?,??}.? $wsj1/??-{?,??}.? || exit 1; local/wsj_prepare_dict.sh || exit 1; utils/prepare_lang.sh data/local/dict "" data/local/lang_tmp data/lang || exit 1; local/wsj_format_data.sh || exit 1;

WSJ相对RM多的命令与训练的语言模型有关,但是最重要的还是两者共有的命令。

数据准备阶段输出包含两个部分:一个与data有关( data/train/),一个与language有关(data/lang/)。data与具体的录音数据有关,lang与语言本身有关(lexicon, phone等),如果你想要用现有的系统和语言模型解码准备好的数据,则你需要进一步熟悉它们。

Data preparation-- the "data" part.

可以看下egs/swbd/s5, data/train 目录:

s5# ls data/train cmvn.scp feats.scp reco2file_and_channel segments spk2utt text utt2spk wav.scp所有文件都很重要,对于简单的任务,是没有seg信息的(发音直接对应于一个文件)。"utt2spk", "text" and "wav.scp" and possibly "segments" and "reco2file_and_channel"这些需要你自己创建,剩下的可以用标准脚本生成。 如果文件命令规范的话,很多可以用脚本自动生成。

Files you need to create yourself

text文件记录了每个发音id与其对应的文本。

s5# head -3 data/train/text sw02001-A_000098-001156 HI UM YEAH I'D LIKE TO TALK ABOUT HOW YOU DRESS FOR WORK AND sw02001-A_001980-002131 UM-HUM sw02001-A_002736-002893 AND IS

发音id:语音库名称,说话人id作为前缀,语音时间戳信息000098-001156

2001-A作为前缀;这样的好处是有助与与说话人信息相关的排序(utt2spk and spk2utt)。有时我们需要将说话人id与发音分离开,用-是非常安全的,因为它是最小的ASCII值,如果说话人Id长度变化,某些情况排序过程会终止,有可能会崩溃的(按照C排序)。

另外一个重要的文件是wav.scp。

s5# head -3 data/train/wav.scp sw02001-A /home/dpovey/kaldi-trunk/tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /export/corpora3/LDC/LDC97S62/swb1/sw02001.sph | sw02001-B /home/dpovey/kaldi-trunk/tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 2 /export/corpora3/LDC/LDC97S62/swb1/sw02001.sph |

文件格式:

extended-filename有可能是真实的wav文件,如果seg文件不存在,则wav.scp每一行的第一个标识是发音id.wav.scp必须是单声道的,如果文件是多声道的,可以用sox提取出指定的声道。 "segments" 文件: s5# head -3 data/train/segments sw02001-A_000098-001156 sw02001-A 0.98 11.56 sw02001-A_001980-002131 sw02001-A 19.8 21.31 sw02001-A_002736-002893 sw02001-A 27.36 28.93 秒为单位,

 "reco2file_and_channel" 仅仅会被用到,当NIST sclite工具评分时。

s5# head -3 data/train/reco2file_and_channel sw02001-A sw02001 A sw02001-B sw02001 B sw02005-A sw02005 A 如果你没有stm文件,则你不需要知道其它的,也不需要用到reco2file_and_channel文件 utt2spk"文件 s5# head -3 data/train/utt2spk sw02001-A_000098-001156 2001-A sw02001-A_001980-002131 2001-A sw02001-A_002736-002893 2001-A

The format is

spk2gender文件 s5# head -3 ../../rm/s5/data/train/spk2gender adg0 f ahh0 m ajp0 m 说话人id 性别

export LC_ALL=C 排序方式 Files you don't need to create yourself "spk2utt" file utils/utt2spk_to_spk2utt.pl data/train/utt2spk > data/train/spk2utt feats.scp file.指出了发音id,其对应的mfcc特征位于ark文件的位置 s5# head -3 data/train/feats.scp sw02001-A_000098-001156 /home/dpovey/kaldi-trunk/egs/swbd/s5/mfcc/raw_mfcc_train.1.ark:24 sw02001-A_001980-002131 /home/dpovey/kaldi-trunk/egs/swbd/s5/mfcc/raw_mfcc_train.1.ark:54975 sw02001-A_002736-002893 /home/dpovey/kaldi-trunk/egs/swbd/s5/mfcc/raw_mfcc_train.1.ark:62762

This feats.scp file是由下面的命令创建的

steps/make_mfcc.sh --nj 20 --cmd "$train_cmd" data/train exp/make_mfcc/train $mfccdir

cmvn.scp 说话人id 特征ark位置

s5# head -3 data/train/cmvn.scp 2001-A /home/dpovey/kaldi-trunk/egs/swbd/s5/mfcc/cmvn_train.ark:7 2001-B /home/dpovey/kaldi-trunk/egs/swbd/s5/mfcc/cmvn_train.ark:253 2005-A /home/dpovey/kaldi-trunk/egs/swbd/s5/mfcc/cmvn_train.ark:499 cmvn.scp由下面命令创建 steps/compute_cmvn_stats.sh data/train exp/make_mfcc/train $mfccdir

验证、修复 文件格式

utils/validate_data_dir.sh data/train utils/fix_data_dir.sh data/train

Data preparation-- the "lang" directory.

lang文件夹下的内容:

s5# ls data/lang L.fst L_disambig.fst oov.int oov.txt phones phones.txt topo words.txt

拷贝lang的所有文件,加上G.fst存入lang_test中

s5# ls data/lang_test G.fst L.fst L_disambig.fst oov.int oov.txt phones phones.txt topo words.txt

lang_test/ was created by copying lang/ and adding G.fst.

s5# ls data/lang/phones context_indep.csl disambig.txt nonsilence.txt roots.txt silence.txt context_indep.int extra_questions.int optional_silence.csl sets.int word_boundary.int context_indep.txt extra_questions.txt optional_silence.int sets.txt word_boundary.txt disambig.csl nonsilence.csl optional_silence.txt silence.csl

phones里面的文件非常多,幸运的时,作为kaldi用户,你不需要自己创建这些文件,只需要一些简单的输入,执行utils/prepare_lang.sh脚本就可完成。

Fortunately you, as a Kaldi user, don't have to create all of these files because we have a script "utils/prepare_lang.sh" that creates it all for you based on simpler inputs

语音识别过程中需要对声学模型进行构图,即扩展HCLG的过程,

扩展是按照H



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3