如何使用ModelScope魔搭开源代码训练一款语音合成模型

本文涉及的产品
交互式建模 PAI-DSW,5000CU*H 3个月
简介: 如何使用ModelScope魔搭开源代码训练一款语音合成模型

从模型体验到开发训练,本文将演示如何通过modelscope魔搭体验达摩院预训练模型,并手把手演示定制一款语音合成模型的训练过程。

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

▏如何体验语音合成模型效果

1. 在线体验

ModelScope上线的语音合成模型均提供了在线体验功能,点击进入模型主页,在页面右侧可以输入想要合成的文本,点击“执行测试”,模型会加载并进行推理,推理完成后,下方的“测试结果”会出现合成的音频,点击它就可以播放音频啦。

2. Notebook开发体验

对于有一定经验的开发者,还可以通过在线Notebook体验模型效果,点击模型主页右上角的“在Notebook中打开”,

随后会出现选择开发环境的页面,此处我们推荐使用CPU环境,当前可以免费使用。

请注意以上操作需要的前提条件:

①注册一个阿里云账号

②注册一个ModelScope网站账号

先登录ModelScope账号,点击模型页面右上角的“在Notebook中打开”按钮出现对话框。首次使用会提示您关联阿里云账号,按提示操作即可。

待进入Notebook开发环境后我们选择新建Notebook脚本

将模型主页的示例代码粘贴到Notebook代码块中,并将text替换成想要合成的文本,运行代码块,随后即可在左侧文件栏中获得合成的语音文件,可下载到本地进行试听。

Notebook示例代码

执行Notebook代码块

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

达摩院语音实验室已经将ModelScope上语音合成模型使用的训练框架KAN-TTS开源到了Github代码托管平台,并提供了中文多人预训练模型,开发者基于此语音合成训练框架及预训练模型,即可在小规模数据集上定制自己的语音合成模型,这里我们将使用AISHELL-3开源语音合成数据集(特别鸣谢希尔贝壳提供该数据集),演示如何生产一个定制化语音合成模型。

首先在开始训练前,我们需要完成环境搭建和数据准备两个操作。

环境搭建

获取KAN-TTS源码, 后续操作默认在代码库根目录下执行



git clone https://github.com/AlibabaResearch/KAN-TTS.gitcd KAN-TTS

