
人工智能语音音频【免费下载链接】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/aishell3/ernie_sat示例展开系统讲解 ERNIE-SAT 语音-文本联合预训练框架在 AISHELL-3 数据集上的完整落地流程从 MFA 强制对齐结果准备、数据预处理、模型训练到基于 HiFi-GAN 声码器的波形合成以及端到端的语音合成Speech Synthesis与语音编辑Speech Editing任务实现。读完本文你可以独立跑通从run.sh各 stage 的预处理/训练/推理命令理解conf/default.yaml中关键配置的来源与含义并掌握语音编辑中“对齐—掩码—时长预测—生成”的底层推理链路。一、ERNIE-SAT 模型框架ERNIE-SAT 是一个语音-文本联合预训练框架参见论文ERNIE-SAT: Speech-Text Joint Pre-training with Speech-Text Joint Masked Language Modeling在跨语种多说话人语音合成与跨语种语音编辑任务上取得了当时领先的成果。它可以应用于语音编辑、个性化语音合成Personalized Speech Synthesis与声音克隆Voice Cloning等一系列场景。ERNIE-SAT 提出两个核心创新点跨语言个性化软音素映射在预训练过程中使用中文与英文的音素phoneme作为输入实现跨语言、个性化的软音素映射语音-文本联合掩码学习Speech-Text Joint Masked Learning通过对语音和文本同时进行掩码建模实现语音帧与音素之间的细粒度对齐。从源码结构看模型实现位于 ernie_sat.py核心是一个“编码器-解码器”结构编码器encoder_type: conformer接收语音 mel 频谱与音素序列输入层类型为sega_mlm即在掩码语言建模MLM的同时对语音做分段segment处理以支持跨说话人、跨语种的联合预训练解码器decoder_type: conformer自回归地生成目标 mel 频谱帧后处理网络PostNet由 5 层、256 通道、5 个滤波器的 CNN 堆叠用于细化频谱细节对应配置中postnet_layers/postnet_filts/postnet_chans。训练与评估循环由 ernie_sat_updater.py 中的训练 updater 与评估 updater 承担掩码概率、音素片段长度等均来自训练配置。二、数据集准备2.1 下载并解压 AISHELL-3需要 AISHELL-3 中文多说话人数据集来自其官方网站解压后目录结构应位于~/datasets/data_aishell3。2.2 获取 MFA 强制对齐结果语音-文本对齐依赖 Montreal Forced AlignerMFA官方提供了针对 AISHELL-3 的带声调对齐结果aishell3_alignment_tone.tar.gz存放于 PaddleSpeech 的 CDN 资源解压后放到示例目录下作为./aishell3_alignment_tone。如果不想直接使用现成对齐结果也可以参考仓库中的 MFA 训练示例 自行训练 MFA 模型并生成 TextGrid 对齐该示例基于 MFA 1.x。三、数据预处理stage 0假设数据集路径为~/datasets/data_aishell3MFA 对齐结果路径为./aishell3_alignment_tone预处理入口为./local/preprocess.sh ${conf_path}结合 preprocess.sh 源码该脚本内部串联了 4 个步骤生成时长标注调用 gen_duration_from_textgrid.py从 MFA 的 TextGrid 结果解析出逐音素时长输出durations.txt--inputdir./aishell3_alignment_tone提取语音特征调用 preprocess.py参数--datasetaishell3 --rootdir~/datasets/data_aishell3/ --dumpdirdump --dur-filedurations.txt --cut-silTrue按配置的 mel 参数提取每句话的 log-mel 特征并裁掉静音段统计特征均值与方差调用 compute_statistics.py对dump/train/raw/metadata.jsonl中speech字段计算统计量生成dump/train/speech_stats.npy归一化与 ID 映射调用 normalize.pytrain/dev/test 三个子集分别归一化到各自的norm目录。关键点dev 与 test 均使用训练集的统计量dump/train/speech_stats.npy避免数据泄漏同时把音素、说话人转换为 ID生成dump/phone_id_map.txt与dump/speaker_id_map.txt。预处理完成后当前目录生成dump文件夹结构如下dump ├── dev │ ├── norm │ └── raw ├── phone_id_map.txt ├── speaker_id_map.txt ├── test │ ├── norm │ └── raw └── train ├── norm ├── raw └── speech_stats.npy数据集被切分为train、dev、test三部分各自包含raw原始特征与norm归一化特征两个子目录归一化统计量保存在dump/train/speech_stats.npy。每个子目录下还有metadata.jsonl表格化文件每行记录一条样本的音素序列phones、文本长度text_lengths、语音长度speech_lengths、逐音素时长durations、语音特征路径、说话人speaker以及样本 ID。这个文件既是训练输入也是后续推理阶段“从 metadata 合成”的直接数据源。四、模型训练stage 1CUDA_VISIBLE_DEVICES${gpus} ./local/train.sh ${conf_path} ${train_output_path}train.sh 实际调用的是 train.py关键入参为--train-metadatadump/train/norm/metadata.jsonl、--dev-metadatadump/dev/norm/metadata.jsonl、--config、--output-dir、--ngpu8、--phones-dictdump/phone_id_map.txt。训练产出的各ckpt位于${train_output_path}/checkpoints/目录。4.1 关键配置解读conf/default.yaml完整配置见 default.yaml。官方备注该配置在 8 卡 A10080GB 显存上验证训练约需 3 天可按机器情况调整batch_size、num_workers以及local/train.sh中的ngpu。核心配置项特征提取设置参数取值说明fs24000采样率n_fft2048FFT 大小样本数n_shift300帧移即 12.5mswin_length1200窗长即 50mswindowhann窗函数fmin/fmax80 / 7600Mel 滤波器组频率范围n_mels80Mel 维数mean_phn_span8MLM 掩码时平均覆盖的音素片段长度mlm_prob0.8掩码语言建模概率模型结构设置编码器与解码器均为 Conformerenc_input_layer: sega_mlm分段式 MLM 输入enc_pre_speech_layer: 0两侧attention_dim384、attention_heads2、linear_units1536、num_blocks4dropout 统一 0.2位置编码使用legacy_rel_pos相对位置编码前馈层为conv1d核大小 3激活为 swish并启用 Macaron 风格 Conformermacaron_style: true。后处理网络postnet_layers5、postnet_filts5、postnet_chans256。优化器与训练设置scheduler_params.d_model384、warmup_steps4000、grad_clip1.0batch_size40、num_workers8、max_epoch1500、num_snapshots50、seed0。词表设置token_list是 AISHELL-3 音素带声调拼音加特殊符号的完整词表包括blank、unk、sos/eos以及全部音素如a1、ian4、eng2、sp等推理脚本据此把音素字符串映射为 ID映射不到词表的音素会用sp替换。五、波形合成stage 2合成交体采用 HiFi-GAN 作为神经声码器。需要先下载预训练 HiFi-GAN 模型hifigan_aishell3_ckpt_0.2.0.zipPaddleSpeech 已发布模型资源并解压unzip hifigan_aishell3_ckpt_0.2.0.zipHiFi-GAN checkpoint 包含以下文件hifigan_aishell3_ckpt_0.2.0 ├── default.yaml # 训练 HiFi-GAN 使用的默认配置 ├── feats_stats.npy # HiFi-GAN 训练时归一化频谱所用统计量 └── snapshot_iter_2500000.pdz # HiFi-GAN 生成器参数synthesize.sh 调用 synthesize.py从dump/test/norm/metadata.jsonl读取测试集样本用 ERNIE-SAT 生成 mel 频谱后经 HiFi-GAN 还原波形输出到${train_output_path}/testCUDA_VISIBLE_DEVICES${gpus} ./local/synthesize.sh ${conf_path} ${train_output_path} ${ckpt_name}其中--erniesat_stat指向dump/train/speech_stats.npy反归一化 mel 用--voc_stat指向声码器训练时的feats_stats.npy反归一化声码器输入频谱用两者不可混用。脚本还设置了FLAGS_allocator_strategynaive_best_fit与FLAGS_fraction_of_gpu_memory_to_use0.01以控制 GPU 显存占用。六、端到端语音合成与语音编辑stage 3这是 ERNIE-SAT 示例最有特色的部分./run.sh --stage 3 --stop-stage 3 --gpus 0调用 synthesize_e2e.sh脚本默认同时执行语音合成--task_namesynthesize把输入文本转换为语音与语音编辑--task_nameedit按新文本内容修改已有语音两类任务。6.1 环境准备MFA、FastSpeech2 与源音频准备对齐器下载 MFA 1.0.1 的 Linux 预编译包并解压修复lib下的 Python 动态库软链接ln -snf libpython3.6m.so.1.0 libpython3.6m.so再下载 AISHELL-3 与 VCTK 两个 MFA 对齐模型aishell3_model.zip、vctk_model.zip以及词表AISHELL-3 的simple.lexicon、英文的cmudict-0.7b统一放在tools/aligner目录下。准备预训练 FastSpeech2 模型ERNIE-SAT 在推理时借用FastSpeech2 的时长预测器duration predictor来估计新增音素的时长。需要下载并解压fastspeech2_conformer_baker_ckpt_0.5.zip中文Baker 数据集与fastspeech2_nosil_ljspeech_ckpt_0.5.zip英文LJSpeech 数据集到download/目录。准备源数据从 PaddleSpeech 已发布模型资源下载source/目录下的示例音频覆盖中英文、多说话人场景mkdir source cd source # 下载 SSB03540307.wav、SSB03540428.wavAISHELL-3 中文 # LJ050-0278.wavLJSpeech 英文 # p243_313.wav、p299_096.wavVCTK 英文 # this_was_not_the_show_for_me.wav # README.md各音频对应的文本 cd ../每段音频的原文文本记录在source/README.md中--old_str必须与之保持一致。6.2 合成与编辑命令及参数s ynthesize_e2e.sh的两段命令分别对应两个任务核心参数参数说明--task_namesynthesize语音合成或edit语音编辑--wav_path源音频路径如source/SSB03540307.wav--old_str--wav_path音频对应的原文本--new_str目标文本合成任务中会拼在原文本之后编辑任务中用于替换old_str片段--source_lang/--target_lang源/目标语言。AISHELL-3 训练的模型二者均应为zh--duration_adjust是否启用时长校准默认 True--output_name输出 wav 路径脚本内置的两个示例合成源音频SSB03540307.wav“请播放歌曲小苹果”--new_str歌曲真好听输出exp/pred_gen.wav编辑源音频SSB03540428.wav“今天天气很好”--old_str今天天气很好--new_str今天心情很好输出exp/pred_edit.wav。可以自行修改--wav_path、--old_str、--new_str其中--old_str应是对应音频的文本--new_str应按任务需求设计对 AISHELL-3 训练的模型--source_lang与--target_lang均应为zh。6.3 底层推理链路解析从 synthesize_e2e.py 源码可以看到端到端任务的完整链路文本转音素若语言为中文先用pypinyin把文本转为带声调拼音TONE3风格、开启变调与轻声处理合成任务下new_str old_str new_str即目标句 原句 新增句MFA 对齐get_phns_spansalign.py对源音频与目标文本做强制对齐输出逐音素起止时间mfa_start/mfa_end、新旧音素序列以及需要替换的片段span_to_repl与需要新增的片段span_to_add时长预测与校准调用eval_durs基于 FastSpeech2 时长预测器估计新旧音素时长get_dur_adj_factor用 MFA 真实时长校正预测偏差prep_feats_with_dur中还额外乘了 1.25 的膨胀系数再取整得到帧数级时长构造编辑后的波形把原音频中待替换区间wav_left_idx ~ wav_right_idx由对齐时间 ×n_shift换算采样点替换为静音段静音长度由 FastSpeech2 预测的新音素总时长决定即new_wav [原音频前段, 静音占位段, 原音频后段]提取 mel 并归一化对编辑后的波形提取 log-melLogMelFBank参数与conf/default.yaml一致并用dump/train/speech_stats.npy归一化掩码生成get_span_bdy分别算出原音频被替换区间与新音频占位区间在帧级的边界old_span_bdy/new_span_bdy作为 masked_pos 送入模型模型推理与声码get_am_inference加载 ERNIE-SATamerniesat_dataset模型inference接口对span_bdy指定的区间自回归生成 mel再由get_voc_inference加载的 HiFi-GAN 还原为波形最终sf.write输出结果。也就是说“编辑”并非简单地局部重合成模型同时看到了原句的语音上下文、被掩码的目标区间、以及音素级的对齐信息从而生成音色一致、时长衔接自然的新音频。七、一键运行与 stage 划分run.sh通过parse_options.sh解析--stage/--stop-stage默认stage0、stop_stage100默认 GPU 列表为 0~7./run.sh # 完整流程预处理 - 训练 - 合成 - e2e 合成/编辑 ./run.sh --stage 0 --stop-stage 0 # 仅数据预处理 ./run.sh --stage 3 --stop-stage 3 --gpus 0 # 仅 e2e 语音合成与语音编辑各 stage 对应关系stage 0 数据预处理local/preprocess.shstage 1 模型训练local/train.shstage 2 基于metadata.jsonl的测试集合成local/synthesize.shstage 3 端到端语音合成与语音编辑local/synthesize_e2e.sh。路径与 BIN_DIR 在 path.sh 中导出MODELernie_satBIN_DIR${MAIN_ROOT}/paddlespeech/t2s/exps/ernie_sat即所有 Python 入口脚本均来自 paddlespeech/t2s/exps/ernie_sat。八、预训练模型与评估结果官方发布了 AISHELL-3 训练的 ERNIE-SAT 预训练模型erniesat_aishell3_ckpt_1.2.0.zipPaddleSpeech CDN下载解压后即可跳过训练直接配合 stage 2/3 的推理脚本使用。官方评估结果ModelStepeval/mlm_losseval/lossdefault8(gpu) x 28950051.72378251.723782九、小结流程主线MFA 对齐 →durations.txt→ mel 特征提取 → 统计量与归一化 → Conformer 编码器-解码器 PostNet 的联合 MLM 训练 → HiFi-GAN 声码可复现入口run.sh 的 4 个 stage 与 local 下的 4 个脚本Python 实现集中在 paddlespeech/t2s/exps/ernie_sat 与 paddlespeech/t2s/models/ernie_sat语音编辑的关键MFA 对齐 FastSpeech2 时长预测 帧级掩码区间三者的组合决定了编辑位置的定位与新增时长的准确性这也是使用示例时--old_str必须与源音频文本严格一致的原因。适用前提与限制配置按 8 卡 A100 80GB 验证约 3 天小规模机器需下调batch_size、ngpu等参数MFA 预编译包基于 Linux 且依赖 Python 3.6 动态库AISHELL-3 训练的模型推理时--source_lang/--target_lang均应设为zh。赞分享人工智能语音音频【免费下载链接】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 ERNIE-SAT 端到端语音合成与语音编辑synthesize_e2e 模块深度解析PaddleSpeech ERNIE SAT 端到端语音合成与语音编辑synthesize_e2e 模块深度解析 导读 paddlespeech.t2s.ex人工智能语音音频NLP媒体生成PaddleSpeech 中 ERNIE-SAT 模型源码深度解析跨语言语音合成与语音编辑的联合预训练实现PaddleSpeech 中 ERNIE SAT 模型源码深度解析跨语言语音合成与语音编辑的联合预训练实现 本篇技术指南以 PaddleSpeech 仓库中人工智能语音音频NLP媒体生成PaddleSpeech ERNIE-SAT 模型源码解析语音-文本联合预训练的跨语言语音合成与编辑PaddleSpeech ERNIE SAT 模型源码解析语音 文本联合预训练的跨语言语音合成与编辑 导读 本文围绕 PaddleSpeech 仓库中 pad人工智能语音音频上一篇终极歌词获取指南免费快速搞定网易云QQ音乐歌词下载与格式转换下一篇掌握Hydra游戏启动器10个提升效率的实用快捷键全解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考