PaddleSpeech tts语音合成模型训练
语音合成是指在基础模型上训练自己独有的文本朗读语音。我是在paddlespeech的fastspeech2_aishell3的基础上进行训练。
paddlespeech的安装及使用请看我之前的文章
通过paddlespeech和ollama搭建本地语音问答助手
以下是具体的训练步骤
一、准备预训练模型
进入到tt3目录,在源码梗目录操作
cd examples/other/tts_finetune/tts3
创建模型存放目录
mkdir -p pretrained_models && cd pretrained_models
我训练的中文语音,需要下载基于AISHELL-3的Fastspeech2预训练模型文件
# pretrained fastspeech2 model
wget https://paddlespeech.cdn.bcebos.com/Parakeet/released_models/fastspeech2/fastspeech2_aishell3_ckpt_1.1.0.zip
unzip fastspeech2_aishell3_ckpt_1.1.0.zip
# pretrained hifigan model
wget https://paddlespeech.cdn.bcebos.com/Parakeet/released_models/hifigan/hifigan_aishell3_ckpt_0.2.0.zip
unzip hifigan_aishell3_ckpt_0.2.0.zip
执行完后回到上级目录
cd ..
二、安装MFA 工具及相关模型
MFA 是一款开源的语音对齐工具,在 TTS 训练中主要用于获取音素与语音的时间对齐关系,具体作用包括:
音素级时间对齐:将语音波形(音频)与对应的文本音素序列进行精确匹配,确定每个音素在音频中开始和结束的时间戳。例如,将 “你好” 的拼音 “nǐ hǎo” 对应的音素,与实际发音的音频片段精确对齐。
生成对齐标注文件:通过 MFA 处理后,会生成包含音素、时长等信息的标注文件(如.TextGrid格式),这些信息是 TTS 模型(尤其是基于隐马尔可夫模型 HMM 或端到端模型如 Tacotron)训练的核心输入之一。
提升合成自然度:准确的音素时长信息能帮助模型学习到更自然的韵律(如停顿、语速变化),避免合成语音出现节奏生硬或音素拼接不连贯的问题。
创建目录
mkdir -p tools && cd tools
下载并解压模型
wget https://github.com/MontrealCorpusTools/Montreal-Forced-Aligner/releases/download/v1.0.1/montreal-forced-aligner_linux.tar.gz
tar xvf montreal-forced-aligner_linux.tar.gz
复制库文件
cp montreal-forced-aligner/lib/libpython3.6m.so.1.0 montreal-forced-aligner/lib/libpython3.6m.so
创建模型目录
mkdir -p aligner && cd aligner
下载解压带有aishell3的预训练MFA模型
wget https://paddlespeech.cdn.bcebos.com/MFA/ernie_sat/aishell3_model.zip
unzip aishell3_model.zip
wget https://paddlespeech.cdn.bcebos.com/MFA/AISHELL-3/with_tone/simple.lexicon
回答tt3目录
cd ../../
三、准备数据
数据存放到input 目录下
mkdir -p input && cd input
需要用到两类数据,一个是音频wav文件,一个是带声调的拼音txt文件,数据文件夹结构如下
labels.txt内容如下
前面是音频文件的文件名,|分隔后面的是音频对应的朗读拼音
以下是官方提供的测试数据,下载并解压
wget https://paddlespeech.cdn.bcebos.com/datasets/csmsc_mini.zip
unzip csmsc_mini.zip
可以在模搭社区或者其他网站找自己喜欢的语音数据进行训练
回到tt3目录
cd ../
以上三步完成后在tt3目录下可以看到以下目录结构
├── input
│ ├── csmsc_mini
│ │ ├── 000001.wav
│ │ ├── 000002.wav
│ │ ├── 000003.wav
│ │ ├── ...
│ │ ├── 000200.wav
│ │ ├── labels.txt
│ └── csmsc_mini.zip
├── pretrained_models
│ ├── fastspeech2_aishell3_ckpt_1.1.0
│ │ ├── default.yaml
│ │ ├── energy_stats.npy
│ │ ├── phone_id_map.txt
│ │ ├── pitch_stats.npy
│ │ ├── snapshot_iter_96400.pdz
│ │ ├── speaker_id_map.txt
│ │ └── speech_stats.npy
│ ├── fastspeech2_aishell3_ckpt_1.1.0.zip
│ ├── hifigan_aishell3_ckpt_0.2.0
│ │ ├── default.yaml
│ │ ├── feats_stats.npy
│ │ └── snapshot_iter_2500000.pdz
│ └── hifigan_aishell3_ckpt_0.2.0.zip
└── tools
├── aligner
│ ├── aishell3_model
│ ├── aishell3_model.zip
│ └── simple.lexicon
├── montreal-forced-aligner
│ ├── bin
│ ├── lib
│ └── pretrained_models
└── montreal-forced-aligner_linux.tar.gz
...
四、修改配置文件
配置文件主要有两个
一个是conf下的finetune.yaml,主要用于修改训练数据的配置
另一个是 run.sh 脚本文件,用于配置训练每个阶段的参数
五、开始训练
在tt3目录下运行以下命令
./run.sh
如果没报错的话可以看到以下训练日志
等待训练完就可以使用了。