ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

PaddleSpeech 中的 AISHELL-3 数据集:从语料解析到多说话人 TTS / 声线克隆实战

PaddleSpeech 中的 AISHELL-3 数据集:从语料解析到多说话人 TTS / 声线克隆实战 人工智能语音音频NLP媒体生成【免费下载链接】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/paddlepaddle/PaddleSpeech点击查看免费下载AISHELL-3 是飞桨 PaddleSpeech 仓库中用于训练多说话人中文 TTSText-to-Speech系统的旗舰语料之一本文以其在仓库中的官方说明dataset/aishell3/README.md为核心骨架结合examples/aishell3下的完整可运行示例系统讲解该语料的规模与结构、在仓库中的示例全景以及基于它完成 FastSpeech2 多说话人语音合成、Parallel WaveGAN 声码器合成和声线克隆的完整实战流程。读完本文你将掌握如何在 PaddleSpeech 中基于 AISHELL-3 完成从数据预处理、模型训练到端到端合成的全套操作并能直接迁移到 VCTK 等其他多说话人语料上。AISHELL-3 语料简介AISHELL-3官方代号 AISHELL-3是一个大规模、高保真的多说话人中文普通话语音库专为训练多说话人文本到语音TTS系统而设计。根据仓库内 dataset/aishell3/README.md 的官方描述其核心规格如下时长规模约85 小时的情绪中性录音说话人规模218 位母语为中文普通话的说话人共计88035 条话语utterances说话人属性标注语料中显式标注并提供了说话人的性别、年龄段、籍贯口音等辅助属性这是训练多说话人 TTS 时选择与刻画说话人特征的重要依据转写文本与录音配套提供了汉字级character-level与拼音级pinyin-level两种粒度的转写文本标注质量经过专业语音标注与对音调、韵律的严格质检字与声调的转写准确率超过 98%使用许可该数据库在未经许可的情况下免费用于学术研究不可用于商业用途。从语料设计上不难看出AISHELL-3 的 218 位说话人、汉字拼音双粒度转写以及说话人属性标注恰好覆盖了多说话人 TTS 训练所需的三个关键要素多说话人音色多样性供模型学习 speaker embedding、音素级标注供时长/音高建模、韵律与声调信息供中文声调建模。这也是它在 PaddleSpeech 中被多个 TTS 与声线克隆示例同时选用的根本原因。AISHELL-3 在 PaddleSpeech 仓库中的示例全景AISHELL-3 在整个 PaddleSpeech 仓库中并非孤立存在examples/aishell3目录下聚合了围绕该语料的一整套声学模型acoustic model、声码器vocoder与声线克隆voice cloning示例。仓库根目录下的 examples/aishell3/README.md 给出了完整的清单示例目录对应模型用途tts0Tacotron2自回归声学模型语音合成tts1TransformerTTS基于 Transformer 的声学模型tts2SpeedySpeech非自回归快速声学模型tts3FastSpeech2非自回归并行声学模型多说话人voc0WaveFlow流式声码器voc1Parallel WaveGANGAN 声码器推荐搭配 FastSpeech2voc2MelGANGAN 声码器voc3MultiBand MelGAN多频带 GAN 声码器vc0Tacotron2 GE2E声线克隆vc1FastSpeech2 GE2E声线克隆vc2FastSpeech2 ECAPA-TDNN声线克隆ernie_satERNIE-SAT基于 ERNIE 的语音-文本联合模型其中tts3FastSpeech2 AISHELL-3是文档描述最完整、链路最全的示例本文以其为主线展开。实战主线用 FastSpeech2 训练 AISHELL-3 多说话人 TTS以下所有步骤均以 examples/aishell3/tts3/README.md 为蓝本并对照仓库中的脚本实现逐一展开。1. 数据下载与目录约定AISHELL-3 需要从官方渠道下载并解压。按示例约定解压到~/datasets后语料目录为~/datasets/data_aishell3。该目录下是原始音频与转写文件后续所有预处理均以此为输入。2. 获取 MFA 对齐结果时长标注FastSpeech2 属于非自回归模型训练时需要音素级时长标注duration。PaddleSpeech 使用蒙特利尔强制对齐工具MFA为 AISHELL-3 生成时长可直接下载官方提供的对齐结果aishell3_alignment_tone.tar.gz带声调版本解压后得到aishell3_alignment_tone目录也可参考仓库中的 examples/other/mfa 示例自行训练 MFA 模型。3. 一键运行与阶段控制示例根目录提供了run.sh一键脚本examples/aishell3/tts3/run.sh默认执行完整链路source path.sh配置环境预处理数据集训练模型从metadata.jsonl合成波形从文本文件端到端合成波形。脚本通过stage/stop-stage参数精确控制执行范围例如仅执行预处理./run.sh --stage 0 --stop-stage 0run.sh内部还串联了更多高级阶段stage 4 为静态图推理inference、stage 5 为 Paddle2ONNX 导出、stage 6 为 ONNX Runtime 推理、stage 7/8 为 Paddle-Lite 导出与预测覆盖了从训练到移动端部署的完整链路。脚本通过utils/parse_options.sh解析参数因此也可以直接修改脚本头部的gpus、conf_path、train_output_path、ckpt_name等变量来定制实验。path.shexamples/aishell3/tts3/path.sh负责环境初始化将仓库根目录与utils加入PATH将仓库根目录加入PYTHONPATH并定义BIN_DIRpaddlespeech/t2s/exps/fastspeech2指向 FastSpeech2 的 Python 入口目录同时设置LC_ALLC与PYTHONIOENCODINGUTF-8避免中文语料在管道传输时出现编码错误。4. 数据预处理与 dump 目录结构预处理脚本为./local/preprocess.shexamples/aishell3/tts3/local/preprocess.sh调用形式./local/preprocess.sh ${conf_path}其内部按 4 个阶段执行生成 durations.txt调用utils/gen_duration_from_textgrid.py从 MFA 的 TextGrid 对齐结果中解析出每个音素的时长特征提取调用paddlespeech/t2s/exps/fastspeech2/preprocess.py指定--datasetaishell3、--rootdir~/datasets/data_aishell3/、--dumpdirdump、--dur-filedurations.txt、--config以及--num-cpu20、--cut-silTrue切除静音等参数抽取 speech线性谱、pitch基频与 energy能量特征统计量计算分别对speech、pitch、energy三个字段调用utils/compute_statistics.py从训练集 raw 特征计算均值与标准差归一化与 ID 映射对 train / dev / test 三部分分别调用normalize.py使用训练集统计量进行归一化并将音素、说话人映射为整数 IDphone_id_map.txt、speaker_id_map.txt。预处理完成后生成dump目录结构如下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归一化特征两个子目录归一化所需的均值/标准差统计量存放于dump/train/*_stats.npy且dev/test 必须复用 train 的统计量以保证特征分布一致每个子目录下还有一个metadata.jsonl以类表格形式逐条记录 utterances 的 phones、text_lengths、speech_lengths、durations、speech/pitch/energy 特征路径、speaker 以及 id是后续训练与合成的数据索引。5. 关键配置conf/default.yaml 参数全解FastSpeech2 的核心训练配置位于 examples/aishell3/tts3/conf/default.yaml其中与本语料强相关的关键参数如下特征提取设置AISHELL-3 为 24kHz 采样率与 CSMSC 等 16kHz 语料明显不同参数默认值含义fs24000采样率n_fft2048FFT 大小采样点n_shift300帧移采样点约 12.5mswin_length1200窗长采样点约 50mswindowhann窗函数fmin/fmax80 / 7600Mel 滤波器组的最低/最高频率n_mels80Mel 通道数f0min/f0max80 / 400基频提取的上下限Hz用于 pitch 特征模型结构设置多说话人相关参数默认值含义adim/aheads384 / 2注意力维度 / 注意力头数elayers/eunits4 / 1536编码器层数 / FFN 单元数dlayers/dunits4 / 1536解码器层数 / FFN 单元数duration_predictor_layers/chans/kernel_size2 / 256 / 3时长预测器层数 / 通道数 / 卷积核postnet_layers/filts/chans5 / 5 / 256PostNet 层数 / 卷积核 / 通道数pitch_predictor_layers/chans/kernel_size5 / 256 / 5音高预测器层数 / 通道数 / 卷积核energy_predictor_layers/chans/kernel_size2 / 256 / 3能量预测器层数 / 通道数 / 卷积核spk_embed_dim256说话人嵌入维度多说话人模型核心参数spk_embed_integration_typeconcat说话人嵌入与编码器输出的融合方式拼接训练设置batch_size: 64、max_epoch: 200、num_snapshots: 5优化器为 Adamlearning_rate: 0.001seed: 10086固定随机种子保证可复现。其中spk_embed_dim与spk_embed_integration_type正是 AISHELL-3 多说话人建模的关键模型为每个说话人学习一个 256 维嵌入并在编码器输出上拼接融合从而让同一套声学参数适配 218 位说话人。6. 模型训练训练由./local/train.sh调用paddlespeech/t2s/exps/fastspeech2/train.py完成CUDA_VISIBLE_DEVICES${gpus} ./local/train.sh ${conf_path} ${train_output_path}train.py的完整参数说明如下usage: train.py [-h] [--config CONFIG] [--train-metadata TRAIN_METADATA] [--dev-metadata DEV_METADATA] [--output-dir OUTPUT_DIR] [--ngpu NGPU] [--phones-dict PHONES_DICT] [--speaker-dict SPEAKER_DICT] [--voice-cloning VOICE_CLONING] optional arguments: --config CONFIG fastspeech2 config fileYAML 格式覆盖默认配置 --train-metadata TRAIN_METADATA 训练数据dump/train/norm/metadata.jsonl --dev-metadata DEV_METADATA 验证数据dump/dev/norm/metadata.jsonl --output-dir OUTPUT_DIR 实验输出目录checkpoints 保存在其 checkpoints/ 子目录 --ngpu NGPU GPU 数量ngpu0 时使用 CPU --phones-dict PHONES_DICT 音素词表文件 --speaker-dict SPEAKER_DICT 说话人 ID 映射文件多说话人模型必需 --voice-cloning VOICE_CLONING 是否训练声线克隆模型其中--config指向conf/default.yaml用于覆盖默认参数--train-metadata与--dev-metadata应使用dump目录中train、dev的norm子目录下的metadata.jsonl训练完成的快照统一保存于--output-dir的checkpoints/目录中run.sh中默认使用的ckpt_namesnapshot_iter_482.pdz即来源于此。7. 语音合成从特征索引与从文本两种模式示例提供两种合成入口均以声学模型 声码器vocoder串联的方式生成最终波形模式一从metadata.jsonl合成./local/synthesize.shCUDA_VISIBLE_DEVICES${gpus} ./local/synthesize.sh ${conf_path} ${train_output_path} ${ckpt_name} 0其内部调用synthesize.py读取归一化后的 test 元数据逐条重建语音。命令行最后一个数字控制声码器0使用Parallel WaveGANpwgan1使用HiFiGAN。模式二从文本文件端到端合成./local/synthesize_e2e.shCUDA_VISIBLE_DEVICES${gpus} ./local/synthesize_e2e.sh ${conf_path} ${train_output_path} ${ckpt_name} 0其内部调用synthesize_e2e.py输入为utt_id sentence格式的文本文件直接完成文本 → 音素 → 声学特征 → 波形的全流程。从 examples/aishell3/tts3/local/synthesize_e2e.sh 可以看到声学模型固定为--amfastspeech2_aishell3、--vocpwgan_aishell3或hifigan_aishell3并通过--spk_id0指定合成的目标说话人——这正是多说话人模型在实际使用中切换音色的入口。synthesize.py的关键参数--am {speedyspeech_csmsc,fastspeech2_csmsc,fastspeech2_ljspeech, fastspeech2_aishell3,fastspeech2_vctk,tacotron2_csmsc, tacotron2_ljspeech,tacotron2_aishell3} # 声学模型类型格式 {model}_{dataset} --am_config / --am_ckpt / --am_stat # 声学模型配置、权重、谱归一化统计量 --phones_dict / --tones_dict / --speaker_dict # 音素/声调/说话人词表 --voc {pwgan_csmsc,pwgan_ljspeech,pwgan_aishell3,pwgan_vctk, mb_melgan_csmsc,wavernn_csmsc,hifigan_csmsc,hifigan_ljspeech, hifigan_aishell3,hifigan_vctk,style_melgan_csmsc} # 声码器类型 --voc_config / --voc_ckpt / --voc_stat # 声码器配置、权重、归一化统计量 --ngpu / --test_metadata / --output_dirsynthesize_e2e.py额外提供--langzh或en、--spk_id多说话人模型指定说话人、--text待合成文本文件与--inference_dir推理模型保存目录等参数。8. 预训练模型快速上手仓库为 AISHELL-3 提供了多形态的预训练 FastSpeech2 模型详见 examples/aishell3/tts3/README.md动态图模型fastspeech2_aishell3_ckpt_1.1.0.zip与fastspeech2_conformer_aishell3_ckpt_0.2.0.zipFastSpeech2-Conformer 变体静态图模型fastspeech2_aishell3_static_1.1.0.zipPIR 静态图模型fastspeech2_aishell3_static_pir_1.1.0.zip需设置FLAGS_enable_pir_api1且仅支持 paddlepaddle3.0.0b2ONNX 模型fastspeech2_aishell3_onnx_1.1.0.zipPaddle-Lite 模型fastspeech2_aishell3_pdlite_1.3.0.zip。FastSpeech2 检查点解压后包含 7 个文件fastspeech2_aishell3_ckpt_1.1.0 ├── default.yaml # 训练 fastspeech2 的默认配置 ├── energy_stats.npy # 能量归一化统计量 ├── phone_id_map.txt # 音素词表 ├── pitch_stats.npy # 基频归一化统计量 ├── snapshot_iter_96400.pdz # 模型参数与优化器状态 ├── speaker_id_map.txt # 说话人 ID 映射多说话人模型 └── speech_stats.npy # 谱归一化统计量配合 Parallel WaveGAN 声码器pwg_aishell3_ckpt_0.5.zip内含default.yaml、feats_stats.npy、snapshot_iter_1000000.pdz可直接对仓库内置的测试句子文件paddlespeech/t2s/assets/sentences.txt做零训练推理source path.sh FLAGS_allocator_strategynaive_best_fit \ FLAGS_fraction_of_gpu_memory_to_use0.01 \ python3 ${BIN_DIR}/../synthesize_e2e.py \ --amfastspeech2_aishell3 \ --am_configfastspeech2_aishell3_ckpt_1.1.0/default.yaml \ --am_ckptfastspeech2_aishell3_ckpt_1.1.0/snapshot_iter_96400.pdz \ --am_statfastspeech2_aishell3_ckpt_1.1.0/speech_stats.npy \ --vocpwgan_aishell3 \ --voc_configpwg_aishell3_ckpt_0.5/default.yaml \ --voc_ckptpwg_aishell3_ckpt_0.5/snapshot_iter_1000000.pdz \ --voc_statpwg_aishell3_ckpt_0.5/feats_stats.npy \ --langzh \ --text${BIN_DIR}/../../assets/sentences.txt \ --output_direxp/default/test_e2e \ --phones_dictfastspeech2_aishell3_ckpt_1.1.0/phone_id_map.txt \ --speaker_dictfastspeech2_aishell3_ckpt_1.1.0/speaker_id_map.txt \ --spk_id0 \ --inference_direxp/default/inference其中FLAGS_allocator_strategynaive_best_fit与FLAGS_fraction_of_gpu_memory_to_use0.01用于降低推理时的显存占用。进阶玩法基于 AISHELL-3 的声线克隆AISHELL-3 的 218 位说话人特性使其成为声线克隆voice cloning任务的理想训练语料。examples/aishell3下提供了三个声线克隆示例examples/aishell3/vc1/README.mdvc0Tacotron2 GE2Evc1FastSpeech2 GE2Evc2FastSpeech2 ECAPA-TDNN。以 vc1 为例其技术路线分为三步说话人编码器Speaker Encoder使用说话人验证Speaker Verification任务训练 GE2E 编码器参考examples/other/ge2e。由于该任务不需要转写文本可引入比 AISHELL-3 更丰富的数据集合成器Synthesizer用训练好的说话人编码器为 AISHELL-3 中每个句子生成说话人嵌入speaker embedding该嵌入作为 FastSpeech2 的额外输入与编码器输出拼接融合——这与default.yaml中spk_embed_dim: 256、spk_embed_integration_type: concat的设置完全对应声码器Vocoder使用 Parallel WaveGAN参考examples/aishell3/voc1重建波形。因此AISHELL-3 训练出的 FastSpeech2 模型在推理阶段可以替换说话人嵌入来合成全新音色这正是多说话人 TTS 声线克隆一脉相承的落地方式。小结从仓库证据看AISHELL-3 在 PaddleSpeech 中的价值链条非常完整数据集85 小时 / 218 说话人 / 88035 条话语 / 汉字拼音转写→ 数据预处理MFA 时长 特征提取 归一化→ 多说话人声学模型FastSpeech2含 256 维 speaker embedding→ 声码器Parallel WaveGAN / HiFiGAN→ 推理部署动态图 / 静态图 / ONNX / Paddle-Lite并横向延伸到声线克隆GE2E / ECAPA-TDNN与语音-文本联合模型ERNIE-SAT等高级任务。如果你正在寻找一个开箱即用、规模适中的中文多说话人 TTS 语料AISHELL-3 与examples/aishell3的这套脚本就是最直接的起点其流程同样可平移到 VCTK 等其它多说话人语料只需相应更换数据集路径、配置中的采样率与统计量即可。赞分享人工智能语音音频NLP媒体生成【免费下载链接】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/paddlepaddle/PaddleSpeech点击查看免费下载相关推荐多说话人语音合成GPT-SoVITS模型混合技术与实现多说话人语音合成GPT SoVITS模型混合技术与实现 在语音合成领域单一说话人模型已难以满足多样化的应用需求。多说话人语音合成技术通过混合不同模型的优势语音音频人工智能大模型微调模型推理服务本地部署mlx-audio MOSS-TTS 实战指南8B 多码本 TTS 的音色克隆、多说话人对话与流式合成mlx audio MOSS TTS 实战指南8B 多码本 TTS 的音色克隆、多说话人对话与流式合成 本篇基于 mlx audio 仓库中 MOSS TTS人工智能语音音频本地部署媒体生成mlx-audio 中 Fish SpeechFish-Audio S2 Pro双自回归 TTS 实战声音克隆、多说话人与长文本合成mlx audio 中 Fish SpeechFish Audio S2 Pro双自回归 TTS 实战声音克隆、多说话人与长文本合成 mlx audio人工智能语音音频本地部署媒体生成创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表