我们推荐使用Anaconda来搭建Python虚拟环境,使用以下命令创建(目前只兼容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支持两种类型的数据格式:阿里标准格式通用格式

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















.├── interval│   ├── 500001.interval│   ├── 500002.interval│   ├── 500003.interval│   ├── ...│   └── 600010.interval├── prosody│   └── prosody.txt└── wav    ├── 500001.wav    ├── 500002.wav    ├── ...    └── 600010.wav

通用格式数据如下:









.├── prosody│   └── prosody.txt└── wav    ├── 1.wav    ├── 2.wav    ├── ...    └── 9000.wav

wav文件夹下存放了音频文件,prosody文件夹下的.txt文件对应的是音频文件的文本标注,interval文件夹下存放的是音素级别的时间戳标注,通常情况下通用格式数据不会携带时间戳标注,这是两种格式的区别。

快速开始:你可以从ModelScope下载经过阿里标准格式处理的AISHELL-3开源语音合成数据集,用来进行后续操作。

在ModelScope页面下载数据文件,解压数据文件并得到文件夹


unzip aishell3.zip

AISHELL-3包含两百多个发音人录音,每个发音人数据量在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

运行以下命令来进行特征提取,其中--speaker代表该数据集对应发音人的名称,用户可以随意命名。


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

根据数据集规模,特征提取需要运行一段时间,提取完毕后你会在training_stage/SSB0009_feats目录下得到如下结构的文件:




















# 基于阿里标准格式数据所提取出的特征目录├── am_train.lst├── am_valid.lst├── audio_config.yaml├── badlist.txt├── data_process_stdout.log├── duration├── energy├── f0├── frame_energy├── frame_f0├── frame_uv├── mel├── raw_duration├── raw_metafile.txt├── Script.xml├── train.lst├── valid.lst└── wav

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

获取预训练模型

ModelScope中文多人语音合成模型是达摩院语音实验室在100小时精标多人数据集上训练产出的预训练模型,我们以此为basemodel做后续微调。使用git命令拉取模型,在拉取前,首先你需要安装git-lfs, 具体的安装教程见Git Large File Storage,安装完成后执行以下命令



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

微调声学模型

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  --root_dir training_stage/SSB0009_feats --stage_dir training_stage/SSB0009_sambert_ckpt

根据你的显卡数量和性能不同,此处sambert训练会需要5~10个小时,训练完成后模型输出目录如下:










./SSB0009_sambert_ckpt├── ckpt/├── checkpoint_1100000.pth   <----- this is the latest checkpoint├── checkpoint_1020000.pth├── checkpoint_1040000.pth|....├── config.yaml├── log/└── stdout.log

微调声码器

与声学模型类似,声码器的训练脚本也是配置驱动的,你可以使用预训练模型目录下的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 --root_dir training_stage/SSB0009_feats --stage_dir training_stage/SSB0009_hifigan_ckpt

声码器需要的微调时间较长,根据GPU型号不同在12~20小时不等。

训练完成后,声码器模型输出目录如下:










.├── ckpt/│   ├── checkpoint_2020000.pth│   ├── checkpoint_2040000.pth│   ├── ...│   └── checkpoint_2100000.pth      <---- this is the latest checkpoint├── config.yaml├── log/└── stdout.log

体验模型效果

在声学模型和声码器微调完毕后,我们就可以使用产出的模型文件来合成语音了,在此之前需要做一些准备工作。

将我们想要合成的文本写入一个文件test.txt,每句话按行分隔,如下所示:








徐玠诡谲多智,善揣摩,知道徐知询不可辅佐,掌握着他的短处以归附徐知诰。许乐夫生于山东省临朐县杨善镇大辛庄,毕业于抗大一分校。宣统元年(1909年),顺德绅士冯国材在香山大黄圃成立安洲农务分会,管辖东海十六沙,冯国材任总理。学生们大多住在校区宿舍,通过参加不同的体育文化俱乐部及社交活动,形成一个友谊长存的社会圈。学校的“三节一会”(艺术节、社团节、科技节、运动会)是显示青春才华的盛大活动。雪是先天自闭症患者,不懂与人沟通,却拥有灵敏听觉,而且对复杂动作过目不忘。勋章通过一柱状螺孔和螺钉附着在衣物上。

运行以下命令进行合成:


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文件夹下就可以获得合成结果




















│   ├── 8_0_dur.txt│   ├── 8_0_energy.txt│   ├── 8_0_f0.txt│   ├── 8_0_mel.npy│   ├── 8_1_dur.txt│   ├── 8_1_energy.txt│   ├── 8_1_f0.txt│   └── 8_1_mel.npy├── res_wavs│   ├── 0.wav│   ├── 1.wav│   ├── 2.wav│   ├── 3.wav│   ├── 4.wav│   ├── 5.wav│   ├── 6.wav├── stdout.log└── symbols.lst

以下分别为原始录音及合成样音

原始录音

001音频:00:0000:06002音频:00:0000:02003音频:00:0000:02

合成样音

0音频:00:0000:071音频:00:0000:052音频:00:0000:093音频:00:0000:084音频:00:0000:075音频:00:0000:076音频:00:0000:03

ModelScope语音合成模型原理

在ModelScope魔搭社区上大家体验到的语音合成技术是达摩院语音实验室显式韵律声学模型SAMBERT以及HiFi-GAN声码器的结合。

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

因此达摩院语音实验室设计了SAMBERT,一种基于Parallel结构的改良版TTS模型,它具有以下优点:

  1. 建立时长与基频、能量的依赖关系,并使用自回归结构的时长预测模块,提升预测韵律的自然度和多样性;
  2. Decoder使用PNCA自回归结构,降低带宽要求,支持CPU实时合成;
  3. 音素级别建模基频、能量,提高容错率;
  4. 以预训练BERT语言模型为编码器,在小规模数据上效果更好。

FastSpeech2

SAMBERT

联系我们

使用中如遇到任何问题,欢迎通过ModelScope社区与我们互动。https://developer.aliyun.com/community/modelscope

(扫描上方二维码或输入网址即可联系我们)


相关链接:

[1] ModelScope魔搭社区语音合成模型:https://modelscope.cn/models?page=1&tasks=text-to-speech[2] 中文16k多人预训练语音合成模型https://modelscope.cn/models/speech_tts/speech_sambert-hifigan_tts_zh-cn_multisp_pretrain_16k/summary[3]  KAN-TTS Github仓库 https://github.com/AlibabaResearch/KAN-TTS[4]  ModelScope魔搭社区AISHELL3数据集:https://modelscope.cn/datasets/speech_tts/AISHELL-3/summary[5]  Anaconda官方下载页面:https://www.anaconda.com/products/distribution#Downloads[6]  Git-LFS安装教程https://docs.github.com/cn/repositories/working-with-files/managing-large-files/installing-git-large-file-storageReferences:[1] Li, N., Liu, Y., Wu, Y., Liu, S., Zhao, S., & Liu, M. (2020). RobuTrans: A Robust Transformer-Based Text-to-Speech Model. Proceedings of the AAAI Conference on Artificial Intelligence, 34(05), 8228-8235.[2] Ren Y, Hu C, Tan X, et al. Fastspeech 2: Fast and high-quality end-to-end text to speech[J]. arXiv preprint arXiv:2006.04558, 2020.[3] Kong J, Kim J, Bae J. Hifi-gan: Generative adversarial networks for efficient and high fidelity speech synthesis[J]. Advances in Neural Information Processing Systems, 2020, 33: 17022-17033.[4] Devlin J, Chang M W, Lee K, et al. Bert: Pre-training of deep bidirectional transformers for language understanding[J]. arXiv preprint arXiv:1810.04805, 2018.

相关文章
|
21天前
|
自然语言处理
在ModelScope中,你可以通过设置模型的参数来控制输出的阈值
在ModelScope中,你可以通过设置模型的参数来控制输出的阈值
23 1
|
8天前
|
机器学习/深度学习 人工智能 Swift
PAI x ModelScope: 在PAI使用ModelScope模型
在当前的人工智能领域,特别是大语言模型、文生图等领域,基于预训练模型完成机器学习模型的开发部署已成为重要的应用范式,开发者们依赖于这些先进的开源预训练模型,以简化机器学习应用的开发并加速创新。
|
13天前
|
开发框架 API 决策智能
ModelScope-Agent框架再升级!新增一键配置多人聊天,配套开源多智能体数据集和训练
ModelScope-Agent是魔搭社区推出的适配开源大语言模型(LLM)的AI Agent(智能体)开发框架,借助ModelScope-Agent,所有开发者都可基于开源 LLM 搭建属于自己的智能体应用。在最新升级完Assistant API和Tool APIs之后,我们又迎来了多智能体聊天室的升级,通过几分钟快速配置即可搭建一个全新的聊天室。
|
21天前
|
机器学习/深度学习 测试技术 TensorFlow
ModelScope模型使用与EAS部署调用
本文以魔搭数据的模型为例,演示在DSW实例中如何快速调用模型,然后通过Python SDK将模型部署到阿里云PAI EAS服务,并演示使用EAS SDK实现对服务的快速调用,重点针对官方关于EAS模型上线后示例代码无法正常调通部分进行了补充。
|
21天前
|
机器学习/深度学习 数据采集 编解码
阿里云魔搭发起“ModelScope-Sora开源计划”
阿里云魔搭发起“ModelScope-Sora开源计划”
68 0
阿里云魔搭发起“ModelScope-Sora开源计划”
|
21天前
|
API 语音技术
ModelScope-FunASR**有支持热词又支持时间戳的模型**。
【2月更文挑战第30天】ModelScope-FunASR**有支持热词又支持时间戳的模型**。
51 2
|
21天前
|
人工智能 API 决策智能
Modelscope结合α-UMi:基于Modelscope的多模型协作Agent
基于单个开源小模型的工具调用Agent,由于模型容量和预训练能力获取的限制,无法在推理和规划、工具调用、回复生成等任务上同时获得比肩大模型等性能。
|
21天前
|
文字识别 并行计算 语音技术
ModelScope问题之下载模型文件报错如何解决
ModelScope模型报错是指在使用ModelScope平台进行模型训练或部署时遇到的错误和问题;本合集将收集ModelScope模型报错的常见情况和排查方法,帮助用户快速定位问题并采取有效措施。
339 3
|
21天前
|
数据采集 自然语言处理 搜索推荐
ModelScope问题之模型encoder配置报错如何解决
ModelScope模型报错是指在使用ModelScope平台进行模型训练或部署时遇到的错误和问题;本合集将收集ModelScope模型报错的常见情况和排查方法,帮助用户快速定位问题并采取有效措施。
103 0
|
21天前
|
人工智能 达摩院 自然语言处理
超好用的开源模型平台,ModelScope阿里达摩院
超好用的开源模型平台,ModelScope阿里达摩院
139 1