ARTICLE DETAIL

资讯详情

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

ESPnet2 OWSM v3.1 多语言语音识别实战:E-Branchformer 编码器选型、训练配置与数据准备全流程

ESPnet2 OWSM v3.1 多语言语音识别实战:E-Branchformer 编码器选型、训练配置与数据准备全流程 人工智能语音音频深度学习NLP【免费下载链接】espnetEnd-to-End Speech Processing Toolkit项目地址https://gitcode.com/gh_mirrors/es/espnet点击查看免费下载本文围绕 ESPnet2 仓库中的egs2/owsm_v3.1/s2t1配方展开完整覆盖 OWSM v3.1 相对 v3 的改进点、多语言 ASR 参考成绩、1.02B 参数模型的训练/推理 YAML 配置、run.sh参数含义以及弱监督多语料集的数据准备流程。读完本文你可以复现该配方的训练、解码流程理解 E-Branchformer 编码器在 ESPnet2 S2T 任务中的接法并掌握跨 v1/v2/v3 三个版本渐进式准备大规模多语言数据的操作要点。一、OWSM v3.1 的定位换编码器不加数据OWSMOpen-Source Weakly-Supervised Multilingual ASR是 ESPnet2 中面向多语言、弱监督场景的语音识别工具链。v3.1 是 v3 的改进版本其核心思路在配方 READMEegs2/owsm_v3.1/s2t1/README.md中概括为两点不引入任何新的训练数据而是采用 SOTA 语音编码器 E-Branchformer 替换原编码器相对 v3 有两处数据处理差异不再使用 WSJ 作为训练语料部分数据集的转写文本原本是全大写uppercasev3.1 中统一转换为小写。官方发布的 OWSM v3.1 模型仓库名espnet/owsm_v3.1_ebf对应本配方训练出的 medium 规模模型。从 训练配置文件 头部注释看该系列还发布了另外两个规模均基于同一配方体系规模参数量对应实验目录配置文件注释中给出Base101Mexp/s2t_train_s2t_ebf_conv2d_size384_e6_d6_piecewise_lr1e-3_warmup60k_flashattn_lessreg_raw_bpe50000Small367Mexp/s2t_train_s2t_ebf_conv2d_size768_e9_d9_piecewise_lr5e-4_warmup60k_flashattn_raw_bpe50000Medium1.02B本目录默认配置size1024_e18_d18二、参考 ASR 成绩attention-based greedy search配方 README 给出的成绩表采用 attention 路径的贪心解码greedy search与 769M 的 Whisper medium、889M 的 OWSM v3 对比OWSM v3.1 为 1.02B。完整结果如下WER 或 CERTest setLanguageWhisper medium (769M)OWSM v3 (889M)OWSM v3.1 (1.02B)LibriSpeech test-cleaneng2.82.72.4LibriSpeech test-othereng6.56.05.0Switchboard eval2000eng19.417.216.3TEDLIUMeng5.14.85.1WSJ eval92eng2.913.43.5CommonVoiceeng11.914.512.6FLEURSeng6.410.99.0VoxPopulieng7.69.28.4Multilingual LibriSpeecheng10.27.47.1Multilingual LibriSpeechspa6.111.79.0Multilingual LibriSpeechfra9.714.112.1Multilingual LibriSpeechdeu8.111.910.8Multilingual LibriSpeechnld12.217.718.1Multilingual LibriSpeechita15.624.520.2Multilingual LibriSpeechpor8.928.221.6Multilingual LibriSpeechpol6.837.025.2AISHELL-1zho15.77.16.4ksponspeech eval-cleankor17.620.516.7ksponspeech eval-otherkor12.822.618.9ReazonSpeechjpn25.311.37.9从这张表可以读出 v3.1 的主要变化WSJ eval92 从 13.4 降到 3.5这正是去掉 WSJ 训练数据的直接效果——消除了训练/测试同源带来的虚高泛化担忧同时整体精度不降反升说明提升来自编码器而非数据泄漏日语 ReazonSpeech 从 11.3 降到 7.9是改进最显著的语言之一多语种低资源场景MLS pol 37.0→25.2、MLS por 28.2→21.6改善幅度最大符合更强编码器在弱监督、跨语言场景收益更大的规律个别条目TEDLIUM 5.1 vs 4.8、MLS nld 18.1 vs 17.7相对 v3 略有回退属于多目标多语料训练的正常波动。三、模型结构E-Branchformer 编码器 Transformer 解码器3.1 编码器选型v3.1 的编码器注册名为e_branchformer实现在 espnet2/asr/encoder/e_branchformer_encoder.py另有一个 CTC 专用变体 e_branchformer_ctc_encoder.py。E-Branchformer 是 Branchformer 的增强变体其增强主要体现在融合卷积门控 MLPCG-MLP与门控线性注意力等模块本配置同时启用了 Flash Attention 以降低长序列注意力开销。训练配置中编码器相关的关键参数encoder: e_branchformer encoder_conf: output_size: 1024 # 编码器输出维度medium 规模 attention_heads: 16 attention_layer_type: selfattn pos_enc_layer_type: abs_pos # 绝对位置编码 rel_pos_type: latest qk_norm: false use_flash_attn: true # 开启 Flash Attention cgmlp_linear_units: 4096 # CG-MLP 的线性单位 cgmlp_conv_kernel: 31 # CG-MLP 的卷积核宽度 use_linear_after_conv: false gate_activation: identity num_blocks: 18 # 18 层 E-Branchformer 块 dropout_rate: 0.1 positional_dropout_rate: 0.1 attention_dropout_rate: 0.1 input_layer: conv2d # 卷积前端STFT 谱图 - 嵌入 layer_drop_rate: 0.0 linear_units: 4096 positionwise_layer_type: linear use_ffn: true macaron_ffn: true # Macaron 风格 FFN前后两个半尺度 FFN merge_conv_kernel: 31配套的前端与正则化设置frontend_conf: n_fft: 512 # 4096 点窗 16kHz 约 32ms win_length: 400 hop_length: 160 # 10ms 帧移 specaug: specaug specaug_conf: apply_time_warp: false apply_freq_mask: true freq_mask_width_range: [0, 27] num_freq_mask: 2 apply_time_mask: true time_mask_width_ratio_range: [0., 0.05] num_time_mask: 10解码器为标准 Transformer18 块、16 头、FFN 4096同样开启 Flash Attentiondecoder: transformer decoder_conf: attention_heads: 16 linear_units: 4096 num_blocks: 18 dropout_rate: 0.1 positional_dropout_rate: 0.1 self_attention_dropout_rate: 0.1 src_attention_dropout_rate: 0.1 use_flash_attn: true3.2 预处理器与联合损失配置中的preprocessor: s2t暴露了 OWSM 系列的弱监督设计训练文本被拆成text_prev上一句上下文与text_ctcCTC 分支文本并以一定概率注入时间戳信息preprocessor: s2t preprocessor_conf: text_prev_name: text_prev # 上一句文本通道 text_ctc_name: text_ctc # CTC 分支文本通道 fs: 16000 na_symbol: na speech_length: 30 speech_resolution: 0.02 speech_init_silence: 30 text_prev_apply_prob: 0.5 time_apply_prob: 0.5 notime_symbol: notimestamps first_time_symbol: 0.00 last_time_symbol: 30.00 model_conf: ctc_weight: 0.3 # 联合 CTCattention 损失权重 lsm_weight: 0.1 # label smoothing length_normalized_loss: false sym_na: na这意味着模型同时学习了带上一句上下文预测当前句与逐帧 CTC 对齐两种监督解码时可用纯 attention 路径本配方即如此也具备 CTC 前缀扩展、强制对齐等能力的基础。3.3 优化与批处理策略optim: adamw optim_conf: lr: 2.0e-04 betas: [0.9, 0.98] eps: 1.0e-06 weight_decay: 0.0 scheduler: piecewiselinearwarmuplr scheduler_conf: warmup_steps_list: [0, 30000, 60000] warmup_lr_list: [0., 5.0e-05, 2.0e-04] batch_type: unsorted # 不排序批处理避免长句聚集 batch_size: 256 # 4 GPU/node x 16 nodes 64 GPU 下 accum_grad: 1 num_iters_per_epoch: 15000 max_epoch: 45 keep_nbest_models: 5 nbest_averaging_interval: 5 # 每 5 个 epoch 做一次 nbest 权重平均 use_amp: true # 混合精度 num_att_plot: 0 # flash_attn 下关闭注意力可视化学习率采用两段式线性 warmup0~3 万 step 从 0 升到 5e-53~6 万 step 再升到峰值 2e-4对应文件名中的piecewise_lr2e-4_warmup60k。最佳模型按valid/acc最大值选择并保留 5 个 nbest 做平均。四、训练入口run.sh 的参数解读run.sh 是 OWSM v3.1 的完整训练/评估入口它封装了 s2t.sh 的 1~13 阶段流水线train_settrain valid_setdev test_setsdev nbpe50000 s2t_configconf/train_s2t_ebf_conv2d_size1024_e18_d18_piecewise_lr2e-4_warmup60k_flashattn.yaml inference_configconf/decode_s2t.yaml ./s2t.sh \ --stage 1 \ --stop_stage 13 \ --use_lm false \ --num_nodes 16 \ --ngpu 4 \ --nj 64 \ --gpu_inference true \ --inference_nj 64 \ --num_splits_s2t 12 \ --feats_type raw \ --audio_format flac.ark \ --token_type bpe \ --nbpe ${nbpe} \ --bpe_input_sentence_size 15000000 \ --s2t_config ${s2t_config} \ --inference_config ${inference_config} \ --train_set ${train_set} \ --valid_set ${valid_set} \ --test_sets ${test_sets} \ --bpe_train_text dump/raw/${train_set}/text \ --bpe_nlsyms data/nlsyms.txt \ --lm_train_text dump/raw/${train_set}/text $关键参数与底层行为对应关系均可在 s2t.sh 中逐条找到解析逻辑参数取值作用--feats_type rawraw使用原始波形而非 fbank作为输入配合编码器input_layer: conv2d的卷积前端在 GPU 上做 STFT数据落到dump/raw--audio_format flac.arkflac.ark阶段 3 由format_wav_scp.sh将音频统一为 flac.ark 格式适合大规模语料--token_type bpe --nbpe 50000BPE 5 万阶段 5 调用spm_trainunigram训练 50000 词表并追加blank/unk/sos/eos/sop特殊符号--bpe_input_sentence_size 150000001500 万sentencepiece 内部输入缓冲规模用于超大规模多语言文本--bpe_nlsyms data/nlsyms.txtnlsyms 文件时间戳/语言符号等被声明为非语言符号防止被 BPE 切碎--num_splits_s2t 1212训练数据切成 12 个 split 供多节点 DDP 读取--use_lm false关闭 LM解码阶段跳过 LM 相关 stage6~8--num_nodes 16 --ngpu 464 GPU与训练配置中batch_size: 256每 rank相乘即为全局吞吐--gpu_inference true --inference_nj 64GPU 批量解码阶段 12~13 的推理并行度s2t.sh的阶段划分stage 1 为数据准备stage 3 音频格式化为 rawstage 4 去除过长/过短与空文本样本stage 5 BPEstage 10 训练stage 12~13 解码与评估保证了跳过式运行例如数据已就绪时可以从--stage 10直接开始训练。注意--test_sets dev表明配方默认只在 dev 上出成绩正式测试集需要按标准 ESPnet2 格式另行准备。另外两点从源码结构看需要留意本配方local/目录在当前仓库快照中仅含一个空的 path.shESPnet 环境路径设置脚本。而s2t.sh的 stage 1 会调用local/data.sh因此实际运行前需要把集中的数据准备脚本见下节v3 配方中即 egs2/owsm_v3/s2t1/local/data.sh及对应prepare_*.sh放进本配方的local/目录path.sh为空说明用户需自行完成 ESPnet 的 Python 环境搭建可参考仓库顶层 tools/ 下的安装脚本与 doc/installation.md。五、数据准备v1 → v2 → v3 渐进式多语料准备OWSM v3.1 的 README 给出的数据准备指引7 条是操作的核心必须逐条遵守必须从 v1 到 v3 渐进准备要拿到完整的 v3 数据需要依次执行bash local/data.sh --VERSION v1、--VERSION v2、--VERSION v3先修订db.sh运行local/data.sh前需为所有数据集修正路径。部分数据集因授权问题无法自动下载解压需要用户自行处理数据量巨大脚本不能保证每个数据集都一次跑通发现 bug 请提 issue该脚本只准备 train 和 valid 子集测试集需按常规 ESPnet2 格式单独准备强烈不建议使用合并后的train_v*/valid_v*做特征抽取推荐对每个数据集分别执行 stage 2~4再把所有数据集合并到dump/raw目录下——这样便于同时处理、检查和调试所有数据集官方实验正是这么做的更多实现细节可见 OWSM 数据准备对应的 PRespnet/espnet#5478正文不附链接详细数据清单在local/data.sh中数据构成另见 OWSM 论文arXiv:2309.13876。结合 v3 配方中的 local/data.sh三个版本各自的数据范围是版本数据集训练集示例v1aishell、covost2、gigaspeech、librispeech、must-c、spgispeech含 TEDLIUM3data/AISHELL-1/train、data/LibriSpeech/train-{clean-100,clean-360,other-500}、data/GigaSpeech/XL、data/TEDLIUM3/train等v2gigast、multilingual_librispeech、wenetspeechdata/GigaST/XL.en-*、data/MLS/train.*、data/WenetSpeech/Lv3aidatatang、ami、commonvoice、swbd、fisher_callhome、fleurs、ksponspeech、magicdata、reazonspeech、ru_open_stt、vctk、voxpopuli、wsj、voxforge、babel、openslrdata/ksponspeech/train_whisper、data/swbd/train_nodup_whisper、data/wsj/train_si284_whisper等脚本内部的工作机制对排错很有用stage 1按datasets列表逐个调用local/prepare_${dataset}.sh并用data/.${dataset}.done标记文件实现断点续跑已完成的语料自动跳过stage 2用utils/combine_data.sh将各语料的 train/valid 合并为data/train_v*、data/valid_v*v2 会先把 v1 结果拷入并拼接v3 再拼 v2体现渐进结构v3 引入 ISO-639-3 语言标识合并时会把 v2 中的语言 ID 通过local/filter_lang_id.py统一转换为 ISO-639-3这是多语言解码时lang_sym取值一致性的关键合并时强制text.prev、text.ctc等附加文件保持已排序且唯一check_sorted随后fix_data_dir.shvalidate_data_dir.sh做一致性校验。v3.1 配方的 db.sh 是语料路径清单赋值为downloads的条目如LIBRISPEECH、MLS、COMMONVOICE、AISHELL、REAZONSPEECH、FLEURS、KSPONSPEECH、VOXPOPULI等表示可被脚本自动下载到downloads/留空的条目如WSJ0、SWBD、AMI、CSJDATATOP则需要用户手动放置语料并填写路径。文件尾部还针对特定集群环境hostname判断自动改写路径说明这套脚本是为多机构协作维护的。对照 v3.1 的两条声明可以在源码层面找到印证v3 的data.sh注释明确写了AMI VoxForge: original text are all in upper case. Change them all into lower cases对应 v3.1 的大写转小写改动而 v3.1 去掉 WSJ 后WSJ eval92 成绩13.4→3.5验证了训练集与测试集解耦后的真实泛化水平。六、解码配置贪心 attention 解码decode_s2t.yaml 很短但每一项都对应 README 中attention-based greedy search的成绩口径beam_size: 1 # 束宽 1 贪心搜索 penalty: 0.0 # 关闭长度/重复惩罚 maxlenratio: 0.4 minlenratio: 0.0 ctc_weight: 0.0 # 只用 attention 路径CTC 不参与解码 lm_weight: 0.0 # 不使用语言模型 lang_sym: eng # 输入语言符号多语料按 ISO-639-3 体系注入 task_sym: asr # 任务符号ASR predict_time: false # 不输出时间戳尽管训练时 time_apply_prob 0.5 学会了时间戳即输入engasr前缀符号引导模型做多语言 ASR纯 attention 贪心输出。若要复现其他口径如 CTC 前缀扩展、带时间戳输出只需调整ctc_weight与predict_time模型能力已具备。七、实操清单与注意事项复现训练先按第五节完成 v1/v2/v3 数据准备与路径配置再运行 run.sh默认 16 节点 × 4 GPU 的规模参数可按资源缩减--num_nodes/--ngpu注意batch_size: 256是 per-rank 语义只跑解码可借助s2t.sh的--skip_data_prep/--skip_train组合跳到 stage 12/13--inference_s2t_model指向已下载的模型权重数据校验合并后务必检查data/train_v*/text.prev、text.ctc的排序唯一性这是data.sh中check_sorted强制执行的前提授权合规db.sh中留空的语料WSJ、SWBD、AMI、BABEL 等均有使用协议需自行申请与解压脚本不会也不应代为处理v3.1 与 v3 的差异清单便于对照排查编码器由 v3 的 Transformer24 层见 v3 训练配置换成 18 层 E-Branchformer训练集去掉 WSJ全大写文本统一小写化。综上egs2/owsm_v3.1/s2t1提供了一个不换数据、只换编码器的对照实验样本完整的参考成绩、可逐参数解释的训练/解码 YAML、以及一套可断点续跑的渐进式多语言数据准备流水线是理解 ESPnet2 中大规模弱监督多语言 S2T 训练组织方式的典型配方。赞分享人工智能语音音频深度学习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人工智能语音音频深度学习NLPESPnet2 OWSM v1 实战指南渐进式多语料准备与 s2t1 语音转文本流水线ESPnet2 OWSM v1 实战指南渐进式多语料准备与 s2t1 语音转文本流水线 本文以 egs2/owsm_v1/s2t1 食谱recipe的官方人工智能语音音频深度学习NLPESPnet OWSM-CTC v3.1 实战指南encoder-only 多任务语音基础模型的数据格式、训练配置与 CTC 推理ESPnet OWSM CTC v3.1 实战指南encoder only 多任务语音基础模型的数据格式、训练配置与 CTC 推理 本篇技术指南围绕 ESPn人工智能语音音频深度学习NLP上一篇PathOfBuilding错误监控系统Sentry集成方案下一篇EIP-210 详解Blockhash 重构——用系统合约把历史区块哈希搬进状态树创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表