ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

ESPnet 多语言 BABEL 语料库 ASR Recipe 实战指南:单语与多语言联合训练配置、数据流水线与结果复现

ESPnet 多语言 BABEL 语料库 ASR Recipe 实战指南:单语与多语言联合训练配置、数据流水线与结果复现 人工智能语音音频深度学习NLP【免费下载链接】espnetEnd-to-End Speech Processing Toolkit项目地址https://gitcode.com/gh_mirrors/es/espnet点击查看免费下载本文基于 ESPnet 仓库中egs2/babel/asr1的官方 BABEL RecipeREADME.md面向希望在低资源多语言语音识别场景下复用该配方Recipe的开发者。BABEL 语料库IARPA Babel Program包含数十种低资源语言的电话对话语音本指南将带你掌握run.sh --langs/--recog的语言选择机制、多语言数据合并流水线setup_languages.sh与prepare_data.sh、LM ASR 联合训练配置以及如何对照仓库中记录的 WER/CER 基线结果验证复现。BABEL Recipe 是什么一条开箱即用的多语言 ASR 配方在 ESPnet2 的 egs2 体系中每个egs2/语料库/任务目录都是一条可独立运行的实验配方Recipe。egs2/babel/asr1是专门面向 IARPA BABEL 低资源语料库的语音识别配方其核心价值在于一个目录、多个语言BABEL 语料库按语言编号Language Pack ID划分本配方为每个语言提供了独立的训练/开发/评估数据清单与词典lexicon并能在同一套流水线中把多种语言的数据合并起来进行联合训练低资源设定默认支持 LimitedLP约 10 小时与 FullLP完整语言包两种训练数据规模可通过--FLP开关切换与标准 ESPnet2 训练框架无缝衔接底层调用egs2/babel/asr1/asr.sh复用 ESPnet2 统一的 ASR 训练、解码与打分流程。关联文档README.md篇幅精炼但给出了两条核心启动命令与一组可复现的基线结果。本文将以这两条命令为主线结合配方内的脚本与配置文件展开完整讲解。快速上手两条命令理解--langs与--recog原文档的核心内容就是两条启动命令它们揭示了本配方最重要的两个参数语义# 命令一仅用 Assamese102训练并仅在 102 上测试 ./run.sh --langs 102 --recog 102 # 命令二用 Assamese102 Bengali103联合训练并在两者上分别测试 ./run.sh --langs 102 103 --recog 102 103其中--langs指定参与训练的语言编号列表。这些语言的训练集会被分别准备后合并成一个统一的data/train目录供多语言联合训练使用--recog指定参与**识别解码测试**的语言编号列表。每个编号会展开为dev_lang与eval_lang两个测试集。上述两个参数由run.sh通过--local_data_opts --langs ${langs} --recog ${recog}透传给本地数据准备脚本。若未显式指定egs2/babel/asr1/run.sh中的默认值是langs101 102 103 104 105 106 202 203 204 205 206 207 301 302 303 304 305 306 401 402 403 recog107 201 307 404即默认用 21 种语言训练、4 种语言Vietnamese 107、Haitian 201、Amharic 307、Georgian 404做测试。run.sh随后会按recog列表自动构造测试集test_sets for l in ${recog}; do test_setsdev_${l} eval_${l} ${test_sets} done语言编号与语料布局lang_list.sh 与 db.sh 的对应关系要正确运行本配方首先必须理解语言编号ID与语料路径的映射。语言编号与语言名的对应关系定义在 local/lang_list.sh 中节选如下编号语言编号语言101Cantonese 粤语201Haitian 海地克里奥尔语102Assamese 阿萨姆语202Swahili 斯瓦希里语103Bengali 孟加拉语203Lao 老挝语104Pashto 普什图语204Tamil 泰米尔语105Turkish 土耳其语205Kurmanji 库尔曼吉语106Tagalog 他加禄语206Zulu 祖鲁语107Vietnamese 越南语207Tok Pisin 托克皮钦语301Cebuano 宿务语304Lithuanian 立陶宛语302Kazakh 哈萨克语305Guarani 瓜拉尼语303Telugu 泰卢固语306Igbo 伊博语307Amharic 阿姆哈拉语401Mongolian 蒙古语402Javanese 爪哇语403Dholuo 卢奥语404Georgian 格鲁吉亚语——lang_list.sh为每个语言定义四类关键路径/清单变量例如 102Assamesetrain_data_dir_102${BABEL_102}/release-current/conversational/training train_data_list_102./conf/lists/102-assamese/train.LimitedLP.list # LimitedLP约10h训练清单 train_data_dir_102_FLP${BABEL_102}/release-current/conversational/training train_data_list_102_FLP./conf/lists/102-assamese/train.FullLP.list # FullLP 训练清单 dev10h_data_dir_102${BABEL_102}/release-current/conversational/dev dev10h_data_list_102./conf/lists/102-assamese/dev.list # dev10h 开发集清单 lexicon_file_102${BABEL_102}/release-current/conversational/reference_materials/lexicon.sub-train.txt lexiconFlags_102--romanized --oov unk # 词典解析选项可以看出FLP 与 LLP 的主要区别在于使用不同的训练清单文件train.FullLP.listvstrain.LimitedLP.list而不是不同的语料目录。每种语言具体的语音文件清单位于 conf/lists 下按语言名组织的子目录中。路径中的BABEL_102等环境变量需要在 db.sh 中配置。db.sh为每个 BABEL 语言包定义了BABEL_编号变量如BABEL_101、BABEL_102等默认均为空需要你填写本地语料实际路径同时脚本内置了 CMU TIR 与 JHU CLSP 两个特定集群的自动填充逻辑供内部环境使用。数据检查逻辑在 local/data.sh 中它会遍历langs与recog中的所有编号并检查对应变量是否已配置for l in ${langs} ${recog}; do if [ ! -e ${BABEL}_${l} ]; then log Fill the value of ${BABEL}_${l} of db.sh exit 1 fi done多语言数据准备流水线setup_languages.sh 与 prepare_data.sh本配方最具特色的部分是数据准备阶段流程可概括为“逐语言准备 → 并行执行 → 前缀化 → 合并”四步入口为 local/setup_languages.sh。第 1 步为每个语言建立独立工作目录脚本先合并langs与recog得到all_langs然后为每个语言编号创建data/编号/目录并通过符号链接把local、utils、steps、conf等公共资源链接进去同时拷贝cmd.sh、path.shfor l in ${all_langs}; do [ -d data/${l} ] || mkdir -p data/${l} cd data/${l} ln -sf ${cwd}/local . for f in ${cwd}/{utils,steps,conf}; do ln -sf make_absolute.sh $f . done cp ${cwd}/cmd.sh . cp ${cwd}/path.sh . ... done第 2 步并行执行各语言的 prepare_data.sh随后对每个语言并行调用local/prepare_data.sh --FLP ${FLP} lang_id后台wait其核心逻辑在 local/prepare_data.sh 中--FLP开关FLPtrue时使用_FLP后缀变量FullLP否则使用 LimitedLP约 10 小时清单子集划分通过make_corpus_subset.sh从原始语料中抽出训练与 dev10h 子集再用prepare_acoustic_training_data.pl带--vocab词典与--fragmentMarkers断句标记生成声学训练列表内部开发集划分从训练数据中切出 1/10 作为train_dev语言前缀化关键设计用copy_data_dir.sh --spk-prefix ${l}_ --utt-prefix ${l}_为所有说话人与句子 ID 加上语言编号前缀避免不同语言共享同一说话人 ID 造成歧义./utils/copy_data_dir.sh --spk-prefix ${l}_ --utt-prefix ${l}_ \ data/train data/train_${l} ./utils/copy_data_dir.sh --spk-prefix ${l}_ --utt-prefix ${l}_ \ data/train_dev data/dev_${l} ./utils/copy_data_dir.sh --spk-prefix ${l}_ --utt-prefix ${l}_ \ data/dev10h.pem data/eval_${l}第 3 步合并多语言训练/开发数据setup_languages.sh最后把所有语言的训练目录合并为统一的data/train把所有recog语言的开发目录合并为data/dev并将每个语言的dev_l、eval_l以符号链接方式暴露到顶层./utils/combine_data.sh data/train ${train_dirs} ./utils/combine_data.sh data/dev ${dev_dirs} for l in ${recog}; do ln -s ${cwd}/data/${l}/data/eval_${l} ${cwd}/data/eval_${l} ln -s ${cwd}/data/${l}/data/dev_${l} ${cwd}/data/dev_${l} done第 4 步后处理data.shlocal/data.sh 在调用setup_languages.sh之后还有两项收尾工作为train/dev/recog_set的wav.scp统一追加sox 重采样到 16kHz的在线处理管道BABEL 原始语音采样率可能非 16ksed -i.bak -e s/$/ sox -R -t wav - -t wav - rate 16000 dither | / data/${x}/wav.scp从训练文本中抽取...形式的非语言符号如hes、noise等标记生成data/nlsym.txt非语言符号表cut -f 2- data/${train_set}/text | tr \n | sort | uniq | grep data/nlsym.txt模型与训练配置train_asr.yaml、train_lm.yaml 与 decode 参数多语言联合训练仍使用 ESPnet2 标准的 ASR 训练流程由egs2/babel/asr1/asr.sh驱动。run.sh中关键开关为--token_type char字符级建模规避低资源语言缺少分词器的问题、--feats_type raw直接使用波形/原始特征、--use_lm true启用外部语言模型。ASR 模型配置 conf/train_asr.yaml# network architecture encoder: rnn encoder_conf: rnn_type: lstm bidirectional: True use_projection: True num_layers: 6 hidden_size: 320 output_size: 320 # decoder related decoder: rnn decoder_conf: rnn_type: lstm num_layers: 1 hidden_size: 320 sampling_probability: 0.0 # minibatch related batch_type: folded batch_size: 30 # optimization related optim: adadelta max_epoch: 100 patience: 4 scheduler: reducelronplateau scheduler_conf: mode: min factor: 0.5 patience: 1 # criterion val_scheduler_criterion: - valid - loss best_model_criterion: - - valid - acc - max keep_nbest_models: 1 init: xavier_uniform要点解读6 层双向 LSTM 编码器 1 层 LSTM 解码器隐层 320 维属于典型的中等规模 RNN 序列模型适合低资源语料init: xavier_uniform采用 Xavier 均匀分布初始化——README 中的基线模型名asr_lsm_torch14_xavier_init正是对该初始化策略的直接记录optim: adadeltareducelronplateau调度器adadelta 无需手动学习率配合按验证 loss 减半学习率的策略对低资源训练友好best_model_criterion按验证集 acc 最大选取最佳模型keep_nbest_models: 1仅保留最优单模型。语言模型配置 conf/train_lm.yamllm: seq_rnn lm_conf: nlayers: 2 unit: 650 optim: sgd # or adam batch_type: folded batch_size: 256 # batch size in LM training max_epoch: 20 # if the data size is large, we can reduce this patience: 3 best_model_criterion: - - valid - loss - min keep_nbest_models: 1LM 使用 2 层 650 单元的顺序 RNNSGD 优化训练文本来自data/train/text--lm_train_text。低资源场景下 LM 有助于缓解字符级建模带来的解码歧义。解码配置 conf/decoder_asr.yamllm_weight: 1.0 beam_size: 20 penalty: 0.0 maxlenratio: 0.0 minlenratio: 0.0 ctc_weight: 0.3解码时使用 beam size 20 的集束搜索ctc_weight: 0.3表示在注意力解码基础上以 0.3 的权重混合 CTC 打分训练配置中虽未显式列出 ctc_weight但解码默认启用 CTC 联合打分lm_weight: 1.0融合外部语言模型。任务调度配置 cmd.sh配方通过cmd_backend变量选择任务后端支持local本机 run.pl、stdout、sgequeue.pl、pbs、slurmslurm.pl、ssh以及 JHU 专用后端各后端通过train_cmd/cuda_cmd/decode_cmd映射。默认cmd_backendlocal适合单机调试集群环境可切换到slurm并修改 conf/slurm.conf 的分区设置。基线结果解读README 中的 WER/CER 记录原文档记录了一次以asr_lsm_torch14_xavier_initPyTorch 1.4 LSTM Xavier 初始化为配置的基线实验结果环境信息如下日期Sun Mar 1 21:23:27 EST 2020Python3.7.6PyTorch1.4.0ESPnet0.6.0Git hashbd80c0522eab5c41baebfb903276938650575d80commit 日期 2020-02-25WER词错误率datasetSntWrdCorrSubDelInsErrS.Errdecode_devdecode_asr_model_valid.loss.best66235584731.153.915.05.074.088.6decode_eval_203decode_asr_model_valid.loss.best113549030330.053.916.15.375.389.3CER字符错误率datasetSntWrdCorrSubDelInsErrS.Errdecode_devdecode_asr_model_valid.loss.best662324234559.914.725.44.444.689.4decode_eval_203decode_asr_model_valid.loss.best1135439147458.315.226.64.546.290.0解读要点表头decode_devdecode_asr_model_valid.loss.best表示解码目录按asr_model_valid.loss.best模型命名eval_203即 Bengali 语言的评估集注意 README 中解码结果对应语言与模型训练语言一致该基线整体 CER 显著低于 WER约 44–46% vs 74–75%符合低资源电话对话语音的特点大量虚词、口误与 等标记导致词级替换/删除率高而字符级指标更能反映声学建模质量列含义Corr正确率、Sub替换、Del删除、Ins插入、Err总错误率、S.Err句子错误率。错误率计算公式为Err Sub Del Ins。该表由scripts/utils/show_asr_result.sh自动生成README 中保留了生成注释因此你在自己的实验目录exp/*/decode_*/score_wer/下运行同一脚本即可生成同格式结果方便与基线对照。从 0 到 1复现 BABEL Recipe 的完整操作清单综合以上各环节完整复现流程如下获取并放置语料从 IARPA Babel Program 获取目标语言包记录其在本地磁盘的绝对路径配置 db.sh在 db.sh 中填写对应BABEL_编号变量如BABEL_102/path/to/102-assamese选择训练/测试语言按需修改run.sh中的langs/recog或直接通过命令行参数传入cd egs2/babel/asr1 ./run.sh --langs 102 103 --recog 102 103数据准备阶段setup_languages.shprepare_data.sh脚本自动完成子集抽取、LLP/FLP 切换、语言前缀化与多语言合并生成data/train、data/dev及各dev_l/eval_l测试集训练与解码asr.sh按train_asr.yaml训练 ASR 模型、按train_lm.yaml训练 LM随后按decoder_asr.yaml解码各测试集结果查看运行scripts/utils/show_asr_result.sh汇总 WER/CER与 README 中基线对比。需要特别说明的前提条件该配方依赖 IARPA Babel 授权语料无法自动下载db.sh中路径必须人工配置README 记录的基线为 2020 年 ESPnet 0.6.0 / PyTorch 1.4 时代的实验结果当前仓库代码已演进实际复现指标可能因框架版本与随机种子而有所差异应以本仓库当前代码重新训练得到的分数为准若语料包含非 16kHz 采样率data.sh会通过 sox 在线重采样请确保环境中安装了sox。延伸阅读配方主脚本egs2/babel/asr1/run.sh语言选择与 asr.sh 调用入口数据准备egs2/babel/asr1/local/setup_languages.sh、egs2/babel/asr1/local/prepare_data.sh、egs2/babel/asr1/local/data.sh语言映射egs2/babel/asr1/local/lang_list.sh语料路径egs2/babel/asr1/db.sh配置文件conf/train_asr.yaml、conf/train_lm.yaml、conf/decoder_asr.yaml任务调度egs2/babel/asr1/cmd.sh结果汇总工具scripts/utils/show_asr_result.sh赞分享人工智能语音音频深度学习NLP【免费下载链接】espnetEnd-to-End Speech Processing Toolkit项目地址https://gitcode.com/gh_mirrors/es/espnet点击查看免费下载相关推荐ESPnet OWSM v2 s2t1 Recipe 实战指南多语言 ASR 的数据准备、训练与解码ESPnet OWSM v2 s2t1 Recipe 实战指南多语言 ASR 的数据准备、训练与解码 本篇以 ESPnet 仓库中 OWSM v2 的 s2t人工智能语音音频深度学习NLPfairseq ML50 多语言数据流水线实战从原始语料下载到 mBART50 训练数据构建fairseq ML50 多语言数据流水线实战从原始语料下载到 mBART50 训练数据构建 本指南聚焦于 fairseq 仓库中 examples/mult人工智能深度学习预训练NLP语音ESPnet2 瑞士法语多音词语料 ASR 实战Conformer 端到端语音识别 Recipe 与结果复盘ESPnet2 瑞士法语多音词语料 ASR 实战Conformer 端到端语音识别 Recipe 与结果复盘 本篇基于 ESPnet 仓库中 egs2/pol人工智能语音音频深度学习NLP上一篇如何快速开启开源之旅与Pradumna Saraf共学的完整指南下一篇TradingAgents深度解析5步构建你的AI金融交易智囊团创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表