TTS文本合成语音|Sambert微调

AI 8个月前 admin
56 0 0
今日AI资讯

1.360AI浏览器将增加500万字长文本阅读
2.魔搭社区:发起ModelScope-Sora开源计划
3.胡润百富:超一半新增财富来自AI
4.Suno-v3音乐生成模型发布,快速生成歌曲
5.OpenAI:"数字语音助手""语音引擎"商标申请
6.首个千亿参数多模态金融大模型发布
7.元神进化在北京成立

本文将介绍语音合成TTS、语音合成模型Sambert,包括其模型结构,以及如何定制微调Sambert模型。

什么是语音合成 TTS ?

语音合成(Text-to-Speech, TTS) 是指将输入文字合成为对应语音信号的功能,即赋予计算机“说”的能力,是人机交互中重要的一环。现代语音合成在2016年随着WaveNet的出现步入了深度学习合成时代,此时语音合成的效果已经表现出了比拟真人的水准。

一个语音合成系统通常由两部分组成,分别是语言分析部分和声学系统部分,也被称为前端部分和后端部分。

  • 语言分析:根据输入的文字信息进行分析,生成对应的语言学特征(梅尔频谱),想好该怎么读;
  • 声学系统:根据语音分析部分提供的语音学特征,生成对应的音频,实现发声的功能,其中声学系统部分直接影响了合成语音的自然度真实感

如人类通过大脑传递神经信号驱动肺部和声带发出声音一样,计算机对输入的文本,先后经过语言分析和声学系统,最终合成语音信号。

TTS文本合成语音|Sambert微调

在语音合成领域,类似FastSpeech的Parallel模型是目前的主流,它针对基频(pitch)能量(energy)时长(duration)三种韵律表征分别建模。但是该类模型普遍存在一些效果和性能上的问题,例如:独立建模时长、基频、能量,忽视了其内在联系;完全非自回归的网络结构,无法满足工业级实时合成需求;帧级别基频和能量预测不稳定

今天我们所了解的SAMBERT,是一种基于Parallel结构改良版TTS模型,优点如下:

  1. Backbone采用Self-Attention-Mechanism(SAM),提升模型建模能力。
  2. Encoder部分采用BERT进行初始化,引入更多文本信息,提升合成韵律。
  3. Variance Adaptor对音素级别的韵律(基频、能量、时长)轮廓进行粗粒度的预测,再通过decoder进行帧级别细粒度的建模;并在时长预测时考虑到其与基频、能量的关联信息,结合自回归结构,进一步提升韵律自然度.
  4. Decoder部分采用PNCA AR-Decoder,自然支持流式合成。
TTS文本合成语音|Sambert微调

目前ModelScope社区已经上线了13个基于Sambert的语音合成模型,其中男女声发音人模型各4个,多发音人模型5个,整体MOS评分在4.5分左右,达到了接近真实录音的水平,模型支持中文、英式英文、美式英文、中英混几类语言,适用于客服、电销、朗读、视频配音等多种场景。

推理代码示例

from scipy.io.wavfile import write

from modelscope.outputs import OutputKeys
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks

text = '我的第一个待合成文本是这样发音的'
model_id = 'speech_tts/speech_sambert-hifigan_tts_zh-cn_multisp_pretrain_16k'
sambert_hifigan_tts = pipeline(task=Tasks.text_to_speech, model=model_id, model_revision='v1.0.0')
output = sambert_hifigan_tts(input=text)
pcm = output[OutputKeys.OUTPUT_PCM]
write('output.wav'16000, pcm)

如何训练一个定制语音合成模型 ?

本次实验使用开源的语音合成模型训练框架KAN-TTS,modelscope提供的中文多人预训练模型,开发者基于此语音合成训练框架及预训练模型,即可在小规模数据集上定制自己的语音合成模型,这里我们将使用AISHELL-3开源语音合成数据集,演示如何训练一个定制化语音合成模型。

一、环境搭建

源码下载
git clone https://github.com/alibaba-damo-academy/KAN-TTS.git && cd KAN-TTS

