基于PaddleSpeech的中文语音合成方案

  • 中文语音合成方案:https://aistudio.baidu.com/aistudio/projectdetail/2791125?contributionType=1
  • PaddleSpeech源码:https://github.com/PaddlePaddle/PaddleSpeech

中文标准女声音库(10000句)

简介

语音合成是通过机械的、电子的方法产生人造语音的技术。TTS技术(又称文语转换技术)隶属于语音合成,它是将计算机自己产生的、或外部输入的文字信息转变为可以听得懂的、流利的口语输出的技术。

TTS语音合成技术是实现人机语音通信关键技术之一。使电脑具有类似于人一样的说话能力,是当今时代信息产业的重要竞争市场。和语音识别ASR相比,语音合成的技术相对来说要成熟一些,是应用范围较广的技术。

随着人工智能产业的飞速发展,语音合成系统也得到了更加广泛的应用。除了语音合成初期的清晰度、可懂度以外,人们对语音合成的自然度、节奏感以及音质的要求也越来越高。而语音库的质量也是决定语音合成效果的关键因素。

【中文标准女声音库】采集对象的音色风格知性阳光、亲切自然,专业标准普通话女声,听感乐观积极。录制环境为专业录音室和录音软件,录音环境和设备自始至终保持不变,录音环境的信噪比不低于35dB;单声道录音,用48KHz 16比特采样频率、pcm wav格式。录音语料涵盖各类新闻、小说、科技、娱乐、对话等领域,语料设计综合语料样本量,力求在有限的语料数据量内,对音节音子、类型、音调、音连以及韵律等尽可能全面的覆盖。根据合成语音标注标准对音库进行文本音字校对、韵律层级标注、语音文件边界切分标注。

技术参数

  • 数据内容:中文标准女声语音库数据
  • 录音语料:综合语料样本量;音节音子的数量、类型、音调、音连以及韵律等进行覆盖。
  • 有效时长:约12小时
  • 平均字数:16字
  • 语言类型:标准普通话
  • 发 音 人:女;20-30岁;声音积极知性
  • 录音环境:声音采集环境为专业录音棚环境:1)录音棚符合专业音库录制标准;2)录音环境和设备自始至终保持不变;3)录音环境的信噪比不低于35dB。
  • 录制工具:专业录音设备及录音软件
  • 采样格式:无压缩pcm wav格式,采样率为48KHz、16bit
  • 标注内容:音字校对、韵律标注、中文声韵母边界切分
  • 标注格式:文本标注为.txt格式文档;音节音素边界切分文件为.interval格式
  • 质量标准:1. 语音文件为48k 16bit wav格式,音色、音量、语速一致,无漂零无截幅;2.标注文件字准率不低于99.8%;3.音素边界错误大于10ms的比例小于1%;音节边界准确率大于98%.
  • 存储方式:FTP存储
  • 文件格式:音频文件:wav 文本标注文件:TXT 边界标注文件:INTERVAL
  • 版权所属者:标贝(北京)科技有限公司

语音合成模型梳理

微软亚洲研究院的研究员们通过调研了450余篇语音合成领域的文献,发表了迄今为止语音合成领域几乎最详尽的综述论文 “A Survey on Neural Speech Synthesis”。在文中,研究员们还整理收集了语音合成领域的相关资源如数据集、开源实现、演讲教程等,同时也对语音合成领域未来的研究方向进行了探讨和展望。希望本文能对相关工作的研究人员提供具有价值的参考。

论文链接:https://arxiv.org/pdf/2106.15561.pdf

论文从两个方面对神经语音合成领域的发展现状进行了梳理总结(逻辑框架如图1所示):

核心模块:分别从文本分析(textanalysis)、声学模型(acoustic model)、声码器(vocoder)、完全端到端模型(fully end-to-end model)等方面进行介绍。

进阶主题:分别从快速语音合成(fast TTS)、低资源语音合成(low-resourceTTS)、鲁棒语音合成(robust TTS)、富有表现力的语音合成(expressive TTS)、可适配语音合成(adaptive TTS)等方面进行介绍

