PaddleSpeech 节奏版 FastSpeech2(tts3_rhy):基于 CSMSC 的韵律感知端到端 TTS 训练与合成实战指南

发布时间:2026/9/25 17:17:08
PaddleSpeech 节奏版 FastSpeech2(tts3_rhy):基于 CSMSC 的韵律感知端到端 TTS 训练与合成实战指南 人工智能语音音频【免费下载链接】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点击查看免费下载本文以 PaddleSpeech 仓库中 examples/csmsc/tts3_rhy 为例系统讲解如何训练一个带韵律rhythm信息的 FastSpeech2 语音合成模型从 CSMSC 数据集的准备、MFA 韵律时长对齐结果的获取到数据预处理、模型训练、多声码器合成与端到端静态图推理的完整流程。读完本文你将掌握 PaddleSpeech 中节奏版 TTS的完整落地路径理解sp1~sp4韵律标签如何在音素序列中发挥作用并能独立修改配置、选择声码器完成合成实验。示例概览什么是节奏版 FastSpeech2常规的 FastSpeech2 以音素序列 时长 基频 能量为条件生成梅尔谱但音素本身不携带韵律停顿信息。tts3_rhy 在 FastSpeech2 基础上引入韵律标记rhythm tags用sp1/sp2/sp3/sp4等特殊音素表示不同层级的停顿/节奏边界使合成语音的断句与节奏更接近真人朗读。该示例位于 examples/csmsc/tts3_rhy目录中包含conf/default.yaml训练与特征提取配置local/preprocess.sh数据预处理脚本local/train.sh模型训练脚本local/synthesize.sh基于metadata.jsonl的波形合成脚本local/synthesize_e2e.sh端到端文本 → 波形合成脚本run.sh一键执行入口path.sh环境变量初始化它与基础版 examples/csmsc/tts3/README.mdFastSpeech2 with CSMSC共享绝大多数流程核心差异在于训练数据中多出一份带韵律标签的时长文件durations.txt且端到端合成时启用韵律前端。从源码结构看韵律能力由 paddlespeech/t2s/frontend/rhy_prediction/rhy_predictor.py 中的RhyPredictor与 paddlespeech/t2s/frontend/zh_frontend.py 的use_rhy开关支撑后文详述。数据集准备CSMSC 与 MFA 韵律对齐结果1. 下载并解压 CSMSC从 CSMSCChinese Standard Mandarin Speech Corpus中文标准普通话语音库官方渠道下载数据集解压到~/datasets目录得到数据目录~/datasets/BZNSYP。后续所有脚本均以此路径为数据集根目录。2. 获取 MFA 对齐结果含韵律时长FastSpeech2 训练需要每个音素的**时长duration**标注本示例通过蒙特利尔强制对齐工具 MFAMontreal Forced Aligner从文本与音频的强制对齐结果中导出。有两种途径途径一直接下载韵律版对齐结果下载仓库发布的baker_alignment_tone.zip韵律版 MFA 对齐结果解压后得到目录./baker_alignment_tone。README 中约定该目录即为后续预处理脚本的输入。途径二参照 mfa 示例自行训练参考 examples/other/mfa/README.md 训练自己的 MFA 模型。需要注意在run.sh的前两条命令中加上--rhy-with-duration标志才能获得含韵律信息的时长结果。该标志的实现位于 examples/other/mfa/local/generate_lexicon.py 与 examples/other/mfa/local/reorganize_baker.py后者在rhy_durTrue时读取ProsodyLabeling/000001-010000_rhy.txt韵律标注文件并通过insert_rhy/normalize_rhy把韵律边界以sp前缀音素的形式插入文本。目前--rhy-with-duration仅支持 CSMSC 数据集在 MFA 的韵律标签中#被替换为sp即sp1~sp4等节奏音素以便与 MFA 音素集对齐。一键运行 run.sh 与阶段控制假设数据集路径为~/datasets/BZNSYPMFA 结果为./baker_alignment_tone运行./run.shrun.shexamples/csmsc/tts3_rhy/run.sh会依次执行source path通过source path.sh初始化环境预处理数据集生成dump目录训练模型产出exp/default/checkpoints/下的 ckpt合成 wav既可从metadata.jsonl合成也可从文本文件端到端合成静态图模型推理通过synthesize_e2e.sh导出并使用静态图模型。run.sh 中的默认参数与 4 个 stage 的对应关系变量/Stage默认值作用gpus0,1训练/合成使用的 GPU 编号stage/stop_stage0/100阶段范围控制conf_pathconf/default.yaml配置文件train_output_pathexp/default实验输出目录ckpt_namesnapshot_iter_153.pdz合成使用的模型参数文件stage 0—./local/preprocess.sh ${conf_path}预处理stage 1—./local/train.sh ${conf_path} ${train_output_path}训练stage 2—./local/synthesize.sh合成声码器默认 pwgan编号 0stage 3—./local/synthesize_e2e.sh端到端合成编号 0/1/3/4如需只运行某一阶段可显式指定范围例如只做预处理./run.sh --stage 0 --stop-stage 0也可以直接传入参数如./run.sh 0 0但脚本注释明确说明参数方式与--stage/--stop-stage方式不可混用。参数解析由 utils/parse_options.sh 完成。path.sh 环境初始化path.sh 通过realpath ${PWD}/../../../定位仓库根目录MAIN_ROOT并将其与MAIN_ROOT/utils加入PATH同时设置PYTHONPATH指向仓库根目录避免LC_ALLC环境下 Python 的 Unicode 解码问题通过PYTHONIOENCODINGUTF-8缓解。脚本关键变量MAIN_ROOT仓库根目录BIN_DIR${MAIN_ROOT}/paddlespeech/t2s/exps/fastspeech2FastSpeech2 相关 Python 入口所在目录。数据预处理全流程拆解预处理入口为 local/preprocess.sh内部包含 4 个子阶段输入./baker_alignment_tone与~/datasets/BZNSYP/输出dump目录。子阶段 0从 MFA 结果生成时长文件python3 ${MAIN_ROOT}/utils/gen_duration_from_textgrid.py \ --inputdir./baker_alignment_tone \ --outputdurations.txt \ --config${config_path}读取 MFA 的 TextGrid 对齐结果逐句计算每个音素含sp1~sp4韵律音素的持续时长汇总为durations.txt供后续特征提取时写入metadata.jsonl。子阶段 1特征提取python3 ${BIN_DIR}/preprocess.py \ --datasetbaker \ --rootdir~/datasets/BZNSYP/ \ --dumpdirdump \ --dur-filedurations.txt \ --config${config_path} \ --num-cpu20 \ --cut-silTrue按配置文件提取每句的梅尔谱speech、基频pitch与能量energy特征并依据durations.txt写入音素时长--cut-silTrue表示裁剪句首尾静音段。数据被划分为train、dev、test三部分。子阶段 2计算归一化统计量python3 ${MAIN_ROOT}/utils/compute_statistics.py \ --metadatadump/train/raw/metadata.jsonl \ --field-namespeech # 同理对 pitch、energy 各执行一次仅基于训练集dump/train/raw/metadata.jsonl计算 speech、pitch、energy 三个特征的均值与方差分别保存为dump/train/speech_stats.npy、pitch_stats.npy、energy_stats.npy。dev、test后续统一复用训练集的统计量避免信息泄漏。子阶段 3归一化与 id 映射python3 ${BIN_DIR}/normalize.py \ --metadatadump/train/raw/metadata.jsonl \ --dumpdirdump/train/norm \ --speech-statsdump/train/speech_stats.npy \ --pitch-statsdump/train/pitch_stats.npy \ --energy-statsdump/train/energy_stats.npy \ --phones-dictdump/phone_id_map.txt \ --speaker-dictdump/speaker_id_map.txt # dev、test 同理但 stats 一律使用 train 的统计量将特征归一化并把音素/说话人映射为离散 id生成dump/phone_id_map.txt与dump/speaker_id_map.txt。dump 目录结构与 metadata.jsonl预处理完成后得到如下目录结构dump ├── dev │ ├── norm │ └── raw ├── phone_id_map.txt ├── speaker_id_map.txt ├── test │ ├── norm │ └── raw └── train ├── energy_stats.npy ├── norm ├── pitch_stats.npy ├── raw └── speech_stats.npy每个子集train/dev/test下都有raw原始特征与norm归一化特征两个子目录raw中存放每句的 speech、pitch、energy 特征文件norm中存放对应的归一化版本。每个子目录中还包含一个metadata.jsonl是一张表状的逐行 JSON 文件每行对应一条 utterance包含字段phones音素序列、text_lengths、speech_lengths、durations、speech 特征路径、pitch 特征路径、energy 特征路径、speaker、utterance id。在节奏版中phones序列里会出现sp1~sp4等韵律音素其时长也一并记录在durations中——这正是模型学到节奏的关键输入。训练/验证时批处理函数会从该文件读取并组装 batch相关实现可参考 paddlespeech/t2s/datasets/am_batch_fn.py其中tones字段的处理对应带声调/韵律标注的数据。核心配置 default.yaml 深度解读conf/default.yaml 是本实验唯一的配置入口同时作用于特征提取、模型结构与训练过程。以下逐段说明。特征提取设置FEATURE EXTRACTION SETTING参数默认值说明fs24000采样率Hzn_fft2048FFT 点数n_shift300帧移采样点约 12.5mswin_length1200窗长采样点约 50ms若为 null 则等同n_fftwindowhann窗函数类型fmin/fmax80/7600Mel 滤波器组最低/最高频率Hzn_mels80Mel 频带数f0min/f0max80/400基频提取的下/上限Hz仅对使用 pitch 特征的模型如 FastSpeech2生效注意n_shift300、win_length1200与fs24000的配合帧移 12.5ms、窗长 50ms是常见的中文 TTS 前端参数组合。模型设置MODEL SETTINGTransformer 骨架adim: 384注意力维度、aheads: 2注意力头数、elayers: 4/dlayers: 4编码器/解码器层数、eunits: 1536/dunits: 1536FFN 隐层单元数位置前馈层类型conv1d、卷积核3。时长预测器duration predictorduration_predictor_layers: 2、duration_predictor_chans: 256、duration_predictor_kernel_size: 3。后处理网络postnetpostnet_layers: 5、postnet_filts: 5、postnet_chans: 256。位置编码use_scaled_pos_enc: True编码器/解码器均normalize_before: Truereduction_factor: 1初始化方式xavier_uniform编码/解码缩放位置编码初始 alpha 均为1.0。Transformer dropout编码器与解码器的 layer / positional / attention dropout 均为0.2。基频预测器pitch predictorpitch_predictor_layers: 5、pitch_predictor_chans: 256、pitch_predictor_kernel_size: 5、pitch_predictor_dropout: 0.5pitch 嵌入卷积核1、dropout0.0且stop_gradient_from_pitch_predictor: Truepitch 预测器到编码器的梯度默认截断。能量预测器energy predictorenergy_predictor_layers: 2、energy_predictor_chans: 256、energy_predictor_kernel_size: 3、energy_predictor_dropout: 0.5energy 嵌入卷积核1、dropout0.0stop_gradient_from_energy_predictor: False。更新器 / 优化器 / 训练设置updater.use_masking: True损失计算时对 padding 部分做掩码避免无意义位置的梯度optimizer.optim: adam、optimizer.learning_rate: 0.001max_epoch: 1000、num_snapshots: 5最多 1000 个 epoch最多保留 5 个快照seed: 10086随机种子。模型训练训练入口为 local/train.shpython3 ${BIN_DIR}/train.py \ --train-metadatadump/train/norm/metadata.jsonl \ --dev-metadatadump/dev/norm/metadata.jsonl \ --config${config_path} \ --output-dir${train_output_path} \ --ngpu1 \ --phones-dictdump/phone_id_map.txt参数含义与基础版 examples/csmsc/tts3/README.md 中train.py的 help 输出一致--configYAML 格式配置文件覆盖默认配置--train-metadata/--dev-metadata必须使用dump目录下train、dev的norm子目录中的metadata.jsonl--output-dir实验输出目录checkpoint 保存在其下的checkpoints/中--ngpuGPU 数量0表示使用 CPU--phones-dict音素词表文件dump/phone_id_map.txt。默认实验输出目录为exp/default配合run.sh中的gpus0,1即可多卡训练训练过程中的 ckpt 统一存放在exp/default/checkpoints/下。波形合成两种方式与声码器选择方式一基于 metadata.jsonl 合成local/synthesize.sh 调用${BIN_DIR}/../synthesize.py即 paddlespeech/t2s/exps/synthesize.py读取dump/test/norm/metadata.jsonl逐句合成波形CUDA_VISIBLE_DEVICES${gpus} ./local/synthesize.sh ${conf_path} ${train_output_path} ${ckpt_name} 0最后一个数字参数控制声码器0~4分别对应{pwgan, multi band melgan, style melgan, hifigan, wavernn}。核心调用参数以 pwgan 为例python3 ${BIN_DIR}/../synthesize.py \ --amfastspeech2_csmsc \ --am_config${config_path} \ --am_ckpt${train_output_path}/checkpoints/${ckpt_name} \ --am_statdump/train/speech_stats.npy \ --vocpwgan_csmsc \ --voc_configpwg_baker_ckpt_0.4/pwg_default.yaml \ --voc_ckptpwg_baker_ckpt_0.4/pwg_snapshot_iter_400000.pdz \ --voc_statpwg_baker_ckpt_0.4/pwg_stats.npy \ --test_metadatadump/test/norm/metadata.jsonl \ --output_dir${train_output_path}/test \ --phones_dictdump/phone_id_map.txt其中--am_ckpt指向训练产出的 FastSpeech2 参数默认snapshot_iter_153.pdz--am_stat为梅尔谱归一化统计量声码器相关路径需预先下载对应预训练模型并解压如pwg_baker_ckpt_0.4目录。方式二端到端文本 → 波形合成与静态图推理local/synthesize_e2e.sh 调用${BIN_DIR}/../synthesize_e2e.pypaddlespeech/t2s/exps/synthesize_e2e.py从纯文本直接合成语音这是节奏版与基础版最大的不同点python3 ${BIN_DIR}/../synthesize_e2e.py \ --amfastspeech2_csmsc \ --am_config${config_path} \ --am_ckpt${train_output_path}/checkpoints/${ckpt_name} \ --am_statdump/train/speech_stats.npy \ --vocpwgan_csmsc \ --voc_configpwg_baker_ckpt_0.4/pwg_default.yaml \ --voc_ckptpwg_baker_ckpt_0.4/pwg_snapshot_iter_400000.pdz \ --voc_statpwg_baker_ckpt_0.4/pwg_stats.npy \ --langzh \ --text${BIN_DIR}/../../assets/sentences.txt \ --output_dir${train_output_path}/test_e2e \ --phones_dictdump/phone_id_map.txt \ --inference_dir${train_output_path}/inference \ --use_rhyTrue关键参数--langzh中文文本前端--text待合成的文本文件默认使用仓库内置的sentences.txt测试句集--inference_dir导出静态图inference 模型的目录--use_rhyTrue开启韵律前端使文本先经过韵律预测再转音素序列这是节奏版合成的开关。韵律前端的工作原理从源码可以确认--use_rhy参数在 paddlespeech/t2s/exps/synthesize_e2e.py 中定义为run rhythm frontend or not。开启后中文前端 paddlespeech/t2s/frontend/zh_frontend.py 会实例化RhyPredictoruse_rhyTrue时创建见 zh_frontend.py 中self.rhy_predictor RhyPredictor()对每个文本片段调用get_prediction预测韵律边界通过pinyin_align把预测出的韵律标签如sp1对齐回拼音序列生成sp1~sp4韵律音素zh_frontend.py 中self.rhy_phns [sp1, sp2, sp3, sp4]。韵律预测器实现在 paddlespeech/t2s/frontend/rhy_prediction/rhy_predictor.py加载rhy_e2e预训练模型与其配置文件rhy_default.yaml、词表rhy_token构建rhy_dict将韵律类别映射为sp str(i 1)形式make_rhy_dict与pinyin_align共同完成预测结果 → 音素序列的插入。也就是说训练阶段通过 MFA 韵律标签学习节奏推理阶段则用独立的韵律预测模型在纯文本上生成同样的标签两端闭合。声码器切换说明run.shstage 2 注释明确合成时可传0~4选择{pwgan, multi band melgan, style melgan, hifigan, wavernn}而 stage 3 端到端合成只支持0/1/3/4style melgan 的动静转换在脚本注释中标注为尚未就绪且其端到端分支未启用--inference_dir。各声码器预训练模型路径如mb_melgan_csmsc_ckpt_0.1.1、hifigan_csmsc_ckpt_0.1.1、wavernn_csmsc_ckpt_0.2.0均已在 synthesize.sh 与 synthesize_e2e.sh 中预置按需下载解压即可替换。预训练模型与文件清单仓库为节奏版端到端 FastSpeech2 提供了预训练 checkpointfastspeech2_rhy_csmsc_ckpt_1.3.0.zip。解压后的目录结构如下fastspeech2_rhy_csmsc_ckpt_1.3.0 ├── default.yaml # 训练 fastspeech2 使用的默认配置 ├── phone_id_map.txt # 训练时的音素词表 ├── snapshot_iter_153000.pdz # 模型参数与优化器状态 ├── durations.txt # preprocess.sh 的中间产物时长文件 ├── energy_stats.npy ├── pitch_stats.npy └── speech_stats.npy # 训练时用于归一化梅尔谱的统计量可以看出该包既包含可直接用于合成的模型与词表也保留了durations.txt与三项统计量方便使用者复现预处理或继续微调。与基础版 tts3 的差异小结环节基础版 tts3节奏版 tts3_rhy时长来源普通 MFA 对齐结果带韵律标签的 MFA 结果baker_alignment_tone.zip音素中含sp1~sp4MFA 训练常规命令需加--rhy-with-durationmfa 示例端到端合成普通文本前端--use_rhyTrue经RhyPredictor预测韵律后再转音素预训练模型fastspeech2_csmsc_ckpt系列fastspeech2_rhy_csmsc_ckpt_1.3.0如需更细粒度地自定义前端、批量数据格式或训练细节可继续阅读 examples/other/mfa/README.md、paddlespeech/t2s/frontend/zh_frontend.py 以及 paddlespeech/t2s/datasets/preprocess_utils.py其中get_phones_tones展示了从训练数据收集音素/声调集合并生成 id 映射的过程。按本文流程完成 stage 0~3 后即可在exp/default/test与exp/default/test_e2e中分别拿到按标注合成与文本端到端合成的波形结果并通过--inference_dir得到可部署的静态图模型。赞分享人工智能语音音频【免费下载链接】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点击查看免费下载相关推荐PaddleSpeech节奏信息增强版 FastSpeech2tts3_rhyCSMSC 训练与推理实战指南PaddleSpeech节奏信息增强版 FastSpeech2tts3_rhyCSMSC 训练与推理实战指南 本文围绕 PaddleSpeech 中 ex人工智能语音音频NLP媒体生成PaddleSpeech 中文韵律预测实战基于 ERNIE 与 CSMSC/AISHELL-3 的韵律标注、训练与 TTS 前端集成PaddleSpeech 中文韵律预测实战基于 ERNIE 与 CSMSC/AISHELL 3 的韵律标注、训练与 TTS 前端集成 本文围绕 PaddleS人工智能语音音频NLP媒体生成PaddleSpeech 实战基于 CSMSC 语料训练与部署 VITS 端到端语音合成模型PaddleSpeech 实战基于 CSMSC 语料训练与部署 VITS 端到端语音合成模型 本篇技术指南以 examples/csmsc/vits http人工智能语音音频上一篇Cilium cilium-dbg map 命令完全指南访问与排查 BPF Map 的用户空间缓存与事件流下一篇CopilotKit 双向共享状态实战UI 与 Agent 读写同一份 state 的完整实现Shared State Read Write创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询