语音合成技术
一、定义
语音合成(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. 一不变调较为简单,规则实现。其中“一”还比较麻烦,可以列入多音字来优化。 c5. 儿化音和轻声预测,也是需要通过词典、规则和模型来共同优化的。也不排除你的词典够大,根本无需模型来解决。
d. 韵律预测
韵律是语音合成节奏自然度的重要因素。什么地方需要停顿,停顿多久,哪个字或者词语需要重读,哪个词需要轻读等,才得以实现声音的高低曲折,抑扬顿挫。
不同时长的韵律停顿预测的实现方法可以和分词类比,看作是多种不同颗粒度的分词也不为过。参考分词的BMES等标注方式。
e. 情感分析
对于提升语音合成的情感丰富度,需要对每个句子做情感的分类。更精细的,可能还需要做到词汇级别,不过这个标注任务难度将是指数级提升。
情感分类任务,多分类模型解决,最大熵Loss。
2. TTS后端
TTS后端的任务就是需要将TTS前端合成的语种、音素、韵律、情感标签等特征作为输入,多人模型还需要多输入一个speaker信息,通过模型学习的方式来实现从文本特征转化为对应音频的声学特征(mel等)。
对应模型的设计,各个特征之间如何量化、融合,以及加入的时机都会影响合成的效果。顺便一说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的稳定性。
缺点:
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. 声码器
说为声码器,其实还是有多重任务需要完成。比如降噪、变调、变速、音量调节等。当然声码器最主要的还是将后端生成的声学特征转化为音频。
简单介绍几个声码器:
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. WaveGlow
d. WaveRNN
e. LPCNet
f. WaveNet 和 Parallel WaveGAN
g. MelGAN
h. HiFi-GAN
关于降噪、变调、变速、音量调节等,我们可以从合成的音频上进行调节,也可以从声学特征上进行调节再过声码器噢。
四、思考
为了实现高效率以及高音质两个效果,我们往往需要进行取舍,不同搭配。
同时,提高效率也可以通过切短一次合成的音频的时长来实现,在TTS前端需要尽量切分为较短的文本片段,TTS后端则需要将模型做成流式输出,解码器每推理一步都可以预先输出给声码器进行波形生成,只不过声码器多考虑多段波形之间的衔接问题而已。
原文:https://www.cnblogs.com/jacen789/p/14260194.html