TTS核心模块

研究员们根据神经语音合成系统的核心模块提出了一个分类体系。每个模块分别对应特定的数据转换流程:

1)文本分析模块将文本字符转换成音素或语言学特征;

2)声学模型将语言学特征、音素或字符序列转换成声学特征;

3)声码器将语言学特征或声学特征转换成语音波形;

4)完全端到端模型将字符或音素序列转换成语音波形。

图片:(a)TTS核心框架,(b)数据转换流程


文本分析

文章总结了文本分析模块几个常见的任务,包括文本归一化、分词、词性标注、韵律预测、字形转音形以及多音字消歧等。

声学模式

在声学模型部分,文章首先简要介绍了在统计参数合成里用到的基于神经网络的声学模型,然后重点介绍了端到端模型的神经声学模型,包括基于 RNN、CNN 和Transformer 的声学模型以及其它基于 Flow、GAN、VAE、Diffusion 的声学模型。

声码器

声码器的发展分为两个阶段,包括传统参数合成里的声码器如 STRAIGHT和 WORLD,以及基于神经网络的声码器。论文重点介绍了基于神经网络的声码器,并把相关工作分为以下几类,包括:

1)自回归声码器(WaveNet,SampleRNN,WaveRNN,LPCNet 等);

2)基于 Flow 的声码器(WaveGlow,FloWaveNet,WaveFlow,Par. WaveNet 等);

3)基于 GAN 的声码器(WaveGAN,GAN-TTS,MelGAN,Par. WaveGAN,HiFi-GAN,VocGAN,GED,Fre-GAN 等);

4)基于 VAE 的声码器(WaveVAE等);

5)基于 Diffusion 的声码器(DiffWave,WaveGrad,PriorGrad 等)。

完全端到端模型

端到端模型的发展经历了以下几个阶段:

阶段0:在统计参数合成方法中,使用文本分析、声学模型和声码器三个模块级联;

阶段1:在统计参数合成方法中,将前两个模块合起来形成一个声学模型;

阶段2:直接从语言学特征生成最终的波形,例如 WaveNet;

阶段3:声学模型直接从字符或音素生成声学模型,然后利用神经声码器生成波形;

阶段4:完全端到端的神经网络模型。

TTS模型分类

1)自回归 vs 非自回归;2)生成模型的类型;3)网络结构的类型。

模型演进

同时,本文还绘制了相关 TTS 工作随着时间变化的关系图,方便读者更直观地理解各个 TTS 模型及其在 TTS 发展中的位置。

TTS 进阶课题

研究员们还针对 TTS 面临的各种挑战,介绍了相关的进阶课题,包括快速语音合成(fast TTS)、低资源语音合成(low-resource TTS)、鲁棒语音合成(robust TTS)、富有表现力的语音合成(expressive TTS)、可适配语音合成(adaptive TTS)等。

加载模型

import tensorflow as tf

import yaml
import numpy as np
import matplotlib.pyplot as plt

import IPython.display as ipd

from tensorflow_tts.inference import AutoConfig
from tensorflow_tts.inference import TFAutoModel
from tensorflow_tts.inference import AutoProcessor

import soundfile as sf
from tqdm import tqdm

Tacotron2

Tacotron2是由Google Brain 2017年提出来的一个语音合成框架。

Tacotron2:一个完整神经网络语音合成方法。模型主要由三部分组成:

  • 声谱预测网络:一个引入注意力机制(attention)的基于循环的Seq2seq的特征预测网络,用于从输入的字符序列预测梅尔频谱的帧序列。
  • 声码器(vocoder):一个WaveNet的修订版,用预测的梅尔频谱帧序列来生成时域波形样本。
  • 中间连接层:使用低层次的声学表征-梅尔频率声谱图来衔接系统的两个部分。

tacotron2 = TFAutoModel.from_pretrained("tensorspeech/tts-tacotron2-baker-ch", name="tacotron2")

FastSpeech2

