ESPnet2 × PortMedia 法语语料:XLS-R 预训练语音编码器 + mBART-50 预训练文本编码器-解码器的 ASR/SLU 训练实战
人工智能语音音频深度学习NLP【免费下载链接】espnetEnd-to-End Speech Processing Toolkit项目地址https://gitcode.com/gh_mirrors/es/espnet点击查看免费下载本文围绕 ESPnet2 中 PortMedia 法语DOM子集的语音识别/语义理解配方 egs2/portmedia_dom/asr1/README.md 展开完整讲清该配方的数据准备、训练配置XLS-R 前端 Branchformer 编码器 Hugging Face mBART-50 后编码器/解码器、推理与 CER/CVER 评分流程并结合仓库源码定位各组件的实现位置帮助读者理解“预训练语音模型 预训练文本编码器-解码器”混合架构在 ESPnet2 中的落地方式。一、任务背景PortMedia 语料与 SLU/实体识别评测PortMedia 是法语/意大利语的语音对话radio-style dialogue语料在 ESPnet2 语料表中登记为 “PortMedia French corpus”任务类型为SLU/Entity Classifi.语义理解/实体分类语言为 FRA语料编号为 ELRA S0371见 egs2/README.md 中的语料总表意大利语版本另见 egs2/portmedia_lang/asr1。与纯 ASR 不同该配方的参考转写采用“槽位 文本”的混合格式每条语句在文本前附加由concept FILL valeur组成的语义槽位槽位之间用SEP分隔。评测也因此区分两个指标CER仅对槽位中的 concept 名称序列计算字符错误率CVERconcept value error rate对 concept valeur 的完整槽位序列计算错误率。二、数据准备从 ELRA 原始 XML 到 Kaldi 风格数据目录数据准备入口是 local/data.sh。其逻辑很简单读取 db.sh 中的ELRA_S0371变量用户需自行填入 ELRA S0371 语料的本地路径未设置则直接报错退出stage 2 执行python3 local/prepare_data.py ${ELRA_S0371} data/生成训练/开发/测试数据目录。核心脚本 local/prepare_data.pyCopyright 2022 University of Stuttgart, Pavel Denisov的行为细节如下语料遍历与划分按字典序扫描PMDOM2FR_00/PMDOM2FR/BLOCK*/*.xml下的全部标注文件并按文件顺序切分为train0–399、dev400–499、test500–699三个子集每个文件内部的所有 Turn 都保留说话人过滤从 XML 的Speakers/Speaker节点中找出名字以compère主持人开头的说话人跳过其所有 Turn——即只保留“受访者”一方的话语符合 PortMedia 任务中仅转写非主持人说话内容的设定标注清洗拼接 Turn 下所有文本节点剔除(、)、*等标注符号空转写或时长为 0 的 Turn 被丢弃另外显式跳过标注错误的音频08730_887槽位提取从 Turn 下的SemDebut节点读取concept与valeur属性concept null的忽略格式化为concept FILL valeur再与转写文本一起用SEP连接后写入text波形按需切分wav.scp不生成真实文件而是写入 sox 命令在特征提取阶段动态从整段录音中trim出该 Turn 的起止区间并重采样为 16 kHz 单声道 16-bit PCM说话人映射utt2spk中每条语句映射到自身每个 turn 视为独立说话人句柄 ID 形如file_id_turn_id最后调用utils/fix_data_dir.sh校验并补全各子集目录生成utt2dur、utt2num_frames等 Kaldi 风格索引文件。三、训练入口run.sh 与 asr.sh 的参数组合run.sh 定义了配方的默认运行方式关键参数如下train_settrain valid_setdev test_setsdev test asr_configconf/tuning/train_asr_branchformer_xlsr_mbart.yaml inference_configconf/decode_asr_hf.yaml ./asr.sh \ --lang fr \ --ngpu 1 \ --use_lm false \ --token_type hugging_face \ --hugging_face_model_name_or_path facebook/mbart-large-50-many-to-many-mmt \ --max_wav_duration 30 \ --speed_perturb_factors 0.9 1.0 1.1 \ --feats_normalize utterance_mvn \ --asr_config ${asr_config} \ --inference_config ${inference_config} \ --train_set ${train_set} \ --valid_set ${valid_set} \ --lm_train_text data/${train_set}/text \ --test_sets ${test_sets} $参数解读--lang fr法语语言标记用于 tokenization/评测流程--token_type hugging_face--hugging_face_model_name_or_path facebook/mbart-large-50-many-to-many-mmt词表直接采用 mBART-50many-to-many MMT预训练模型的 tokenizer而不是 SentencePiece 自训练词表。这与训练配置中后编码器/解码器的 checkpoint 保持一致使 ESPnet 的 ASR 管线可以直接复用 Hugging Face 生态的预训练权重--use_lm false不单独训练外部 LMmBART 解码器本身已具备强语言建模能力--max_wav_duration 30单条语句最长 30 秒配合 length-based batching 控制批大小--speed_perturb_factors 0.9 1.0 1.1语速扰动增强3 倍数据量--feats_normalize utterance_mvn逐语句均值方差归一化。四、训练配置逐段解析XLS-R 前端 Branchformer HF mBART核心训练配置是 conf/tuning/train_asr_branchformer_xlsr_mbart.yaml。整体结构为x-vector(无) → s3prl 前端(XLS-R) → 线性投影 preencoder → Branchformer 编码器 → HF mBART postencoder → HF mBART decoder自回归生成文本4.1 声学编码器Branchformer18 层输出 1024 维encoder: branchformer encoder_conf: output_size: 1024 use_attn: true attention_heads: 8 attention_layer_type: rel_selfattn pos_enc_layer_type: rel_pos rel_pos_type: latest use_cgmlp: true cgmlp_linear_units: 4096 cgmlp_conv_kernel: 31 use_linear_after_conv: false gate_activation: identity merge_method: concat num_blocks: 18 dropout_rate: 0.1 positional_dropout_rate: 0.1 attention_dropout_rate: 0.1 input_layer: conv2d stochastic_depth_rate: 0.0要点use_cgmlp: truemerge_method: concat表明启用了 Branchformer 的 ConvNeXt-GLU MLP 分支并将注意力分支与卷积分支结果拼接attention_layer_type: rel_selfattnpos_enc_layer_type: rel_pos使用相对位置注意力input_layer: conv2d是 ESPnet2 的标准卷积输入层将 80 维特征做卷积下采样。cgmlp_weight: 0.5与attn_branch_drop_rate: 0.0仅在merge_method为fixed_ave/learned_ave时生效本配置未用到。4.2 文本侧Hugging Face mBART-50 Large 后编码器与解码器postencoder: hugging_face_transformers postencoder_conf: model_name_or_path: akreal/mbart-large-50-finetuned-portmedia-dom length_adaptor_n_layers: 1 lang_token_id: 250008 decoder: hugging_face_transformers decoder_conf: model_name_or_path: akreal/mbart-large-50-finetuned-portmedia-dom这是该配方最具特色的部分声学编码器输出之后不接 ESPnet 原生 Transformer 解码器而是接一个基于 mBART-50 Large 的后编码器postencoder 编码器-解码器decoder且直接加载akreal/mbart-large-50-finetuned-portmedia-dom这个已在 PortMedia DOM 上微调过的 mBART 权重。length_adaptor_n_layers: 1用 1 层线性适配网络对齐声学特征时间长度到 mBART 期望的序列形状lang_token_id: 250008是 mBART-50 词表中法语fra语言标记的 token id用于在输入/输出端注入语言信息。ESPnet2 中这三类 Hugging Face 组件的对应实现分别位于 hugging_face_transformers_encoder.py、hugging_face_transformers_postencoder.py 和 hugging_face_transformers_decoder.py从源码结构看postencoder/decoder 均通过 Hugging Face Transformers 的建模接口加载指定 checkpoint 的权重。4.3 前端s3prl XLS-R 冻结特征提取frontend: s3prl frontend_conf: frontend_conf: upstream: xls_r_300m # Note: If the upstream is changed, please change the input_size in the preencoder. download_dir: ./hub multilayer_feature: True preencoder: linear preencoder_conf: input_size: 1024 # Note: If the upstream is changed, please change this value accordingly. output_size: 80这里 ESPnet2 的 s3prl 前端直接加载 facebook/xls-r 300M 预训练模型作为“上游”特征提取器multilayer_feature: True表示取多层特征随后用一个1024 → 80的线性 preencoder 把 XLS-R 的特征投影到与 Branchformerinput_layer: conv2d期望匹配的 80 维通道数。注释明确提醒更换 XLS-R 上游时必须同步修改 preencoder 的input_size。freeze_param: [ frontend.upstream ]freeze_param冻结整个 XLS-R 上游的参数——即 XLS-R 完全作为冻结的预训练声学特征提取器使用只有 preencoder、Branchformer 编码器及 mBART postencoder/decoder 参与训练。这种“冻结大模型前端 可训练后端”的组合是该配方的核心设计。4.4 优化、损失与模型杂项use_amp: true optim: adam batch_type: length batch_bins: 200000 optim_conf: lr: 0.00003 weight_decay: 0.000001 scheduler: warmuplr # pytorch v1.1.0 required scheduler_conf: warmup_steps: 15000 max_epoch: 100 model_conf: ctc_weight: 0.0 lsm_weight: 0.1 length_normalized_loss: false extract_feats_in_collect_stats: false # mBART dictionary customizations ignore_id: 1 sym_blank: pad sym_sos: s sym_eos: /s lang_token_id: 250008 best_model_criterion: - - valid - acc - max keep_nbest_models: 10use_amp: true混合精度训练Adam 学习率 3e-5配合warmuplr前 15000 步线性升温batch_type: lengthbatch_bins: 200000按样本长度总和打包批次约 200k 帧量级ctc_weight: 0.0完全关闭 CTC 辅助损失纯 attention 解码mBART 解码器负责语言建模无需 CTC 约束lsm_weight: 0.1加标签平滑extract_feats_in_collect_stats: false注释说明其含义——stage 10 统计归一化参数时不真正 forward 前端而是生成 dummy 统计文件因为前端是冻结的 XLS-R无需基于真实特征统计ignore_id / sym_blank / sym_sos / sym_eos将特殊符号映射到 mBART 词表的pad、s、/s使 ESPnet 的 loss/decoding 流程与 HF tokenizer 的约定对齐lang_token_id: 250008在此处再次出现需与 postencoder_conf 保持一致最优模型按验证集acc最大化选取保留 10 个最优 checkpoint。五、推理配置与评分流程推理配置 conf/decode_asr_hf.yaml 只有三项beam_size: 5 ctc_weight: 0.0 hugging_face_decoder: Truehugging_face_decoder: True表明解码时启用 mBART 自回归解码器beam size 5ctc_weight: 0.0与训练配置一致CTC/attention 混合解码权重为 0纯 attention 解码。评分由 local/score.sh 驱动对dev和test两个集合从识别结果目录中定位最新的score_wer/ref.trn与hyp.trn调用 local/score.py 生成score_slu.txt。score.py 的逻辑解析每行 tab 分隔的 ref/hyp 文本若第一字段含SEP则切分出全部槽位去掉末尾的纯转写部分concept序列取各槽位_FILL_前的名称拼接concept_value序列取concept FILL valeur完整串拼接内部空格替换为下划线以便按词计算错误率;用jiwer.wer分别对 concept 序列和 concept_value 序列计算错误率输出CER;CVER: cer; cver。这一评分脚本体现了配方的“SLU 化”定位最终关注的不只是语音识别的字符错误还有语义槽位intent/slot的准确率。六、实验环境与官方结果配方 README 记录的环境与结果如下模型权重发布在 Zenodo 记录 7374705语料来自 ELRA S0371实验环境2022-11-26 记录项目值Python3.9.15ESPnet202209PyTorch1.12.1cu116识别/槽位结果模型decode_asr_hf_asr_model即 Hugging Face 解码器推理评测集CER槽位名CVER槽位值dev17.4921.15test20.0623.49可以看出 test 集比 dev 集难约 2.6 个百分点CER 17.49 → 20.06符合 PortMedia 对话语料中测试切分难度更高的常见情况。七、小结与可迁移要点该配方展示了 ESPnet2 中一个典型的“预训练模型拼装”范式可迁移的经验包括冻结前端 可训练后端freeze_param: [frontend.upstream]让 XLS-R 300M 作为零梯度的声学特征器显著降低训练成本并稳定前端表示跨框架词表复用--token_type hugging_face使 ESPnet 的数据管线、特殊符号配置model_conf中的sym_*与 mBART tokenizer 完全对齐无需额外训练 BPE/SPM 词表语言标记注入lang_token_id在 postencoder、model_conf 两处一致配置是 mBART 类多语言模型在 ESPnet 中正确工作的关键细节纯 attention 解码CTC 权重为 0语言建模完全交给 mBART 解码器配合lsm_weight: 0.1与 3e-5 的小学习率微调预训练权重任务导向评分local/score.py的 CER/CVER 双指标设计适合一切“转写 语义槽位”联合输出的 SLU 场景。如需复现只需在 db.sh 中配置 ELRA S0371 语料路径后运行 run.sh默认单 GPU即可走通从 XML 标注解析、XLS-R/Branchformer/mBART 训练到 CER/CVER 评测的完整流程。赞分享人工智能语音音频深度学习NLP【免费下载链接】espnetEnd-to-End Speech Processing Toolkit项目地址https://gitcode.com/gh_mirrors/es/espnet点击查看免费下载相关推荐PaddleSpeech ERNIE-SAT 语音-文本联合预训练模型实现解析从 MLM 掩码编码器到跨语种语音合成与编辑PaddleSpeech ERNIE SAT 语音 文本联合预训练模型实现解析从 MLM 掩码编码器到跨语种语音合成与编辑 导读 本文以 PaddleSpee人工智能语音音频minimind-v预训练实战一步步教你训练高效的视觉编码器minimind v预训练实战一步步教你训练高效的视觉编码器 想要在1小时内从零开始训练一个26M参数的视觉多模态大模型吗minimind v项目为你人工智能大模型多模态深度学习预训练微调计算机视觉Fairseq 多语言 RoBERTa 预训练实战指南从多语语料预处理到 masked LM 训练Fairseq 多语言 RoBERTa 预训练实战指南从多语语料预处理到 masked LM 训练 多语言 RoBERTaMultilingual RoBE人工智能深度学习预训练NLP语音上一篇OneUptime 值班日历源On-Call Calendar Feeds完全指南将值班排班接入 Google、Outlook 与 Apple 日历下一篇Playwright for Java 发布说明精读从 1.7 到 1.62 的 API 演进、浏览器版本矩阵与 Java 工程实践创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考