ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

PaddleSpeech 英中语音翻译(ST)实战指南:TED En-Zh ST1 的数据、Transformer+ASR 多任务训练与 Char-BLEU 评测

2026/9/25 2:21:15 拓冰建站 浏览量
PaddleSpeech 英中语音翻译(ST)实战指南:TED En-Zh ST1 的数据、Transformer+ASR 多任务训练与 Char-BLEU 评测 人工智能语音音频【免费下载链接】PaddleSpeechEasy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword Spotting. Won NAACL2022 Best Demo Award.项目地址https://gitcode.com/gh_mirrors/pa/PaddleSpeech点击查看免费下载TED En-ZhTED 英中语音翻译任务是 PaddleSpeech 中端到端语音翻译Speech Translation, ST的核心示例之一其 st1 方案在 examples/ted_en_zh/st1 目录下提供了完整可复现的脚本与配置。本文以该目录的 RESULTS.md 为主线结合 run.sh、配置文件与 u2_st 模型源码系统讲解 TED En-Zh 数据集的规模分布、FAT TransformerASR 多任务MTL训练流程、基于 Kaldi 的特征管线、解码参数含 word reward以及 Char-BLEU 评测结论帮助你完整跑通一条英中语音翻译实验并理解其结果差异背后的机制。一、任务背景st0 与 st1 的定位差异在 examples/ted_en_zh 下PaddleSpeech 为 TED 英中语音翻译提供了两条实验路径st0conformer/transformer 语音翻译特征直接由 PaddleSpeech 计算st1Transformer/Conformer 语音翻译使用 Kaldi 特征。根据 st1 的 README 说明The main difference between st0 and st1 is that st1 uses kaldi feature并且使用本示例需要先安装 Kaldi。st1 的 path.sh 中KALDI_ROOT${MAIN_ROOT}/tools/kaldi即为该依赖的挂载点特征生成、CMVN 统计、dump 等环节均调用 Kaldi 工具链如compute-cmvn-stats、steps/make_fbank_pitch.sh等。二、TED En-Zh 数据集概览RESULTS.md 核心数据RESULTS.md 首先给出了经过处理后的三个数据子集在时长上的分布注意这里的时长单位为帧Frames特征帧率由stride_ms: 10.0决定即约 100 帧/秒Data SubsetDuration in Framesdata/manifest.train94.2 ~ 6000data/manifest.dev115.1 ~ 3900data/manifest.test110 ~ 4274.6对照 st0 的 RESULTS.md以秒计train 0.942~60s、dev 1.151~39s、test 1.1~42.746s可以确认 train/dev/test 三份 manifest 与conf/transformer_mtl_noam.yaml中的train_manifest: data/manifest.train、dev_manifest: data/manifest.dev、test_manifest: data/manifest.test一一对应。数据规模上既有不足 1 秒的短句也有长达 60 秒左右的长音频这要求 dataloader 具备长度感知能力详见下文maxlen_in/maxlen_out。2.1 数据来源与目录结构该数据集需自行下载。按 local/data.sh 中的提示解压后的目录应包含. |-- En-Zh |-- test-segment | |-- tst2010 | |-- ... |-- train-split | |-- train-segment |-- README.mdlocal/ted_en_zh.py 在 stage -1 阶段负责把原始数据整理为 train/dev/test 三份音频来自train-split/train-segmenttrain与test-segment/tst2014、test-segment/tst2015dev/test双语文本来自En-Zh/train.en-zh、En-Zh/tst2014.en-zh、En-Zh/tst2015.en-zh。这意味着 st1 的 dev/test 划分基于tst2014 / tst2015两个公开评测集。三、整体工作流run.sh 的四个阶段run.sh 是 st1 的入口脚本通过--stage/--stop_stage控制执行区间阶段划分如下与 README 一致Stage功能0数据处理计算训练集 CMVN、生成词表、生成 train/dev/test 的 manifest 文件1训练模型支持从预训练模型微调2对 top-k 个模型参数取平均得到最终模型k1 表示直接选最优单模型3评测最终模型性能常用调用方式# 只处理数据 bash run.sh --stage 0 --stop_stage 0 # 数据 训练 bash run.sh --stage 0 --stop_stage 1 # 数据 训练 平均 评测完整流水线 bash run.sh --stage 0 --stop_stage 3 # 指定 GPU 与平均个数 bash run.sh --gpus 0,1 --avg_num 53.1 环境变量与本地变量运行任何脚本前需要先加载环境path.sh、cmd.sh与参数解析工具. ./path.sh . ./cmd.sh source ${MAIN_ROOT}/utils/parse_options.shparse_options.sh位于 utils/parse_options.sh让所有 shell 脚本支持--variable value的传参方式。run.sh中定义的本地变量及其含义gpus使用的 GPU 编号置空gpus则仅使用 CPUstage/stop_stage实验起始/结束阶段conf_path模型配置路径默认conf/transformer_mtl_noam.yamldecode_conf_path解码配置路径默认conf/tuning/decode.yamldata_path解压后的数据集路径默认./TED_EnZhavg_numtop-k 平均的 k 值默认 5ckpt_path微调用的预训练权重前缀如paddle.98对应 FAT-ST 预训练模型留空表示从零训练ckpt由conf_path文件名自动推导出的 checkpoint 前缀如transformer_mtl_noam。四、Stage 0Kaldi 特征管线与 manifest 生成Stage 0 实际由 local/data.sh 完成其内部又细分为多个子阶段整条管线可以概括为文本清洗 → fbankpitch 特征提取 → 速度扰动数据增强 → 语种分离 → 长短过滤 → CMVN 统计 → 特征 dump → BPE 词表 → JSON/manifest 格式化几个关键环节文本处理对英文侧先做标点移除local/remove_punctuation.pl中文侧直接拷贝随后用paste拼合 utterance id 与文本并做重复行过滤与fix_data_dir.sh修复。特征提取默认提取80 维 fbank pitch对应配置中feat_dim: 83即 80 维 fbank 加 pitch 相关维度stride_ms: 10.0、window_ms: 25.0。训练集额外做0.9 / 1.0 / 1.1 三档速度扰动speed perturbation扩增得到train_sp集合。语种分离与过滤通过 local/divide_lang.sh 将 en/zh 文本按语种拆分remove_longshortdata.sh --maxframes 3000 --maxchars 400剔除超过 3000 帧或超过 400 字符的样本再对 en/zh 两个集合取交集保证对齐。CMVN 与 dump用 Kaldi 的compute-cmvn-stats基于train_sp.en-zh.zh计算全局 CMVN随后对 train/dev/test 分别执行dump.sh落盘特征。BPE 词表训练一个8000 词bpe, unigram 风格的英中联合词表产出data/lang_char/ted_en_zh_bpe8000.txt与ted_en_zh_bpe8000.model对应配置vocab_filepath、spm_model_prefix、unit_type: spm。词表第一项强制为unk 10 保留给 CTC 的 blank。manifest 生成先用data2json.sh生成 ESPnet 格式 JSON训练集额外用update_json.sh加入英文源文本作为参考再经 utils/espnet_json_to_manifest.py 转为 PaddleSpeech 的 manifest即 RESULTS.md 中列出的data/manifest.{train,dev,test}。五、模型配置详解Transformer ASR 多任务MTLst1 的核心配置是 conf/transformer_mtl_noam.yaml这也是 RESULTS.md 中所有实验使用的配置文件。5.1 数据与 Dataloader 段配置项取值含义batch_size20批大小feat_dim83输入特征维度80 维 fbank pitchstride_ms/window_ms10.0 / 25.0帧移 / 窗长sortagrad0是否按长度排序进 batch-1 全部 epoch 启用0 禁用maxlen_in512输入超过 512 时自动缩小 batchmaxlen_out150输出超过 150 时自动缩小 batchnum_workers0数据加载进程数maxlen_in/maxlen_out正是为应对 TED 数据中帧数跨度 94~6000的长短差异而设计的动态 batch 策略。5.2 网络结构段编码器encoder: transformeroutput_size: 256注意力维度、attention_heads: 4、linear_units: 2048FFN 隐层、num_blocks: 12编码器层数、dropout_rate: 0.1、input_layer: conv2d卷积下采样输入层也可选 conv2d6/conv2d8、normalize_before: true。解码器decoder: transformerattention_heads: 4、linear_units: 2048、num_blocks: 6解码器层数并单独控制self_attention_dropout_rate与src_attention_dropout_rate。5.3 多任务学习MTL段——st1 的关键差异model_conf: asr_weight: 0.5 ctc_weight: 0.3 lsm_weight: 0.1 # label smoothing option length_normalized_loss: false这套配置实现了ST 主任务 ASR 辅助任务的联合训练asr_weight: 0.5总损失中 ASR 分支的权重总损失 asr_weight * loss_asr (1 - asr_weight) * loss_stctc_weight: 0.3ASR 分支内部 CTC 与注意力损失的配比loss_asr ctc_weight * loss_asr_ctc (1 - ctc_weight) * loss_asr_attlsm_weight: 0.1标签平滑系数作用于 LabelSmoothingLoss。该机制在源码 paddlespeech/s2t/models/u2_st/u2_st.py#L49-L149 中有完整实现当asr_weight 0时模型前向会同时计算 ST 解码器分支的翻译损失、ASR 注意力解码器分支的损失以及 CTC 分支的损失最后按上述权重融合。而在 conf/transformer.yaml 中asr_weight: 0.0、ctc_weight: 0.0即纯 ST 训练——两套配置并列存放便于做消融对比。5.4 训练策略段配置项取值含义n_epoch40训练轮数accum_grad2梯度累积步数global_grad_clip5.0全局梯度裁剪optimadam优化器optim_conf.lr2.5初始学习率schedulernoamNoam 学习率调度scheduler_conf.warmup_steps25000预热步数checkpoint.kbest_n/latest_n50 / 5保存最优/最近 checkpoint 数量5.5 SpecAugment 数据增强conf/preprocess.yaml 提供了可选的前端增强即 SpecAugment包含time_warpmax_time_warp: 5、freq_maskF: 30, n_mask: 2、time_maskT: 40, n_mask: 2三个环节。默认在transformer_mtl_noam.yaml中被注释# preprocess_config: conf/augmentation.json可按需开启。六、Stage 1训练与 FAT-ST 预训练微调训练脚本 local/train.sh 的用法# 多卡训练 CUDA_VISIBLE_DEVICES0,1,2,3 ./local/train.sh conf/transformer_mtl_noam.yaml transformer_mtl_noam # 纯 CPU 训练 CUDA_VISIBLE_DEVICES ./local/train.sh conf/transformer_mtl_noam.yaml transformer_mtl_noam 其内部根据CUDA_VISIBLE_DEVICES中 GPU 数量决定单机单卡执行train.py还是调用paddle.distributed.launch做分布式训练可附加--ips多机参数。训练产物checkpoint统一存放在exp/${ckpt}下。从预训练模型微调是本示例的重要能力在run.sh中设置ckpt_path后Stage 1 会先执行 local/download_pretrain.sh下载FAT-ST 预训练权重snapshot.ep.98PyTorch 格式再经 local/convert_torch_to_paddle.py 转换为 Paddle 权重paddle.98.pdparams随后以--checkpoint_path paddle.98.pdparams启动微调。这解释了 RESULTS.md 中模型名以 FATFast Audio Transformer 类预训练前端开头的由来——它是预训练 FAT 前端 Transformer 编解码器 ASR 多任务的组合方案。七、Stage 2Top-k 模型平均训练结束后每个 epoch 都会保存 checkpoint。Stage 2 使用 utils/avg.sh 对验证集上最优的 k 个模型参数取平均avg.sh best exp/transformer_mtl_noam/checkpoints 5avg_num1时等价于直接选择最佳单模型avg.sh的两种模式分别对应best按验证损失挑最优与latest按最近时间挑平均结果输出为exp/${ckpt}/checkpoints/avg_${avg_num}。八、Stage 3解码与 Char-BLEU 评测评测脚本 local/test.sh 接收三个参数模型配置、解码配置、checkpoint 前缀CUDA_VISIBLE_DEVICES0 ./local/test.sh conf/transformer_mtl_noam.yaml conf/tuning/decode.yaml exp/transformer_mtl_noam/checkpoints/avg_5它会以fullsentence方式调用 test.py 解码并把假设hyp写入${ckpt_prefix}.fullsentence.rsl。评测指标为Char-BLEU按字符计算的 BLEU由bleu_func逐句及整体计算见 paddlespeech/s2t/exps/u2_st/model.py#L393-L409。8.1 解码配置与 word reward 机制conf/tuning/decode.yaml 是评测核心batch_size: 1 error_rate_type: char-bleu decoding_method: fullsentence # fullsentence, simultaneous beam_size: 10 word_reward: 0.7 maxlenratio: 0.3 decoding_chunk_size: -1 # 0 全句解码0 固定 chunk0 仅训练用 num_decoding_left_chunks: -1 simulate_streaming: False其中word_reward: 0.7正是 RESULTS.md 区分两组实验的关键开关。其原理在 u2_st.py 的 translate 方法 中有清晰实现束搜索中一旦某条假设遇到eos结束其得分会加上长度奖励hyp[score] (i - 1) * word_reward同时未结束的假设只有在hyp[score] maxlen * word_reward cur_best_score时才继续保留否则提前终止搜索。可见 word reward 本质上是一个基于生成长度的解码期奖励用于缓解注意力解码器过早结束、翻译不完整的倾向maxlenratio: 0.3则约束最大解码长度约为编码器输出长度的 0.3 倍不低于 5。该参数同时被 paddlespeech/cli/st/infer.py#L274 引用说明同一套机制也服务于 CLI 推理。九、实验结果解读RESULTS.md 核心结论RESULTS.md 给出了两组 Transformer 模型的评测结果ModelParamsConfigVal lossChar-BLEUFAT TransformerASR MTL50.26Mconf/transformer_mtl_noam.yaml69.9120.26FAT TransformerASR MTL with word reward50.26Mconf/transformer_mtl_noam.yaml62.8620.80要点解读参数规模两组模型均为50.26M配置完全相同conf/transformer_mtl_noam.yaml差异只在于解码阶段是否启用word_reward: 0.7Val loss 差异带 word reward 的解码会把更长、更完整的假设计入验证统计使验证损失从 69.91 降至 62.86该差异属于解码期长度奖励带来的统计口径变化Char-BLEU 提升启用 word reward 后 Char-BLEU 从20.26 提升至 20.800.54说明长度奖励有效缓解了过早终止问题改善了译文完整度。需要说明的是st1 的 README.md 中发布了同一批实验的更新数字MTL 基线 Val loss 62.86 / Char-BLEU 19.45带 word reward 版本 Val loss 62.86 / Char-BLEU 20.80两者结论一致word reward 带来稳定的 Char-BLEU 增益。对比 st0RESULTS.md的纯 TransformerASR MTL 基线Char-BLEU 17.38st1 借助 Kaldi 特征与 FAT 预训练前端获得了显著更高的翻译质量。十、实践要点小结前置依赖运行 st1 前需先安装 Kaldipath.sh 中KALDI_ROOT指向tools/kaldi数据集需自行下载并解压到./TED_EnZh目录结构须与data.sh校验一致完整复现bash run.sh --stage 0 --stop_stage 3 --gpus 0,1,2,3 --avg_num 5即可走完数据 → 训练 → 平均 → 评测全流程快速微调设置ckpt_pathpaddle.98可从 FAT-ST 预训练权重微调显著降低训练成本质量调优入口asr_weight/ctc_weight控制 ASR 辅助任务强度word_reward控制解码长度偏好beam_size控制搜索宽度均在配置文件层面即可调指标口径st1 以帧frame为单位统计时长分布评测指标为 Char-BLEU结果文件为exp/${ckpt}/checkpoints/avg_${avg_num}.fullsentence.rsl。通过 RESULTS.md 与上述脚本、配置和源码的对照你可以把FAT TransformerASR MTL word reward这套英中语音翻译方案完整复现出来并在此基础上进一步实验 Conformer 编码器、SpecAugment、解码束宽与奖励系数等超参探索更优的英中端到端翻译效果。赞分享人工智能语音音频【免费下载链接】PaddleSpeechEasy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword Spotting. Won NAACL2022 Best Demo Award.项目地址https://gitcode.com/gh_mirrors/pa/PaddleSpeech点击查看免费下载相关推荐CesiumJS 导出从场景截图到数据导出的保姆级教程CesiumJS 导出从场景截图到数据导出的保姆级教程 你用 CesiumJS 搭好的三维场景关浏览器就没了。这篇讲清 CesiumJS 导出的两条路场景人工智能语音音频NLP媒体生成PaddleSpeech 端到端语音翻译实战基于 Transformer 在 TED En-Zh 上复现 Char-BLEU 17.38PaddleSpeech 端到端语音翻译实战基于 Transformer 在 TED En Zh 上复现 Char BLEU 17.38 本文围绕 Paddl人工智能语音音频NLP媒体生成PaddleSpeech TED En-Zh 端到端语音翻译Transformer FAT-ST MTL 模型实战与结果解读PaddleSpeech TED En Zh 端到端语音翻译Transformer FAT ST MTL 模型实战与结果解读 本文以 examples/ted人工智能语音音频NLP媒体生成上一篇**ComMQTT开源项目安装与使用指南**下一篇Python-Apple-Support 开源项目指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考