近年来,以 FastSpeech 为代表的非自回归语音合成(Text to Speech, TTS)模型相比传统的自回归模型(如 Tacotron 2)能极大提升合成速度,提升语音鲁棒性(减少重复吐词、漏词等问题)与可控性(控制速率和韵律),同时达到相匹配的语音合成质量。但是,FastSpeech 还面临以下几点问题:

FastSpeech 依赖 Teacher-Student 的知识蒸馏框架,训练流程比较复杂;
由于知识蒸馏,FastSpeech 的训练目标相比真实语音存在信息损失,同时从 Teacher 模型获得的时长(Duration)信息不够准确,两者都会影响合成语音质量。
为了解决上述问题,微软亚洲研究院和微软 Azure 语音团队联合浙江大学提出了FastSpeech 的改进版 FastSpeech 2,它抛弃了 Teacher-Student 知识蒸馏框架降低训练复杂度,直接用真实的语音数据作为训练目标避免信息损失,同时引入了更精确的时长信息和语音中的其它可变信息(包括音高(Pitch)和音量(Energy)等)来提高合成的语音质量。基于 FastSpeech 2,我们还提出了加强版 FastSpeech 2s 以支持完全端到端的从文本到语音波形的合成,省略了梅尔频谱的生成过程。实验结果表明,FastSpeech 2 和 2s 在语音质量方面优于 FastSpeech,同时大大简化了训练流程减少了训练时间,还加快了合成的速度。

FastSpeech 2 和 2s 的样例音频网址已经公开在:

https://speechresearch.github.io/fastspeech2/

论文公开在:https://arxiv.org/pdf/2006.04558.pdf

fastspeech2 = TFAutoModel.from_pretrained("tensorspeech/tts-fastspeech2-baker-ch", name="fastspeech2")

MB-MelGAN

多频带MelGAN将Parallel WaveGAN中的多尺度短时傅里叶变换损失(multi-resolution STFT loss)引入到MelGAN中,并且在音频的多个子带上分别度量损失。

代码地址:

kan-bayashi/ParallelWaveGAN

rishikksh20/melgan

第一步 安装Parakeet

!git clone https://github.com/PaddlePaddle/Parakeet
%cd Parakeet
!pip install -e .
!unzip Parakeet.zip
%cd Parakeet/
!pip install -e .

第二步 安装依赖

首先,查看下官方文档里的说明

Install libsndfile1

Make sure the library libsndfile1 is installed, e.g., on Ubuntu.

sudo apt-get install libsndfile1
以Ubuntu操作系统为例,一定要装有libsndfile1这个开源声音文件格式处理库,目前AI Studio已经内置了该处理库,无需额外安装。

Install PaddlePaddle

Install PaddlePaddle See install for more details. This repo requires PaddlePaddle 1.8.2 or above.

目前,Notebook环境支持到PaddlePaddle1.8.0,但经验证,在AI Studio的PaddlePaddle1.8.0环境WaveFlow可以正常训练。

Install Parakeet

git clone https://github.com/PaddlePaddle/Parakeet
cd Parakeet
pip install -e .

Install CMUdict for nltk

CMUdict from nltk is used to transform text into phonemes.

import nltk
nltk.download("punkt")
nltk.download("cmudict")

在Notebook环境都比较简单,照做就行。虽然nltk.download()会出现网络不通的报错,参考nltk.download()出错解决处理即可。本文已下载并解压相关文件,可直接使用。

In [ ]
%cd Parakeet
!pip install -e .

/home/aistudio/Parakeet

import nltk
nltk.download("punkt")
nltk.download("cmudict")
[nltk_data] Downloading package punkt to /home/aistudio/nltk_data...
[nltk_data]   Package punkt is already up-to-date!
[nltk_data] Downloading package cmudict to /home/aistudio/nltk_data...
[nltk_data]   Package cmudict is already up-to-date!

True
脚本任务环境
在脚本任务中,Parakeet和NLTK的安装会比较麻烦

Install libsndfile1
无需安装,下载输出的权重文件至本地预测即可。

Install PaddlePaddle
脚本任务支持PaddlePaddle1.8.2环境,无需安装。

