配方模板
配方模板
配方模板用于轻松构建配方。它旨在支持各个任务通常具备的常见功能和需求。
目录 由DocToc生成
使用自己的语料库运行ESPnet
复制模板目录
% task=asr1 # enh1, tts1, mt1, st1 % egs2/TEMPLATE/${task}/setup.sh egs2/foo/${task}创建
egs2/foo/${task}/data目录来存放你的语料库:参见https://github.com/espnet/data_example或下一章节。Run (e.g.
asrcase)cd egs2/foo/${task} # We always assume that our scripts are executed at this directory. # Assuming Stage1 creating `data`, so you can skip it if you have `data`. ./asr.sh \ --stage 2 \ --ngpu 1 \ --train_set train \ --valid_set valid \ --test_sets "test" \ --lm_train_text "data/train/text" # Use CUDA_VISIBLE_DEVICES to specify a gpu device id # If you meet CUDA out of memory error, change `batch_bins` ( or `batch_size`)更多详情
- 读取配置文件:例如 https://github.com/espnet/espnet/tree/master/egs2/librispeech/asr1/conf
- 阅读主脚本:例如 https://github.com/espnet/espnet/blob/master/egs2/TEMPLATE/asr1/asr.sh
- 文档:https://espnet.github.io/espnet/
关于Kaldi风格的数据目录
Each directory of training set, development set, and evaluation set, has same directory structure. See also http://kaldi-asr.org/doc/data_prep.html about Kaldi data structure. We recommend you running mini_an4 recipe and checking the contents of data/ by yourself.
cd egs2/mini_an4/asr1
./run.sh目录结构
data/ train/ - text # 文本转录内容 - wav.scp # 音频文件路径 - utt2spk # 将话语ID映射到说话人ID的文件 - spk2utt # 将说话人ID映射到话语ID的文件 - segments # [可选] 指定每条话语的起始和结束时间 dev/ ... test/ ...text格式uttidA <转写文本> uttidB <转写文本> ...wav.scp格式uttidA /path/to/uttidA.wav uttidB /path/to/uttidB.wav ...utt2spk格式uttidA speakerA uttidB speakerB uttidC speakerA uttidD speakerB ...spk2utt格式speakerA uttidA uttidC ... speakerB uttidB uttidD ... ...注意
spk2utt文件可以通过utt2spk生成,而utt2spk也可以通过spk2utt生成,因此只需创建其中任意一个即可。utils/utt2spk_to_spk2utt.pl data/train/utt2spk > data/train/spk2utt utils/spk2utt_to_utt2spk.pl data/train/spk2utt > data/train/utt2spk如果您的语料库不包含说话人信息,可以将说话人ID设置为与话语ID相同以满足目录格式要求,或者为所有话语赋予相同的说话人ID(实际上目前我们在ASR配方中不使用说话人信息)。
uttidA uttidA uttidB uttidB ...或者
uttidA dummy uttidB dummy ...[可选]
segments格式如果音频数据原本是较长的录音,约大于1小时,且每个音频文件包含多个片段的语音,则需要创建
segments文件来指定每个语音片段的开始和结束时间。格式为<utterance_id> <wav_id> <start_time> <end_time>。sw02001-A_000098-001156 sw02001-A 0.98 11.56 ...请注意,如果使用
segments,wav.scp中的<wav_id>需要与segments文件对应,而不是utterance_id。sw02001-A /path/to/sw02001-A.wav ...
完成数据目录创建后,最好通过utils/validate_data_dir.sh进行检查。
utils/validate_data_dir.sh --no-feats data/train
utils/validate_data_dir.sh --no-feats data/dev
utils/validate_data_dir.sh --no-feats data/test(开发者指南) 如何创建/移植新配方?
与ESPnet1不同,ESPnet2没有为每个语料库准备不同的配方,而是为每个任务准备了通用配方,这些配方被命名为asr.sh、enh.sh、tts.sh等。我们精心设计了这些通用脚本,使其适用于任何类型的语料库,因此理论上您可以使用自己的语料库进行训练,而几乎不需要修改这些配方的任何部分。您唯一需要做的就是创建local/data.sh。
Create directory in egs/
% task=asr1 # enh1, tts1, mt1, st1 % egs2/TEMPLATE/${task}/setup.sh egs2/foo/${task}以某种方式创建
run.sh和local/data.sh% cd egs2/foo/${task} % cp ../../mini_an4/${task}/run.sh . % vi run.shrun.sh是每个任务通用流程的轻量封装,如下所示:# The contents of run.sh ./asr.sh \ --train_set train \ --valid_set dev \ --test_sets "dev test1 test2" \ --lm_train_text "data/train/text" "$@"- 我们采用通用配方,因此您必须通过
asr.sh的命令行选项来适应每个语料库的差异。 - 我们期望
local/data.sh能够生成训练数据(例如data/train)、验证数据(例如data/dev)以及(多个)测试数据(例如data/test1和data/test2),这些数据需符合Kaldi格式(参见asr.sh的stage1阶段)。 - 请注意,某些语料库仅提供测试数据,并未正式准备开发集。在这种情况下,您可以通过提取部分训练数据来准备验证数据,并将剩余的训练数据视为新的训练数据(例如,参考
egs2/csj/asr1/local/data.sh)。 - 此外,训练期间使用的验证数据必须为单一数据目录。若存在多个验证数据目录,需通过
utils/combine_data.sh脚本进行合并。 - 另一方面,该配方在推理过程中接受多个测试数据目录。因此,您可以包含验证数据来评估验证数据的ASR性能。
- 如果要从零开始创建配方,您需要理解Kaldi的数据结构。请参阅下一节。
- 如果您需要从ESPnet1或Kaldi移植配方,您需要将原始配方中的数据准备部分嵌入到
local/data.sh中。请注意,常见步骤包括Feature extraction、Speed Perturbation和Removing long/short utterances,因此您不需要在local/data.sh中执行这些操作
- 我们采用通用配方,因此您必须通过
如果配方使用了某些语料库但未在
db.sh中列出,则需要手动添加。... YOUR_CORPUS= ...如果配方依赖某些特殊工具,请将需求写入
local/path.shpath.sh:
# 例如需要flac命令 if ! which flac &> /dev/null; then echo "Error: flac is not installed" return 1 fi
