人工智能语音深度学习预训练模型推理服务【免费下载链接】wenetProduction First and Production Ready End-to-End Speech Recognition Toolkit项目地址https://gitcode.com/gh_mirrors/we/wenet点击查看免费下载WenetSpeech 是 WeNet 官方在千小时级中文语音识别基准上验证生产级效果的主战场。本文以 examples/wenetspeech/s0/README.md 中的性能记录为核心结合该目录下真实可复现的训练配置Conformer、Conformer bidecoder、U2 Conformer、U2 AISHELL-4 联合训练与端到端运行脚本系统讲解大规模中文 ASR 的数据准备、shard 化、分布式训练、Checkpoint 平均与多模式解码的完整链路以及 Dev / Test_Net / Test_Meeting 三套评测集上的 CER 对照。读完本文你将掌握 WenetSpeech 上从数据到模型再到解码的完整实战方案并能独立解读 WeNet 类 README 中的性能表格。一、WenetSpeech 基准与评测集划分WenetSpeech 是目前规模最大的开源中文语音语料之一其官方划分包含训练集train_l、train_m、train_s、train_w以及三套评测集dev、test_net网络语音与test_meeting会议语音。其中test_meeting覆盖真实会议场景远场、混响与重叠语音比例高历来是 CER 最难刷低的子集因此 README 中所有性能记录均以这三套数据分别给出 CER。在 wenetspeech_data_prep.sh 中各子集的命名映射被明确声明subsets( [L]train_l [M]train_m [S]train_s [W]train_w [DEV]dev [TEST_NET]test_net [TEST_MEETING]test_meeting)脚本以WenetSpeech.json与audio/目录为输入stage 1通过extract_meta.py抽取wav.scp / text / segments / utt2dur元数据stage 2再按utt2subsets中的标签把语料切分到各子集目录。若需要小规模训练集可通过--train-subset L|M|S|W参数选择例如只取L子集进行数据准备local/wenetspeech_data_prep.sh --train-subset L /path/to/wenetspeech data/二、四套可复现训练配置逐项拆解README 记录了四组代表性实验每一组都能在 examples/wenetspeech/s0/conf/ 下找到对应 YAML。下表汇总它们的核心训练信息实验配置文件模型结构学习率batch硬件与时长训练步数/轮数Conformertrain_conformer.yamlConformer encoder Transformer decoder0.001static 3224 × V10026 epochsConformer bidecodertrain_conformer_bidecoder.yamlConformer bitransformer decoder0.001static 3224 × V10026 epochsU2 Conformertrain_u2_conformer.yaml动态 chunk Conformer bitransformer0.001dynamic 360008 × 3090约 4.6 天130k stepsU2 AISHELL-4train_u2_conformer_wenetspeech_aishell4.yaml同上联合训练0.001dynamic 360008 × 3090 梯度检查点约 8.5 天60 epochs2.1 Conformer离线模型基线train_conformer.yaml 是标准的离线 Conformer-CTC/Attention 混合模型EncoderConformeroutput_size 512、attention_heads 8、linear_units 2048、num_blocks 12、卷积核cnn_module_kernel 15、activation_type swish、位置编码rel_pos、自注意力rel_selfattnDecoderTransformer6 层、8 头、FFN 2048模型级超参ctc_weight 0.3、lsm_weight 0.1label smoothing、length_normalized_loss false特征80 维 fbank、帧移 10ms、帧长 25ms、dither 1.0、全局 CMVN训练时speed_perturb false开启spec_aug优化Adam warmuplrwarmup_steps 5000、lr 0.001、accum_grad 16、grad_clip 5、max_epoch 26。数据侧采用batch_type static batch_size 32并用filter_conf过滤过长/过短样本max_length 1200、min_length 10配合shuffle_size 1500 / sort_size 1000的分桶排序保证 batch 内帧长分布稳定。2.2 Conformer bidecoder双向解码器train_conformer_bidecoder.yaml 与 Conformer 基线仅 decoder 不同改用bitransformernum_blocks 3 r_num_blocks 3并在model_conf中设置reverse_weight 0.3即训练时引入从右向左解码路径。2.3 U2 Conformer流式友好动态 chunktrain_u2_conformer.yaml 面向流式部署设计了动态 chunk 结构是 README 中效果最好的系列use_dynamic_chunk: true、use_dynamic_left_chunk: falsecausal: true配合input_layer conv2d完成下采样decoder 为bitransformernum_blocks 3/r_num_blocks 3model_conf中ctc_weight 0.3、reverse_weight 0.3数据侧改为dynamic batchbatch_type dynamic max_frames_in_batch 36000不再固定 batch_size而是按总帧数动态组装 batch缓解长短尾分布导致的显存浪费增加spec_sub与spec_trim两种额外增强max_t 30、num_t_sub 3并把speed_perturb打开save_interval 1000按 step 保存 checkpoint配合warmup_steps 50000、max_epoch 100适配大数据集长时间训练启用gradient_checkpointing以显存换计算是 309024G上训练该规模模型的关键手段。2.4 U2 Conformer AISHELL-4领域数据联合训练train_u2_conformer_wenetspeech_aishell4.yaml 在 U2 基础上混入 AISHELL-4 会议数据max_epoch 60、warmup_steps 100000input_dim 80 / output_dim 5549 / vocab_size 5549已写入配置。联合训练对test_meeting的 CER 改善极为显著详见第四节是会议场景的首选方案。三、从数据到训练run.sh 全流程解读run.sh 将 WenetSpeech 的完整流程固化为 stage 化的 shell 脚本stage-1至stage6要点如下。3.1 GPU 自动检测与多机配置脚本开篇自动检测本机 GPU 数量并生成CUDA_VISIBLE_DEVICES也支持手动指定多机训练通过HOST_NODE_ADDRlocalhost:0与num_nodes1控制参照 PyTorch elastic run 规范。3.2 Stage 0–2数据准备、词典与 CMVNStage 0调用local/wenetspeech_data_prep.sh --train-subset $set生成data/train_l等 kaldi 风格目录Stage 1生成字符词典data/dict/lang_char.txt。注意前三行的固定约定blank 0CTC blank 必须是 0、unk 1、sos/eos 2并额外写入▁ 3作为空格符号随后用tools/text2token.py -s 1 -n 1 --space ▁统计语料字符追加到词典Stage 2采样计算全局 CMVN。cmvn_sampling_divisor20表示只用 5% 数据估算shuf -n $sampling_size wav.scp采样后调用tools/compute_cmvn_stats.py --num_workers 16输出data/train_l/global_cmvnJSON 格式对应配置中cmvn_file: data/train_l/global_cmvn与is_json_cmvn: true。3.3 Stage 3shard 化打包大数据集采用 shard 格式tar 分包 data.list索引以提升 IO 效率。该 stage 对dev / test_net / test_meeting / train_l逐一执行tools/make_shard_list.py --resample 16000 --num_utts_per_shard 1000 \ --num_threads 32 --segments data/$x/segments \ data/$x/wav.scp data/$x/text \ $(realpath $dst) data/$x/data.list脚本明确提示shards_dir需约1.2T磁盘空间32 线程打包约需12 小时。3.4 Stage 4torchrun 分布式训练训练由wenet/bin/train.py承担通过torchrun --nnodes$num_nodes --nproc_per_node$num_gpus --rdzv_endpoint$HOST_NODE_ADDR拉起torchrun --nnodes$num_nodes --nproc_per_node$num_gpus --rdzv_endpoint$HOST_NODE_ADDR \ --rdzv_id2023 --rdzv_backendc10d \ wenet/bin/train.py \ --train_engine torch_ddp \ --config $train_config \ --data_type shard \ --train_data data/train_l/data.list \ --cv_data data/dev/data.list \ --model_dir exp/u2pp_conformer \ --tensorboard_dir tensorboard \ --ddp.dist_backend nccl \ --num_workers 8 --prefetch 10 --pin_memory --timeout 1200train_engine默认torch_ddp也支持deepspeed配合../whisper/conf/ds_stage1.json训练中会把train.yaml含模型输入/输出维度自动写到$dir供后续解码与导出复用。3.5 Stage 5Checkpoint 平均与多模式解码解码前先做 Checkpoint 平均这是 WeNet 官方实践中稳定提分的关键步骤python wenet/bin/average_model.py \ --dst_model $dir/avg5_modestep_max88888888.pt \ --src_path $dir --num ${average_num} --mode ${average_mode} \ --max_step ${max_step} --val_bestaverage_checkpointtrue、average_num5、average_modestep、max_step88888888对应 README 中 average_num 5/10 的记录口径。随后对每个测试集用wenet/bin/recognize.py并行解码python wenet/bin/recognize.py --gpu ${device_id} \ --modes ctc_greedy_search ctc_prefix_beam_search attention attention_rescoring \ --config $dir/train.yaml --data_type shard \ --test_data data/$testset/data.list --checkpoint $decode_checkpoint \ --beam_size 10 --batch_size 16 \ --blank_penalty ${blank_penalty} --length_penalty ${length_penalty} \ --ctc_weight $ctc_weight --reverse_weight $reverse_weight \ --result_dir $result_dir在 recognize.py 中各解码模式在模型前向推理阶段即被批量执行且dither、speed_perturb、spec_aug等增强项在测试配置中统一关闭、filter_conf放宽到 102400保证评测口径与训练不同。最后用tools/compute-wer.py --char1 --v1计算 CER。四、性能记录逐表解读CER 越低越好以下全部表格均转录自 examples/wenetspeech/s0/README.mdCER 单位为 %。4.1 Conformer 基线离线特征fbank dither 1.0 CMVN训练lr 0.001、static batch 32、24 × V100、accum_grad 16、26 epochs解码ctc_weight 0.5、average_num 10。解码方式DevTest_NetTest_Meetingctc_greedy_search8.8810.2915.96attention9.3810.1217.28attention_rescoring8.699.715.594.2 Conformer bidecoder同一特征与训练超参仅 decoder 换为双向。可见双向解码对网络语音Test_Net 9.25有明显增益解码方式DevTest_NetTest_Meetingctc_greedy_search8.989.5516.48attention9.4210.5718.05attention_rescoring8.859.2516.184.3 U2 Conformer动态 chunk流式部署首选训练lr 0.002、dynamic batch 24000、24 × 3090、accum_grad 16、80 epochs、约 4.5 天解码ctc_weight 0.5、reverse_weight 0.0、average_num 10blank penalty 2.5、length penalty 8.5dev/test_meetingtest_net 为 0.0。full表示整句 chunk离线16表示 chunk size 16 的流式解码解码方式 - ChunkDevTest_NetTest_Meetingctc prefix beam search - full7.219.4614.02ctc prefix beam search - 167.9311.1416.37attention rescoring - full7.108.8313.64attention rescoring - 167.5710.1315.55attention - full7.739.4414.98chunk16 相比 full 在 Test_Net 上损失约 1.3 个点这是流式场景“低延迟换精度”的典型权衡。4.4 U2 Conformertext_fixed 数据修正版基于修正后的 WenetSpeech 文本标注对应官方 discussion #54 及 PR #2371训练lr 0.001、dynamic batch 36000、8 × 3090、accum_grad 4、130k steps、约 4.6 天解码ctc_weight 0.5、reverse_weight 0.0、average_num 5、blank/length penalty 均为 0.0解码方式 - ChunkDevTest_NetTest_Meetingctc prefix beam search - full6.269.4612.52attention rescoring - full5.908.9611.99attention - full5.878.8711.79纯文本修正就把 Dev 从 7.21 压到 6.26、Test_Meeting 从 14.02 压到 12.52说明标注质量对 CER 的影响甚至大于架构变更。4.5 U2 Conformerwenetspeech aishell4在 U2 基础上混入 AISHELL-4 会议语料lr 0.001、dynamic batch 36000、梯度检查点、torch_ddp、8 × 3090、accum_grad 4、60 epochs、约 8.5 天解码ctc_weight 0.5、reverse_weight 0.0、average_num 10blank penalty 2.5 仅用于 dev解码方式 - ChunkDevTest_NetTest_Meetingctc prefix beam search - full8.0110.149.76attention rescoring - full7.899.679.38联合训练把 Test_Meeting 从 12.52 一步压到 9.38相对下降约 25%验证了“目标领域数据联合训练”是攻克会议场景的最有效手段。五、读懂 CER 表格中的 N/C/S/D/I 字段U2 表格在 CER 后给出了形如7.21 % N328207 C309358 S14175 D4674 I4801的明细含义如下对应 compute-wer.py 的统计口径N参考文本总字数C正确匹配的字数S替换substitution字数D删除deletion字数I插入insertion字数。三者满足CER (S D I) / N且N C S D。以 Dev 的N328207 C309358 S14175 D4674 I4801验算(14175 4674 4801) / 328207 ≈ 7.21%与 CER 完全一致。会议场景的 I插入偏高是口语化、语气词多的直接体现。六、解码参数对结果的影响与调优建议综合各表可见WeNet 官方解码口径的核心参数是ctc_weight、reverse_weight、blank_penalty与length_penalty全部通过 recognize.py 的 CLI 参数透传--ctc_weightCTC 与 attention 联合解码的权重测试阶段通常取 0.5高于训练时的 0.3--reverse_weight右到左解码器权重。U2 在评测中通常设为 0.0 以获得更稳的结果配置文件中训练值为 0.3--blank_penalty对 CTC blank 打惩罚分用于抑制过长停顿造成的插入/删除错误README 中 dev/test_meeting 常取 2.5test_net 取 0.0--length_penalty长度归一化指数在 search.py 中以scores / lengths.pow(length_penalty)实现对会议长句8.5与普通网络短句0.0差异显著--decoding_chunk_size流式 chunk 大小-1/不指定为 full 整句解码16 为 16 帧 chunk。建议复现流程先用默认参数ctc_weight 0.5、blank/length penalty 0.0跑通再针对目标集小范围网格搜索 blank_penalty ∈ {0, 2.5} 与 length_penalty ∈ {0, 8.5}即可贴近 README 中的最佳记录。七、总结WenetSpeech 示例目录浓缩了 WeNet 面向大规模生产语音识别的最佳实践fbank dither CMVN spec_aug/spec_sub/spec_trim的特征工程、dynamic batch 与 gradient checkpointing 的显存策略、shard 化 IO、average_model.py的 Checkpoint 平均以及ctc_greedy_search / ctc_prefix_beam_search / attention / attention_rescoring四种解码模式的横向对比。README 中的 CER 表格不仅是一组结果更是一套完整的“配置—训练—解码—评测”对照实验方法论从 15.96 到 9.38 的 Test_Meeting 演进正是架构升级U2、数据修正text_fixed与领域联合训练AISHELL-4三路并进的产物。想要在大规模中文语料上复现甚至超越该基准可直接沿用 conf/ 下的 YAML 与 run.sh 的分 stage 流水线。赞分享人工智能语音深度学习预训练模型推理服务【免费下载链接】wenetProduction First and Production Ready End-to-End Speech Recognition Toolkit项目地址https://gitcode.com/gh_mirrors/we/wenet点击查看免费下载相关推荐PaddleSpeech WenetSpeech asr1 大规模中文语音识别实验基准解读流式/非流式 Conformer 与 U2 的 CER 全解析PaddleSpeech WenetSpeech asr1 大规模中文语音识别实验基准解读流式/非流式 Conformer 与 U2 的 CER 全解析人工智能语音音频PaddleSpeech 实战基于 TALCS 数据集训练 Transformer/Conformer U2 语音识别模型PaddleSpeech 实战基于 TALCS 数据集训练 Transformer/Conformer U2 语音识别模型 TALCSTAL English人工智能语音音频WeNet TIMIT 语音识别实战phn 词表下 Conformer 与 Transformer 的训练流程与 WER 性能对比WeNet TIMIT 语音识别实战phn 词表下 Conformer 与 Transformer 的训练流程与 WER 性能对比 本文围绕 examples人工智能语音深度学习预训练模型推理服务上一篇tsx 中的 TypeScript 模块解析扩展名替换、包子路径与运行时解析策略解析下一篇MCA Selector终极指南5分钟学会Minecraft区块管理技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考