!nvidia-smi
# import nltk
# nltk.download("punkt")
# nltk.download("cmudict")
!unzip nltk_data.zip

第三步:数据准备和预处理

标贝数据路径如下:

# %cd ../
!ls data/data117129/

# data/data117129/BZNSYP.zip

解压数据集,避免输出过多

!unzip data/data117129/BZNSYP.zip > /dev/null 2>&1

声调数据:https://paddlespeech.bj.bcebos.com/MFA/BZNSYP/with_tone/baker_alignment_tone.tar.gz

!tar -zxf baker_alignment_tone.tar.gz

这一步耗时比较长,差不多需要一个小时的时间

!sed -i 's/\r$//' ./preprocess.sh
!chmod +x ./preprocess.sh
!./preprocess.sh

生成预处理的数据集如下:

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

第四步 模型训练

使用 ./run.sh来完成训练任务

usage: train.py [-h] [--config CONFIG] [--train-metadata TRAIN_METADATA]
                [--dev-metadata DEV_METADATA] [--output-dir OUTPUT_DIR]
                [--device DEVICE] [--nprocs NPROCS] [--verbose VERBOSE]
                [--phones-dict PHONES_DICT] [--speaker-dict SPEAKER_DICT]

Train a FastSpeech2 model.

optional arguments:
  -h, --help            show this help message and exit
  --config CONFIG       fastspeech2 config file.
  --train-metadata TRAIN_METADATA
                        training data.
  --dev-metadata DEV_METADATA
                        dev data.
  --output-dir OUTPUT_DIR
                        output dir.
  --device DEVICE       device type to use.
  --nprocs NPROCS       number of processes.
  --verbose VERBOSE     verbose.
  --phones-dict PHONES_DICT
                        phone vocabulary file.
  --speaker-dict SPEAKER_DICT
                        speaker id map file for multiple speaker model.

# !sed -i 's/\r$//' ./run.sh
# !chmod +x ./run.sh
# !./run.sh

第五步 模型预测:“语音合成”

对测试集进行预测

usage: synthesize.py [-h] [--fastspeech2-config FASTSPEECH2_CONFIG]
                     [--fastspeech2-checkpoint FASTSPEECH2_CHECKPOINT]
                     [--fastspeech2-stat FASTSPEECH2_STAT]
                     [--pwg-config PWG_CONFIG]
                     [--pwg-checkpoint PWG_CHECKPOINT] [--pwg-stat PWG_STAT]
                     [--phones-dict PHONES_DICT] [--speaker-dict SPEAKER_DICT]
                     [--test-metadata TEST_METADATA] [--output-dir OUTPUT_DIR]
                     [--device DEVICE] [--verbose VERBOSE]

Synthesize with fastspeech2 & parallel wavegan.

optional arguments:
  -h, --help            show this help message and exit
  --fastspeech2-config FASTSPEECH2_CONFIG
                        fastspeech2 config file.
  --fastspeech2-checkpoint FASTSPEECH2_CHECKPOINT
                        fastspeech2 checkpoint to load.
  --fastspeech2-stat FASTSPEECH2_STAT
                        mean and standard deviation used to normalize
                        spectrogram when training fastspeech2.
  --pwg-config PWG_CONFIG
                        parallel wavegan config file.
  --pwg-checkpoint PWG_CHECKPOINT
                        parallel wavegan generator parameters to load.
  --pwg-stat PWG_STAT   mean and standard deviation used to normalize
                        spectrogram when training parallel wavegan.
  --phones-dict PHONES_DICT
                        phone vocabulary file.
  --speaker-dict SPEAKER_DICT
                        speaker id map file for multiple speaker model.
  --test-metadata TEST_METADATA
                        test metadata.
  --output-dir OUTPUT_DIR
                        output dir.
  --device DEVICE       device type to use.
  --verbose VERBOSE     verbose.

新网杯比赛数据集预测

  • 使用exp目录下的训练模型来预测结果
  • 直接使用官方提供预训练模型来预测

