资讯动态

ESPnet 离散语音 Token ASR 实战:GigaSpeech asr2 食谱(WavLM + K-means + Branchformer)配置与结果全解析

发布时间:2026/9/25 13:00:48 来源:尧图企业网站定制
人工智能语音音频深度学习NLP【免费下载链接】espnetEnd-to-End Speech Processing Toolkit项目地址https://gitcode.com/gh_mirrors/es/espnet点击查看免费下载本篇技术指南以 ESPnet 仓库中 egs2/gigaspeech/asr2/README.md 的实验结果报告为核心结合该食谱下的 run.sh、asr2.sh 以及训练/解码配置文件系统讲解离散语音 Token 端到端 ASRdiscrete ASR的完整技术路线如何用自监督语音表征WavLM Large的 K-means 聚类结果替代传统声学特征作为编码器输入如何配合 BPE 子词建模与 E-Branchformer 编码器训练以及最终的 WER/CER/TER 评估口径。读完本文你将掌握这套食谱的每一条关键配置的语义、整条 17 阶段数据流与训练流水线并能独立复现或改造该实验。实验概览GigaSpeech 上的离散 ASR 基准egs2/gigaspeech/asr2/README.md 是show_asr_result.sh自动生成的实验结果报告文件头部的Generated by scripts/utils/show_asr_result.sh即表明其来源记录了 GigaSpeech 语料上离散语音 Token ASR的完整训练环境与最终得分。该报告给出的实验环境如下项目值日期Sat Sep 9 03:24:28 EDT 2023Python3.10.10ESPnetespnet 202308PyTorch1.13.1cu117Git hash83e687f3b41310a000f4a5b65857734709752bf62023-08-15实验目录为exp/asr_train_discrete_asr_e_branchformer1_e12_lr_raw_wavlm_large_21_km1000_bpe_rm6000_bpe_ts3000目录名本身就是整条实验配方的浓缩discrete_asr模型 e_branchformer1_e12_lr编码器配置 raw特征类型 wavlm_large_21特征第 21 层km10001000 个 K-means 聚类bpe_rm6000源端 6000 词 BPE、去除重复 Tokenbpe_ts3000目标端 3000 词 BPE、保留完整序列。配套的模型权重在 HuggingFace 上以eason_gigaspeech_train_asr2_e_branchformer12_lr_raw_wavlm_large_21_km1000为名发布可通过espnet_model_zoo_download或--download_model参数直接拉取用于推理。报告中最核心的信息是 test 集与 dev 集的 WER/CER/TER 三张结果表如下完整继承它们是理解后续所有配置作用的基准数据。test 集结果解码配置decode_ctc0.3_asr_model_valid.acc.ave句子数 19930datasetSntWrdCorrSubDelInsErrS.Errdecode_ctc0.3_asr_model_valid.acc.ave/test1993039232589.06.94.11.912.973.4CERdatasetSntWrdCorrSubDelInsErrS.Errdecode_ctc0.3_asr_model_valid.acc.ave/test19930205623195.11.53.41.56.473.4TERdatasetSntWrdCorrSubDelInsErrS.Errdecode_ctc0.3_asr_model_valid.acc.ave/test1993052775188.85.55.71.713.073.4dev 集结果org/dev句子数 5715注意前缀org/表示 dev 集在评测时使用未做时长过滤的原始音频目录datasetSntWrdCorrSubDelInsErrS.Errorg/dev571512924089.56.34.22.412.978.8datasetSntWrdCorrSubDelInsErrS.Errorg/dev571567377895.51.33.21.96.378.8datasetSntWrdCorrSubDelInsErrS.Errorg/dev571517094889.55.15.52.012.578.8数据解读要点词错误率WERtest/dev 均为 12.9%说明模型在训练集与验证集上泛化一致以 GigaSpeech 的规模约 10000 小时弱监督数据看纯离散 Token 输入即可逼近传统 Fbank 输入的精度这正是离散语音 Token 可替代连续声学特征这一范式的直接证据。字符错误率CER远低于 WER6.4% vs 12.9%GigaSpeech 文本按词书写词级评分对分词误差与大小写更敏感字符级评分则更宽容Corr正确率从词级 89.0% 提升到字符级 95.1%。TERBPE 级错误率介于二者之间13.0%因为它以 BPE 子词为单位对齐比字符更细、比词更粗。S.Err句子错误率较高73.4%/78.8%句级全对要求非常苛刻单条长句只要有一个词错误即整句判错这与 GigaSpeech 长音频、多说话人、自然场景的特点相符属于长句 ASR 的正常水平。三张表共享Snt与S.Err列而Wrd、Corr/Sub/Del/Ins因评分单位不同而异说明同一批解码结果分别经过 word/char/bpe 三种 tokenize 后由 sclite 打分对应 asr2.sh 第 15 阶段的score_word/score_char/score_ter三个打分循环。整条流水线从 17 阶段脚本看离散 ASR 的数据流与普通 ASR 食谱不同gigaspeech/asr2的入口 run.sh 只负责设定实验参数并调用主脚本 asr2.sh。asr2.sh沿用了 ESPnet2 的分阶段可断点续跑设计共 17 个 stage从源码结构可以梳理出如下完整链路Stage功能关键动作1数据准备local/data.sh生成data/{train,dev,test}的 wav.scp / text / utt2spk2速度扰动--speed_perturb_factors 时跳过本食谱不使用3音频格式统一scripts/audio/format_wav_scp.sh将 wav.scp 转成flac.ark音频格式4长/短句过滤按min_wav_duration0.1、max_wav_duration30过滤并去除空文本5离散 Token 生成scripts/feats/perform_kmeans.sh提 SSL 特征 K-means 聚类再把聚类索引映射为 CJK 伪字符文本6特征目录整理将text.${src_case}.${src_lang}、text.${tgt_case}.${tgt_lang}汇入dump/raw7BPE 建模分别对源端离散 Token 文本与目标端英文文本训练 SentencePiece 模型8–10LMcollect stats、训练、计算 perplexity本食谱--use_lm false跳过11N-gramlmplz/build_binary--use_ngram false跳过12ASR collect statsespnet2.bin.mt_train --collect_stats true统计输入/输出长度分布13ASR 训练espnet2.bin.mt_train训练 discrete ASR 模型14解码espnet2.bin.mt_inference支持gpu_inference开关15打分sclite 生成 WER/CER/TER并产出 RESULTS.md16打包espnet2.bin.pack打包为可分发 zip17上传 HuggingFace需设置hf_repo本食谱默认skip_upload_hftrue值得注意的实现细节来自 asr2.sh 源码训练入口复用 MT 任务的 trainerStage 12/13 调用的是espnet2.bin.mt_train输入数据以src_text/text双流方式喂给模型解码阶段则用espnet2.bin.mt_inference。这是离散 ASR 本质上是 Speech-to-Text 的序列到序列任务这一设计思想的体现——语音被离散化为 Token 后与机器翻译共享同一套训练框架。模型注册关系在 espnet2/tasks/mt.py 中discrete_asr通过discrete_asrESPnetDiscreteASRModel第 122 行注册其实现位于 espnet2/asr/discrete_asr_espnet_model.py 的ESPnetDiscreteASRModel第 21 行继承自ESPnetMTModel并在forward第 97 行起中加入 CTC 计算逻辑。mt.py第 426 行还针对args.model discrete_asr做了专门检查确保 CTC 权重等参数合法。CJK 伪字符映射K-means 聚类出的 1000 个整数索引没有语言学含义Stage 5 用chr(int(4e00, 16) i)将索引 i 映射为一U4E00开头的连续 CJK 字符形成可被 SentencePiece 直接切分的伪文本见 asr2.sh 第 816 行附近若nclusters 20900会提示注意 CJK 字符表耗尽的问题。入口参数详解run.sh 中每一项在配置什么run.sh 是复现该实验的配方单所有参数通过--key value传给asr2.sh其中每一项都与实验结果直接相关kmeans_featurewavlm_large/21 # 自监督模型类型/层索引 nclusters1000 src_lang$(echo ${kmeans_feature}_km${nclusters} | tr / _) # wavlm_large_21_km1000 tgt_langen train_settrain; train_devdev; test_setsdev test asr_configconf/tuning/train_discrete_asr_e_branchformer1_e12_lr1e-3.yaml inference_configconf/decode_ctc0.3.yaml gpu_inferencefalse src_nbpe6000 # 源端 BPE 词表 tgt_nbpe3000 # 目标端 BPE 词表 src_caserm # 去重序列删除连续重复的离散 Token tgt_casets # 完整序列保留全部 Token随后调用./asr2.sh关键参数含义如下参数本实验取值作用--kmeans_featurewavlm_large/21决定用哪种 SSL 模型及哪一层特征做聚类斜杠前为 s3prl upstream 名斜杠后为层号--kmeans_opts--portion 0.02 --nj 8只用 2% 数据、8 个并行 job 训练 K-means控制聚类开销--nclusters1000离散 Token 词表大小直接决定源端信息粒度--ngpu 22训练用 GPU 数README 注释显示完整实验在 4×V100 32GB 上完成--src_token_type bpe/--tgt_token_type bpebpe/bpe源端离散 Token 伪文本与目标端英文都用 BPE--audio_format flac.arkflac.ark音频归档格式Ark 文件便于并行读取--src_case rm/--tgt_case tsrm/ts源端删除连续重复 Tokenrm目标端保留原始序列ts--speed_perturb_factors 空不做速度扰动原始实验为控制变量而关闭--src_bpe_train_text/--tgt_bpe_train_textdata/train/text.{rm,ts}.{src,tgt}_langBPE 训练语料分别来自离散 Token 伪文本与英文转录--use_lm false/--use_ngram false关闭解码时不外挂 LM / N-gram考察纯 ASR 模型能力src_caserm是离散 ASR 的重要设计K-means 聚类在帧级产生大量连续重复索引同一聚类覆盖多帧rm模式在生成伪文本时通过awk判断$i ! $(i-1)剔除相邻重复asr2.sh 第 840–854 行从而把帧级冗余压缩成接近音素级的紧凑序列大幅缩短序列长度、降低训练成本ts模式则保留原文供解码参考。若希望对比可把src_case改为ts重新跑 Stage 5 观察训练时长与精度的差异。训练配置逐段解析E-Branchformer 编码离散 Token 序列训练配置 train_discrete_asr_e_branchformer1_e12_lr.yamllr1e-3变体除scheduler_conf.warmup_steps外内容一致是理解本实验模型结构的核心文件分六个模块1. 源端 TokenizerBPE-Dropout 正则化src_tokenizer_encode_conf: enable_sampling: true # 开启 BPE-dropout alpha: 0.4 nbest_size: -1对离散 Token 伪文本启用 BPE-DropoutSentencePiece 的 subword regularization训练时按概率随机采用不同的 BPE 切分等价于对聚类边界施加噪声增强模型对 Token 序列切分歧义的鲁棒性——这是纯离散输入范式下对抗伪文本切分不稳定的关键正则手段。2. 前端Embedding 位置编码frontend: embed # embedding positional encoding frontend_conf: embed_dim: 512 positional_dropout_rate: 0.1由于输入已是离散 Token 序列前端不再做 Fbank/STFT 频谱提取而是直接用embed前端把 Token id 映射为 512 维嵌入并叠加位置编码。这是离散 ASR 与传统 ASR 在架构上最直观的分野。3. 数据增强仅时域掩蔽specaug: specaug specaug_conf: apply_time_warp: false apply_freq_mask: false num_freq_mask: 0 apply_time_mask: true time_mask_width_ratio_range: [0., 0.05] num_time_mask: 10SpecAugment 只保留时间掩蔽num_time_mask: 10掩蔽宽度最多 5% 序列长度关闭频率掩蔽与时间扭曲。原因不难理解离散 Token 没有频率轴语义频率掩蔽没有意义而时间掩蔽对序列建模仍有效。4. 编码器E-Branchformer12 层encoder: e_branchformer encoder_conf: output_size: 256 attention_heads: 4 attention_layer_type: rel_selfattn pos_enc_layer_type: rel_pos rel_pos_type: latest cgmlp_linear_units: 1024 cgmlp_conv_kernel: 31 gate_activation: identity num_blocks: 12 dropout_rate: 0.1 positional_dropout_rate: 0.1 attention_dropout_rate: 0.1 input_layer: conv1d2 linear_units: 1024 positionwise_layer_type: linear use_ffn: true macaron_ffn: true merge_conv_kernel: 31要点12 层 E-Branchformer每个 block 同时走全局注意力分支相对位置自注意力rel_selfattnrel_pos/latest与局部卷积分支CGMLP核宽 31两分支加权融合input_layer: conv1d2先做两次卷积下采样把离散 Token 序列长度压缩后再进 transformer兼顾建模效率与感受野。输出维度 256FFN 隐层 1024。5. 解码器与模型级配置decoder: transformer decoder_conf: attention_heads: 4 linear_units: 2048 num_blocks: 6 dropout_rate: 0.1 layer_drop_rate: 0.0 model: discrete_asr model_conf: ctc_weight: 0.3 lsm_weight: 0.1 length_normalized_loss: false share_decoder_input_output_embed: false6 层标准 Transformer 解码器model: discrete_asr注册到 espnet2/tasks/mt.pyctc_weight: 0.3表示总损失为0.3 × CTC 损失 0.7 × 注意力交叉熵损失lsm_weight: 0.1引入标签平滑。CTC 分支与注意力解码共享编码器输出这一 0.3 的 CTC 权重与解码配置中的ctc_weight: 0.3遥相呼应。6. 优化与训练策略batch_type: numel batch_bins: 50000000 accum_grad: 2 max_epoch: 15 best_model_criterion: [[valid, acc, max]] keep_nbest_models: 10 optim: adam optim_conf: {lr: 0.001, weight_decay: 0.000001} scheduler: warmuplr scheduler_conf: {warmup_steps: 15000}按元素数numel动态批大小、2 步梯度累积、15 个 epoch按验证集 accuracy 选最优模型并保留 10 个候选keep_nbest_models最终解码使用valid.acc.ave.pth10 个最优模型权重平均这与结果表中的decode_ctc0.3_asr_model_valid.acc.ave一一对应。解码配置CTC 前缀融合的束搜索conf/decode_ctc0.3.yaml 完整内容如下beam_size: 10 ctc_weight: 0.3 lm_weight: 0.0 maxlenratio: 1.0 minlenratio: 0.0 penalty: 0.0beam_size: 10束宽 10束搜索在解码器与 CTC 前缀得分融合下进行ctc_weight: 0.3与训练时一致解码时在每一步把 CTC 前缀概率按 0.3 权重并入束搜索打分形成CTC 辅助注意力解码CTC/attention joint decodinglm_weight: 0.0不叠加外部语言模型得分配合--use_lm false保证结果反映的是 ASR 模型自身能力maxlenratio/minlenratio输出长度约束1.0/0.0 表示不做额外约束penalty: 0.0不加长度惩罚。该配置对应的推理入口是espnet2.bin.mt_inferenceasr2.sh 第 1602 行输入为text.${src_case}.${src_lang}离散 Token 伪文本输出token/token_int/score/text四个文件后经 sclite 打分。--gpu_inference false意味着解码可在 CPU 上完成decode_cmd执行_ngpu0。复现与扩展建议复现路径cd egs2/gigaspeech/asr2 ./run.sh # 需先完成 tools 安装、GigaSpeech 数据下载参考 db.sh 与 local/data.sh断点续跑每个 stage 都会在输出目录生成run.sh例如exp/asr_.../run.sh记录--stage 13的续跑命令训练中断后可直接执行。分步控制--stage 5 --stop-stage 5只做聚类与 Token 化便于先检查pseudo_labels_km1000.txt与伪文本质量再进入训练。可调参数方向聚类粒度nclusters从 1000 调至 2000/4000需同步调大src_nbperun.sh 注释提示 2000 聚类配 6000 源 BPEkmeans_feature可换hubert_large/21等其它 SSL 模型对比表征质量。Token 序列策略src_case在ts全序列与rm去重间切换可量化去重压缩对精度与训练速度的影响。训练与解码匹配model_conf.ctc_weight与decode_ctc0.3.yaml的ctc_weight保持一致通常效果更稳可尝试 0.2/0.5 观察 WER 变化。外部 LM 增益将--use_lm true并配置lm_config用英文文本训练 Transformer LM 后在解码时设lm_weight通常可在 dev/test 上进一步压低 WER。小结GigaSpeech asr2 实验用一套可复现的 17 阶段流水线证明WavLM Large/21 层特征 → 1000 聚类 → 去重伪文本 → 6000 源 BPE的离散 Token 序列配合 E-Branchformer 编码器与 0.3 权重的 CTC 融合解码即可在 GigaSpeech 上取得 test/dev 均 12.9% 的 WERCER 6.4%、TER 13.0%。这套范式把语音变成了文本从而复用了 MT 的训练框架espnet2/tasks/mt.py、espnet2/asr/discrete_asr_espnet_model.py也为后续接入语言模型、迈向语音 LLM 提供了统一接口——所有关键配置、脚本与结果表均可在 egs2/gigaspeech/asr2 目录下直接查阅与验证。赞分享人工智能语音音频深度学习NLP【免费下载链接】espnetEnd-to-End Speech Processing Toolkit项目地址https://gitcode.com/gh_mirrors/es/espnet点击查看免费下载相关推荐Cursor免费试用重置终极指南如何彻底解决Too many free trial accounts错误Cursor免费试用重置终极指南如何彻底解决Too many free trial accounts错误 你是否在使用Cursor编辑器时突然遇到Too人工智能语音音频深度学习NLP为什么 BunRouter 比 httprouter 更快深入解析 Go 路由器的性能优化为什么 BunRouter 比 httprouter 更快深入解析 Go 路由器的性能优化 在Go语言Web开发领域路由器的性能直接影响着应用程序的响应速度人工智能语音音频深度学习NLPESPnet ASR2 模板深度解析基于自监督离散单元的端到端语音识别Discrete Units ASRESPnet ASR2 模板深度解析基于自监督离散单元的端到端语音识别Discrete Units ASR 本篇技术指南系统讲解 ESPnet2 中 AS人工智能语音音频深度学习NLP上一篇如何快速上手openEuler安全基线工具从安装到加固的完整指南下一篇go2rtc Bubble 私有流协议解析从 dvr163 / eseecloud 摄像头接入到帧级协议实现创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