语音合成技术(深度学习方法简介)
一、定义
语音合成(Text-To-Speech,简称 TTS),又称文语转换技术,是将文字信息转变为可以听得懂的、流利的语音输出的一种技术。
其与我们比较熟悉的语音识别技术(Automatic Speech Recognition,简称 ASR)目标相反。
ASR 是将声音转化为文字,类比于人类的耳朵;而 TTS 则是将文字转化为语音(朗读出来),类比于人类的嘴巴。
二、实现方法
实现 TTS,目前比较成熟的有两种方法:“拼接法”和“参数法”。
1. 拼接法
首先,要准备好大量的语音,这些音都是又基本的单位拼接成的(基本单位如音节、音素等),然后从已准备好的声音中,抽取出来合成目标声音。
优点:语音合成的质量比较高。
缺点:数据量要求很大,数据库里必须有足够全的“音”。一般需要几十个小时的成品语料。企业级商用的需要至少 5 万句,费用成本在几百万元。
2. 参数法(包含深度学习的方法)
根据统计模型来产生每时每刻的语音参数(包括基频、共振峰频率等),然后把这些参数转化为波形。主要分为 3 个模块:前端、后端和声码器。
优点:对数据的要求要小点。
缺点:质量比拼接法差一些。但是随着深度学习技术(Tacotron、WaveNet 等)的发展,参数法的质量也超过了拼接法,渐渐趋近于人类的音质水平。
三、模块介绍(非拼接方法介绍)
1. TTS 前端
TTS 前端的主要任务就是文本分析,根据输入的文字信息生成对应的语种、音素(或者音节)、韵律、情感信息。情感信息是提高语音合成效果情感丰富度的关键,普通 TTS 可以不预测情感标签。
主要分为 4 个步骤,文本结构分析、文本规范化、音素生成、韵律预测。情感 TTS 需要多一个步骤:情感分析。
a. 文本结构分析
需要分析输入的文本的语种信息,并为每个语种的句段加上标签,同时需要将文本进行分段、分句等,删除无意义的文本输入,方便后续步骤的处理。
b. 文本规范化(Text Normalization,简称 TN)
文本的输入常常带有简略词、日期、公式、号码等文本信息,我们需要通过文本规范化,对这些文本块进行处理以正确发音。同时这一步骤也需要删除无发音的字符,以及全角半角转化、简繁转化等。
文本规范化就是通过对上下文文本的分析,结合上下文环境,把输入文本中正常文本以外的非标准文本信息转化为对应文字的过程。
如:
“京东 618 买东西”中的“618”应该规范为“六一八”,而“东西是在京东 618 元买的”中的“618”则应该规范为“六百一十八”。
“2016-05-15”、“2016年5月15号”、“2016/05/15”也可以统一为一致的“2016年5月15号”。
文本规范化最常规的方法就是正则匹配替换,但是遇到复杂的没法从上下文的字眼中找到合理的匹配规则的话,则需要加入而外的词性,或者通过统计模型、机器学习、深度学习的方法提取语义信息进行判断。
c. 音素生成(字音转化,Grapheme-To-Phoneme,简称 G2P)
在语音合成中,中文的音素常常使用的是拼音,实际上会切分为声母和韵母,并且会调整删除 yw 声母、调整 [jqx] 后的 u、[zcs] 后的 i、”[zcs]h|r” 后的i和其他声母之后的 i 区分开来。英文则多使用的是 ARPAbet 符号集。
在多语种的语音合成中,有时我们也会将不同语种的音素再转化为不同语种之间有交叉集合的国际音标来实现声学模型不同语种之间的迁移。
拼音生成主要解决几个重点问题,多音字预测、多音词预测、三声连读变调、一不变调、儿化音预测、轻声预测等。
这些问题都有各自的解决方案,这些问题也和分词、词性、命名实体识别有着分不开的关系。
c1. 多音字预测,往往是词典、规则、模型等多方面进行优化。其中具有长时依赖的多音字,肯定需要的就是具有长时依赖的 LSTM 或者 Transformer 的模型来解决,预训练的语言模型也是可以拿来微调使用的。 c2. 多音词也属于多音字的范畴,但往往也需要拿一些特别的多音词进行单独的优化。 c3. 三声变调的实现,通过规则就可以解决。需要深入思考“小老虎”、“展览馆”这样的三声连读变调的区别在哪里。当然能否找到这个规则,以及能否用程序实现这个规则,都是一个考验,我就不多说了。 c4. 一不变调较为简单,规则实现。“一”一般在口语中会读出“yi1”、“yi2”、“yi4”、“yi5”几个拼音;而“不”则会读出“bu2”、“bu4”、“bu5”。其中“一”单念或用在词句末尾,或表示序数、基数等时,读原调阴平的特点还比较麻烦,可以列入多音字用模型来优化。 c5. 儿化音和轻声预测,也是需要通过词典、规则和模型来共同优化的。也不排除你的词典够大,无需模型来解决。
d. 韵律预测
韵律是语音合成节奏自然度的重要因素。什么地方需要停顿,停顿多久,哪个字或者词语需要重读,哪个词需要轻读等,才得以实现声音的高低曲折,抑扬顿挫。
不同时长的韵律停顿预测的实现方法可以和分词类比,看作是多种不同颗粒度的分词也不为过。参考分词的 BMES 等标注方式。而且不同停顿时长的韵律预测的预测还可以利用多任务学习一起优化,甚至和多音字的预测一起学习。
e. 情感分析
对于提升语音合成的情感丰富度,需要对每个句子做情感的分类。更精细的,可能还需要做到词汇级别,不过这个标注任务难度将是指数级提升。
情感分类任务,多分类模型解决,最大熵 Loss。
2. TTS 后端
TTS 后端的任务就是需要将 TTS 前端合成的语种、音素、韵律、情感标签等特征作为输入,多人模型还需要多输入一个 speaker 信息,通过模型学习的方式来实现从文本特征转化为对应音频的声学特征(mel 等)。
对应模型的设计,各个特征之间如何量化、融合,以及加入的时机都会影响合成的效果。顺便一说 Reference Encoder 或者是 GST(global style token)的出现,各个特征 classifier 的加入或者 id2embedding 引导的方式都大大提升了多说话人多语种多情感模型的效果。
因为文本和语音的特征,在时长上是不相等的。所以当前用于语音合成的深度学习模型分为两种,一种是以 Tacotron 为代表添加了注意力机制的 seq2seq 的自回归模型,另一种就是以 FastSpeech 为代表的通过预测每个音素时长,再进行扩展的前馈非自回归网络。
a. Tacotron
Tacotron 是第一个真正意义上端到端的语音合成系统,它输入合成文本或者注音串,输出线性谱,再经过 Griffin-Lim 转换为波形,一套系统完成语音合成的全部流程。
Tacotron2 主要的改进是简化了模型,去掉了复杂的 CBHG 结构,同时更新了 Attention 机制,提高了对齐稳定性,同时使用更为强大的 WaveNet 作为声码器。
另外,Blizzard Challenge 2019 结果出炉,Tacotron + Forward Attention,MOS 分 4.3 分有点出乎意料了,大大改善了 Tacotron 的稳定性。guided_attention_loss 也经常用来改进 Tacotron 的效果。
缺点:
a1. 合成语音的速度较慢:以自回归(Autoregressive)的方式生成梅尔谱(Mel-Spectrogram),再通过声码器(Vocoder)合成语音,而一段语音的梅尔谱通常能到几百上千帧,导致合成速度较慢; a2. 合成的语音稳定性较差:采用编码器-注意力-解码器(Encoder-Attention-Decoder)机制进行自回归生成,由于序列生成的错误传播(Error Propagation)以及注意力对齐不准,导致出现重复吐词或漏词现象; a3. 缺乏可控性:自回归的神经网络模型自动决定一条语音的生成长度,无法显式地控制生成语音的语速或者韵律停顿等。
b. FastSpeech
FastSpeech 采用一种新型的前馈 Transformer 网络架构,抛弃掉传统的编码器-注意力-解码器机制。同时使用长度调节器、音素持续时间预测器,通过每个音素的持续时间将音素序列平铺以匹配到梅尔谱序列的长度。这样子便可以实现不等长推理了。
FastSpeech 缺点:
b1. FastSpeech 依赖 Teacher-Student 的知识蒸馏框架,训练流程比较复杂; b2. 由于知识蒸馏,FastSpeech 的训练目标相比真实语音存在信息损失,同时从 Teacher 模型获得的时长(Duration)信息不够准确,两者都会影响合成语音质量。
为了解决 FastSpeech 的问题,FastSpeech2 直接用真实的语音数据作为训练目标避免信息损失,同时引入了更精确的时长信息和语音中的其它可变信息(包括音高(Pitch)和音量(Energy)等)来提高合成的语音质量。
FastSpeech2 其引入了时长预测器、音高预测器和能量预测器。在训练时,模型直接使用可变信息的真实值,与编码器的输出融合,作为解码器的输入,同时训练预测器使其拟合真实的可变信息。在推理阶段,模型使用预测器预测的可变信息。
3. 声码器
说为声码器,其实还是有多重任务需要完成。比如降噪、变调、变速、音量调节等。当然声码器最主要的还是将后端生成的声学特征转化为音频。
简单介绍几个声码器,统一用声学特征 mel 作为输入来说明,也可以使用 MFCC,或者多个特征一起输入,如 WORLD 中的 f0、sp、ap,或者 LPCNet 中的 BFCC、pitch、correlation。
a. Griffin-Lim
实现较为简单的声码器当然就是 Griffin-Lim(简称 GL),是在仅已知幅度谱、不知道相位谱的条件下重建语音的算法。
算法的实现极其简单。它是一个迭代算法,迭代过程如下:
a1. 先随机初始化一个相位谱; a2. 用相位谱和已知的幅度谱经过 ISTFT 合成新的语音波形; a3. 对合成的语音做 STFT,得到新的幅度谱和相位谱; a4. 丢弃新的幅度谱,用新的相位谱和已知的幅度谱合成新的语音,如此重复,直至合成的语音达到满意的效果。
b. WORLD
比较高效的非神经声码器当然是 WORLD 莫属了,WORLD 通过获取三个语音信号相关的参数信息来合成原始语音,这三个参数信息分别是:基频 F0、频谱包络 SP、非周期信号参数 AP。
WORLD 中提取 F0 的算法是 DIO、或者是 Harvest;之后将 F0 和波形一起作为输入提取 SP,用的 CheapTrick 方法;之后再讲 F0、SP 和波形一起输入提取 AP,用的是 D4C 算法。最终将三种声学特征通过合成算法输出恢复其原始波形信号。
具体的提取方法和合成方法这里就不细说了,参考:https://blog.csdn.net/qq_36002089/article/details/109630354 和 https://blog.csdn.net/qq_40168949/article/details/88577425
c. WaveNet
WaveNet 采用膨胀因果卷积,空洞卷积的作用自然就是扩大感受野,并用 ConvInUpsampleNetwork 将 mel 上采样到点的分辨率,在残差空洞卷积及门激励单元模块 ResidualConv1dGLU 中融合特征,并使用跳连接将每层结果相加作为模块的输出,之后再经过1×1卷积调整通道数,根据一个序列的前 t-1 个点预测第 t 个点的结果,将音频采样点进行µ律量化便可以用交叉熵损失做分类。
缺点:WaveNet 因其自回归特性,其生成速度十分缓慢,由于样本点是逐一生成,因此生成一秒的声音讯号可能就要花上数分钟的时间,使其在实际应用上受到限制。
此外,模型以之前生成的样本点作为输入来生成下一个样本点,因此当生成较差的样本点时,误差可能会不断累积下去,影响音质。
d. Parallel WaveGAN
Parallel WaveGAN 使用 GAN 的思想,使用 WaveNet 作为生成器,判别器判断生成的音频是否为真。
不同于 WaveNet,其使用高斯噪声作为输入,并没有使用因果卷积,模型在训练和推理过程中都是非自回归的,loss 使用多分辨率的stft loss,GAN 的 loss 则使用最小二乘 GAN(LSGAN)的 loss,在 GPU 上推理速度明显提高,且其也验证了 GAN 的使用对音质有提升效果。
e. WaveGlow
WaveGlow, 一种依靠流的从梅尔频谱图合成高质量语音的网络。流模型的工作提出,只要神经网络的是可逆的,就可以通过最大化训练数据的似然度来训练网络。
WaveGlow 结合了 Glow 和 WaveNet 的思想,以提供快速、高效和高质量的音频合成,而且不需要使用自回归。
WaveGlow 仅使用单个网络实现,用单个损失函数训练:最大化训练数据的似然度,这使得训练过程简单而稳定。
平均意见分数(MOS分)评估表明该方法能生成和最佳的WaveNet实现质量相当的结果。
f. WaveRNN
WaveRNN 使用上采样网络将 mel 采样到点分辨率,再通过 RNN 网络,逐点推出,当然也可以设计成一次推理多个点,但是总归还是一个自回归网络,也使用了µ律量化来做使模型从回归变成分类预测。
并且其在训练过程中对 GRU 网络的权重逐渐做了稀疏化,使得网络得以在 CPU 上快速推理。而且 RNN 结构的使用,使得其可以流式输出,提高了首包的输出效率。为了提高 WaveRNN 的稳定性,也可以添加 LPC 进行优化。
g. LPCNet
LPCNet 网络可以分解为两个子网络: Frame rate network 和 Sample rate network,外加一个计算 LPC 的模块。
网络的核心设计在 Sample rate network 部分,Frame rate network 主要为 Sample rate network 提供一个条件向量的输入,这个条件向量一帧计算一次,并在该帧时间内保持不变。
LPC 计算模块则从输入特征中计算线性预测参数 LPC,LPC 也是一帧计算一次,并在帧内保持不变。
其与 WaveRNN 最大的区别就是其估计的是真实点 s(t) 与 LPC 根据前几个点推出来点 p(t) 的差值 e(t)。训练过程中输入是 p(t)、s(t-1)、e(t-1),输出是 e(t)。
h. MelGAN
MelGAN 使用 GAN 的思想,但是并没有用噪声作为输入,而是直接输入 mel,生成器用反卷积做上采样,之后再使用多层残差块同时使用空洞卷积扩大感受野对特征进行整理,多次上采样的作用下,把通道数从 mel 的通道数降低到1,同时将帧长倍增为时间上的长度。
损失函数上,其采用了 Hinge loss 作为生成对抗网络的损失,生成器的另一损失函数为特征匹配损失。
MelGAN 在效率上提升显著,但是效果还是存在瑕疵,比较容易出现基频不稳定的问题,听起来不流畅。
i. HiFi-GAN
由于语音音频由具有不同周期的正弦信号组成,因此对周期模式进行建模对于生成真实的语音音频很重要。
因此,其提出了一种由多个小的子判别器组成的判别器,每个判别器只获得原始波形的特定周期部分。这种多周期判别器是其成功地合成真实语音音频模型的基础。
另外还有一个类似 MelGAN 中的多尺度判别器。HiFi-GAN 在 GAN 的 loss 上也选择最小二乘 GAN 的 loss。
最后其生成器的 loss 由多周期、多尺度的组成的特征匹配 loss 和 LSGAN 的 GAN loss 以及其加了一个生成波形求 mel 谱与真实 mel 之间的差别的 l1 loss 组成。
其效果确实明显优于 MelGAN,而且其 V3 在 CPU 上的合成速度比实时快 13.44 倍,在单个 V100 GPU 上的合成速度比实时快 1186 倍。
关于降噪、变调、变速、音量调节等,我们可以从合成的音频上进行调节,也可以从声学特征上进行调节再过声码器噢。
四、思考
为了实现高效率以及高音质两个效果,我们往往需要进行取舍,不同搭配。
同时,提高效率也可以通过切短一次合成的音频的时长来实现:
在 TTS 前端需要尽量切分为较短的文本片段,TTS 后端则需要将模型做成流式输出,解码器每推理一步都可以预先输出给声码器进行波形生成,只不过声码器多考虑多段波形之间的衔接问题而已。
最新评论