创建虚拟环境(目前只兼容Linux_x86系统):

# 防止使用pip安装时出现网络问题,建议切换国内pip源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

# 创建虚拟环境
conda env create -f environment.yaml

# 激活虚拟环境
conda activate maas

二、准备数据

目前KAN-TTS支持两种类型的数据格式:阿里标准格式通用格式

其中阿里标准格式数据如下:

TTS文本合成语音|Sambert微调

通用格式数据如下:

TTS文本合成语音|Sambert微调
  • wav文件夹:存放音频文件
  • prosody文件夹:.txt文件对应的是音频文件的文本标注
  • interval文件夹:音素时长标注,存放的是音素级别的时间戳标注,通常情况下通用格式数据不会携带时间戳标注,这是两种格式的区别。

快速开始 可以直接从ModelScope下载阿里标准格式的AISHELL-3开源语音合成数据集

# 解压数据
unzip aishell3.zip

解压后得到如下结构文件夹:

TTS文本合成语音|Sambert微调

AISHELL-3包含200多个发音人录音,每个发音人数据量在20~30分钟,这里我们选择其中的一个发音人进行数据处理,以SSB0009为例(开发者也可自行选择其他发音人),训练一个16k采样率的语音合成模型。

由于原始音频采样率为44k,我们先对音频做重采样,这里需要用到该数据集的元数据仓库脚本

# 拉取元数据仓库,并做重采样处理
git clone https://www.modelscope.cn/datasets/speech_tts/AISHELL-3.git
./AISHELL-3/aishell_resample.sh aishell3 aishell3_16k 16000

下面选择适合数据采样率的配置文件进行特征提取操作,以16k采样率为例 kantts/configs/audio_config_16k.yaml

# 特征提取
python kantts/preprocess/data_process.py --voice_input_dir aishell3_16k/SSB0009 --voice_output_dir training_stage/SSB0009_feats --audio_config kantts/configs/audio_config_16k.yaml --speaker SSB0009

其中 --speaker 代表该数据集对应发音人的名称,用户可以随意命名。

特征提取完毕后你会在training_stage/SSB0009_feats目录下得到如下结构的文件:

TTS文本合成语音|Sambert微调

至此数据准备工作就算完成了。

拉取预训练模型

ModelScope中文多人语音合成模型是达摩院语音实验室在100小时精标多人数据集上训练产出的预训练模型,以此为basemodel做sft微调。

# 安装git-lfs

# 克隆预训练模型
git clone -b pretrain http://www.modelscope.cn/speech_tts/speech_sambert-hifigan_tts_zh-cn_multisp_pretrain_16k.git

在 basemodel_16k 目录下即为 checkpoints.

微调声学模型 SAM-BERT

KAN-TTS的训练脚本是可配置的,使用预训练模型的 sambert/config.yaml 作为训练配置文件。

根据在数据准备阶段对数据集做的命名,修改配置文件中的 speaker_list 配置项:

# 将speaker_list其中一个发音人替换为aishell3发音人
linguistic_unit: 
  cleaners: english_cleaners
  lfeat_type_list: sy,tone,syllable_flag,word_segment,emo_category,speaker_category
  speaker_list: SSB0009,F74,FBYN,FRXL,M7,xiaoyu

以及train_max_steps配置项,我们希望在basemodel 980k的基础上,继续微调120k

# 将train_max_steps改为1100100
...
train_max_steps: 1100100
...

完成上述必要的配置项修改后,就可以训练声学模型了:

# 训练声学模型
CUDA_VISIBLE_DEVICES=0 python kantts/bin/train_sambert.py --model_config speech_sambert-hifigan_tts_zh-cn_multisp_pretrain_16k/basemodel_16k/sambert/config.yaml --resume_path speech_sambert-hifigan_tts_zh-cn_multisp_pretrain_16k/basemodel_16k/sambert/ckpt/checkpoint_980000.pth --root_dir training_stage/SSB0009_feats --stage_dir training_stage/SSB0009_sambert_ckpt