预测部分可以参考【Paddle打比赛】语音合成:https://aistudio.baidu.com/aistudio/projectdetail/2793102?channelType=0&channel=0

直接使用官方提供预训练模型来预测

FLAGS_allocator_strategy=naive_best_fit
FLAGS_fraction_of_gpu_memory_to_use=0.01
python3 synthesize_e2e.py
–fastspeech2-config=fastspeech2_nosil_baker_ckpt_0.4/default.yaml
–fastspeech2-checkpoint=fastspeech2_nosil_baker_ckpt_0.4/snapshot_iter_76000.pdz
–fastspeech2-stat=fastspeech2_nosil_baker_ckpt_0.4/speech_stats.npy
–pwg-config=pwg_baker_ckpt_0.4/pwg_default.yaml
–pwg-checkpoint=pwg_baker_ckpt_0.4/pwg_snapshot_iter_400000.pdz
–pwg-stat=pwg_baker_ckpt_0.4/pwg_stats.npy
–text=…/sentences.txt
–output-dir=exp/default/test_e2e
–device=“gpu”
–phones-dict=fastspeech2_nosil_baker_ckpt_0.4/phone_id_map.txt

%cd ~
/home/aistudio
!sed -i 's/\r$//' ./synthesize_e2e.sh
!chmod +x ./synthesize_e2e.sh
!./synthesize_e2e.sh

结果会存放在exp/default/test_e2e

我们可以看下效果

001 咀嚼着食物的味道,心里美滋滋的。
002 目前申请好人贷支持身份证原件实时拍摄或上传相册照片两种方式,但复印件及临时身份证是不可以的哟。
003 匈奴族首领单于只会骑马,不会骑单车。
004 上皓皓以临月,下淫淫而愁雨。
005 树前面插着铜牌,说明原由。此情此景,如不看铜牌的说明,绝对想不到巨树根底下还有一座宏伟的现代大楼。
006 敦煌莫高窟是世界文化史上的一个奇迹,它在继承汉晋艺术传统的基础上,形成了自己兼收并蓄的恢宏气度,展现出精美绝伦的艺术形式和博大精深的文化内涵。
007 也许相比之下,再也难以占据一席之地;你会较容易地获得从不悦中解脱灵魂的力量,使之不致变得灰色。
008 一个人若想改变眼前充满不幸或无法尽如人意的状况,只要回答一个简单的问题:“我希望状况变成什幺样?”然后全身心投入,采取行动,朝理想目标前进即可。
009 心理学家发现,绝大多数人买东西时,如果遇到许多不同品牌,他意中说,一定会选购见过广告的产品。
010 由于业务比较忙,不好意思,三天后收不到请再查件,请不要在晚上七点至十点查货,谢谢您对本小店的工作支持与配合,小二会感激万分!
011 夕阳落山不久,西方的天空,还燃烧着一片橘红色的晚霞。
012 掌柜外出发货,非常抱歉不能及时回复您的信息,您可以在小店先慢慢挑选,一定要等掌柜哦!掌柜回来马上回复!
013 您好,已经看到您支付成功了。我们会及时为您发货的,感谢您购买我们的商品,有需要请随时招呼我,
014 生命经过生死,便懂得了世事无常;缘分经过聚散,便沉淀了真情实意;爱情经过岁月,便领悟到情深缘浅。
015 很抱歉,由于您本人原因造成的逾期,由此产生的罚息需要您自行承担,无法减免。
016 在过去生,有些曾是我们的亲朋故友,有些则是我们的冤家仇敌。当彼此在今生再度相遇,这种烙印就会复苏,并驱使我们将往昔的爱恨情仇继续演绎下去。

import IPython
%cd /home/aistudio
IPython.display.Audio('exp/default/test_e2e/001.wav')
/home/aistudio
Your browser does not support the audio element.

import IPython
%cd /home/aistudio
IPython.display.Audio('exp/default/test_e2e/002.wav')
/home/aistudio
Logo

学大模型,用大模型上飞桨星河社区!每天8点V100G算力免费领!免费领取ERNIE 4.0 100w Token >>>

更多推荐