训练完成后声学模型输出目录如下:

TTS文本合成语音|Sambert微调

微调声码器模型

后端模块中声码器采用HIFI-GAN, 基于GAN的方式利用判别器(Discriminator)来指导声码器(即生成器Generator)的训练,相较于经典的自回归式逐样本点CE训练, 训练方式更加自然,在生成效率和效果上具有明显的优势。其系统结构如图所示:

TTS文本合成语音|Sambert微调

在HIFI-GAN开源工作的基础上,我们针对16k, 48k采样率下的模型结构进行了调优设计,并提供了基于因果卷积的低时延流式生成chunk流式生成机制,可与声学模型配合支持CPU、GPU等硬件条件下的实时流式合成

与声学模型类似,声码器的训练脚本也是可配置的,使用预训练模型目录下的hifigan/config.yaml作为训练配置文件。我们希望在 basemodel 2000k steps 的基础上再微调100k steps,但不保留state,修改 hifigan/config.yaml 配置项train_max_steps

  • 声学模型和声码器的微调没有依赖关系,两者可同时进行
# 将train_max_steps改为100100
...
train_max_steps: 100100
...

训练命令:

# 训练声码器
CUDA_VISIBLE_DEVICES=0 python kantts/bin/train_hifigan.py --model_config speech_sambert-hifigan_tts_zh-cn_multisp_pretrain_16k/basemodel_16k/hifigan/config.yaml --resume_path speech_sambert-hifigan_tts_zh-cn_multisp_pretrain_16k/basemodel_16k/hifigan/ckpt/checkpoint_2000000.pth --root_dir training_stage/SSB0009_feats --stage_dir training_stage/SSB0009_hifigan_ckpt

声码器需要的微调时间较长,根据GPU型号不同在12~20小时。训练完成后,声码器模型输出目录如下:

TTS文本合成语音|Sambert微调

体验微调模型效果

在声学模型和声码器微调完毕后,就可以使用产出的模型文件来合成语音了。

准备要合成的文本写入一个文件test.txt,每句话按行分隔。使用utf-8编码,整体长度建议不超过30字

运行以下命令进行合成:

# 运行合成语音
CUDA_VISIBLE_DEVICES=0 python kantts/bin/text_to_wav.py --txt test.txt --output_dir res/SSB0009_syn --res_zip speech_sambert-hifigan_tts_zh-cn_multisp_pretrain_16k/resource.zip --am_ckpt training_stage/SSB0009_sambert_ckpt/ckpt/checkpoint_1100000.pth --voc_ckpt training_stage/SSB0009_hifigan_ckpt/ckpt/checkpoint_2100000.pth --speaker SSB0009

完成后在res/SSB0009_syn/res_wavs文件夹下就可以获得合成结果

TTS文本合成语音|Sambert微调

评估结果

使用MOS(Mean Opinion Score)来评估合成声音的自然度,评分从1(不好)到5(非常好),每提高0.5分表示更高的自然度。随机选择20个samples,然后每个sample交给至少10个人进行打分。作为对比,使用真人录音的sample通过上述统计方式进行打分。

TTS文本合成语音|Sambert微调

应用场景

语音合成技术目前被广泛应用在各种领域,例如智能设备语音助手、音视频媒体创作、辅助阅读等,具体到我们的日常使用场景,虚拟主播数字人、手机、可穿戴设备、智能音箱、电话客服、有声电子书、各种各样的短视频配音等等,语音合成技术的身影随处可见。随着语音合成技术的不断发展,其合成结果也越来越逼真,也许有一天你无法分辨正在和你交谈的是人类还是计算机。

引用

  • https://modelscope.cn/docs/sambert

关于我

欢迎关注,一起进步一起成长

TTS文本合成语音|Sambert微调


原文始发于微信公众号(小贾探AI):TTS文本合成语音|Sambert微调

版权声明:admin 发表于 2024年3月26日 下午8:49。
转载请注明:TTS文本合成语音|Sambert微调 | CTF导航

相关文章