Tacotron2、GST、Glow-TTS、Flow-TTS…你都掌握了吗?一文总结语音合成必备经典模型(二)
机器之心 2022-12-11 12:31 发表于北京
以下文章来源于机器之心SOTA模型,作者机器之心SOTA模型
机器之心专栏
本专栏由机器之心SOTA!模型资源站出品,每周日于机器之心公众号持续更新。
本专栏将逐一盘点自然语言处理、计算机视觉等领域下的常见任务,并对在这些任务上取得过 SOTA 的经典模型逐一详解。前往 SOTA!模型资源站(sota.jiqizhixin.com)即可获取本文中包含的模型实现代码、预训练模型及 API 等资源。
本文将分 2 期进行连载,共介绍 19 个在语音合成任务上曾取得 SOTA 的经典模型。
- 第 1 期:BLSTM-RNN、WaveNet、SampleRNN、Char2Wav、Deep Voice、Parallel WaveNet、GAN、Tacotron、VoiceLoop
- 第 2 期:Tacotron2、GST、DeepVoice3、ClariNet、LPCNet、Transformer-TTS、Glow-TTS、Flow-TTS、cVAE+Flow+GAN、PnG BERT
您正在阅读的是其中的第 2 期。前往 SOTA!模型资源站(sota.jiqizhixin.com)即可获取本文中包含的模型实现代码、预训练模型及 API 等资源。
第1期回顾:BLSTM-RNN、Deep Voice、Tacotron…你都掌握了吗?一文总结语音合成必备经典模型(一)
本期收录模型速览
模型 | SOTA!模型资源站收录情况 | 模型来源论文 |
Tacotron2 | https://sota.jiqizhixin.com/project/tacotron-3 收录实现数量:23 支持框架:PyTorch、TensorFlow |
Natural TTS Synthesis by Conditioning WaveNet on Mel Spectrogram Predictions |
GST | https://sota.jiqizhixin.com/project/gst 收录实现数量:2 支持框架:PyTorch、TensorFlow |
Style Tokens: Unsupervised Style Modeling, Control and Transfer in End-to-End Speech Synthesis |
DeepVoice3 | https://sota.jiqizhixin.com/project/deepvoice3 收录实现数量:1 支持框架:PyTorch |
Deep Voice 3: Scaling text-to-speech with convolutional sequence learning |
ClariNet | https://sota.jiqizhixin.com/project/clarinet 收录实现数量:1 支持框架:PyTorch |
ClariNet Parallel Wave Generation in End-to-End Text-to-Speech |
LPCNet | https://sota.jiqizhixin.com/project/lpcnet 收录实现数量:1 支持框架:PyTorch |
LPCNET: IMPROVING NEURAL SPEECH SYNTHESIS THROUGH LINEAR PREDICTION |
Transformer-TTS | https://sota.jiqizhixin.com/project/transformer-tts-mel-waveglow 收录实现数量:1 支持框架:TensorFlow |
Neural Speech Synthesis with Transformer Network |
Glow-TTS | https://sota.jiqizhixin.com/project/glow-tts 收录实现数量:1 支持框架:PyTorch |
Glow-TTS:A Generative Flow for Text-to-Speech via Monotonic Alignment Search |
Flow-TTS | https://sota.jiqizhixin.com/project/flow-tts 收录实现数量:1 |
FLOW-TTS: A NON-AUTOREGRESSIVE NETWORK FOR TEXT TO SPEECH BASED ON FLOW |
VITS | https://sota.jiqizhixin.com/project/cvae-flow-gan 收录实现数量:2 支持框架:PyTorch |
Conditional variational Autoencoder with Adversarial Learning for End-to-End Text-to-Speech |
PnG BERT | https://sota.jiqizhixin.com/project/png-bert 收录实现数量:1 支持框架:PyTorch |
PnG BERT: Augmented BERT on Phonemes and Graphemes for Neural TTS |
语音合成(speech synthesis)是指通过机械的、电子的方法产生人造语音的技术,Text To Speech(TTS)将文本转化成拟人化的语音(输入为文本的语音合成),就是一种典型的也是最为我们熟知的语音合成任务。语音合成广泛适用于智能客服、有声阅读、新闻播报、人机交互等业务场景。语音合成和语音识别技术是实现人机语音通信、建立一个有听和讲能力的口语系统所必需的两项关键技术。使电脑具有类似于人一样的说话能力,是当今时代信息产业的重要竞争市场。和语音识别相比,语音合成的技术相对说来要成熟一些,并已开始向产业化方向成功迈进,大规模应用指日可待。像我们熟知的讯飞、火山引擎等就是语音合成技术产业化的典范。
传统的语音合成模型(也称为统计参数语音合成(Statistical Parametric Speech Synthesis)SPSS)包括三个处理步骤:前端处理——声学模型——声码器,其中,前端处理与声码器都有通用的一些方案,针对不同任务的改进点主要在声学模型部分。前端处理主要是指对文本进行分析,通常会对输入语音合成系统的文本进行预处理,比如转成音素序列,有时还会进行断句、韵律分析等,最终从文本中提取发声和韵律。声学模型主要是根据语言学特征生成声学特征。最后,声码器根据声学特征合成语音信号。建设这些模块需要大量的专业知识和复杂的工程实施,这将需要大量的时间和精力。另外,每个组成部分的错误组合可能会使模型难以训练。向传统的三阶段式语音合成模型中引入深度学习模型(DNN),可以学习从语言特征(输入)到声音特征(输出)的映射函数。基于DNN的声学模型为语言特征和声学特征之间的复杂依赖关系提供了有效的分布式表示。然而,基于前馈DNN的声学特征建模方法的一个局限性是,它忽略了语音的连续性。基于DNN的方法假定每一帧都是独立采样的,尽管语音数据中的连续帧之间存在着关联性。递归神经网络(RNN)提供了一种有效的方法来模拟语音相邻帧之间的相关性,因为它可以使用所有可用的输入特征来预测每一帧的输出特征。在此基础上,一些研究人员用RNN代替DNN来捕捉语音帧的长期依赖性,以提高合成语音的质量。
近年来,随着深度学习的兴起,模型精度有了突飞猛进的发展。其中,深度神经网络超强的特征学习能力大大简化了特征抽取的过程,降低了建模对于专家经验的依赖,建模流程逐步从之前复杂多步的流程转向了简单的端到端的建模流程,端到端的神经网络语音合成也成为产业化大规模应用的主流方法。端到端的模型可以看做是两个主要阶段:声学模型建模和神经声码器。其中,声学模型建模直接将输入的文本/音素序列转换为帧级语音特征,神经声码器将帧级语音特征转换为语音波形,神经声码器包括自回归模型和非自回归模型两类。端到端的方法在性能和部署推广遍历性方面都优于传统方法。
我们在这篇报告中总结了在经典语音合成方法和端到端语音合成方法中的深度学习TOP模型,既包括在前端处理中的应用,也包括聚焦于声学模型、声码器中应用的深度学习模型。
Tacotron2
Tacotron2与Tacotron的基本框架相似,主要进行了下述改变:
- Encoder:Tacotron2中使用3层包含512个5X1滤波器的卷积层和一个双向512单元的LSTM层,来代替Tacotron中的CBHG模块,简化了encoder模块。
- Tacotron2 使用location sensitive attention改进Tacotron中的attention机制,以有效减少漏音发生的概率,因为TTS中每次alignment的位置,应该是在上次alignment的附近,而不是从memory的所有单元中寻找。
- Tacotron2中增加了Stop Token,即增加了语音结束位置的预测损失,来判断decoder是否结束预测输出,以缓解语音合成过程中出现尾音的问题,同时有助于加快收敛。
- Post-net:Tacotron2使用5层卷积层来代替CBHG模块,预测一个残差,添加到预测中,以改善整体重建。每层由512个形状为5×1的滤波器组成,并进行批量归一化,然后在除最后一层之外的所有层上进行tanh激活。
- Vocoder:Tacotron2使用改进的WaveNet。使用一个10-component的逻辑分布混合物( mixture of logistic distributions ,MoL)来生成24kHz的16位样本。为了计算逻辑混合分布,WaveNet堆栈输出通过ReLU激活,然后通过线性投影来预测每个混合成分的参数(平均值、对数比例、混合权重)。损失被计算为ground-truth样本的负对数可能性。
图1. Tacotron2结构示意图
当前 SOTA!平台收录 Tacotron2 共 23 个模型实现资源。
项目 | SOTA!平台项目详情页 |
Tacotron2 | 前往SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/tacotron-3 |
GST
为了传达真实人的语音,TTS必须学会模拟韵律。韵律是语音中许多音素的融合,例如副语言信息,语调,重音和风格。GST是一个风格模型,其目的是为模型提供选择适合给定上下文的说话风格的能力。正确的样式渲染会影响整体感知力中的“情感韵律”,这对于诸如有声读物和新闻阅读器之类的应用而言非常重要。
“global style tokens”GST是指在最先进的端到端语音合成系统Tacotron中共同训练的嵌入库。在没有明确标签的情况下训练嵌入,就学会了大规模的声学表示( acoustic expressiveness)。GST生成的软解释的“标签”可用于控制合成,例如速度和说话风格的变化–与文本内容无关。它们还可以用于样式传递,在整个长格式文本语料库中复制单个音频片段的说话样式。在针对嘈杂的,未标记的发现数据进行训练时,GST会学习将噪声和说话人身份分解,从而为实现高度可扩展但功能强大的语音合成提供一条途径。
直观地,GST模型可以被认为是一种将参考嵌入到一组基础向量或软聚类(即样式标记)中分解的端到端方法,每个样式标记的贡献由注意力得分表示,但可以用任何所需的相似性度量代替。GST嵌入也可以看作是存储从训练数据中提取的样式信息的外部存储器。参考信号在训练时引导存储器写入,而在推理时引导存储器读取。
图2. 模型图。在训练过程中,训练目标的对数谱图被送入参考编码器,然后是风格标记层。由此产生的风格嵌入被用来调节Tacotron文本编码器的状态。在推理过程中,可以输入一个任意的参考信号来合成具有其说话风格的文本。另外,也可以去掉参考编码器,直接用学到的可解释标记控制合成
GST模型以Tacotron为基础,这是一个序列到序列(seq2seq)的模型,直接从字母或音素输入中预测旋律谱图。这些旋律谱图通过低资源反转算法或神经声码器(如WaveNet)转换为波形。对于Tacotron来说,声码器vocoder的选择并不影响prosody,它是由seq2seq模型来模拟的。
GST使用与Tacotron相同的架构和超参数。使用音素输入来加快训练速度,并稍微更改解码器,用两层256单元LSTM替换GRU单元,这些使用zoneout进行了正则化,概率为0.1。解码器一次输出两个帧的80通道logmel频谱图能量,这些能量通过输出线性频谱图的膨胀卷积网络运行。通过Griffin-Lim运行,以进行快速波形重建。用WaveNet声码器代替Griffin-Lim可以直接提高音频保真度。
参考编码器由卷积堆栈和RNN组成,它以对数梅尔图作为输入,首先传递到具有3×3内核、2×2步长、批量归一化和ReLU激活功能的6个二维卷积层的堆栈中。分别为6个卷积层使用32、32、64、64、128和128个输出通道。然后将生成的输出张量重塑为3维(保留输出时间分辨率),并馈送到单层128单位的单向GRU。最后的GRU状态用作参考嵌入,然后将其作为输入提供给style token层。style token层由一组style token embeddings 和注意力模块组成。为了匹配文本编码器的维数,每个token嵌入为256-D。相似的,文本编码器用tanh激活;在施加关注之前对GST进行tanh激活会导致更大的token多样性。基于内容的tanh注意力使用softmax激活来输出token上的一组组合权重。然后将所得的GSTs加权组合用于条件。作者对条件位点的不同组合进行了实验,发现复制样式嵌入并将其简单地添加到每个文本编码器状态的效果最佳。
当前 SOTA!平台收录 GST 共 2 个模型实现资源。
项目 | SOTA!平台项目详情页 |
GST | 前往SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/gst |
Deep Voice3
Deep Voice 3 是一个完全基于卷积注意力的神经文本-语音( neural TTS )系统。
图3. Deep Voice 3使用残差卷积层将文本编码为每个时间段的键和值向量,用于基于注意力的解码器。解码器使用这些来预测对应于输出音频的融规模对数幅度谱图。(浅蓝色的点状箭头描述了推理过程中的自回归过程)。然后,解码器的潜在状态被送入一个转换器网络,以预测用于波形合成的声码器参数
Deep Voice 3架构由三个部分组成。
- 编码器。一个全卷积的编码器,它将文本特征转换为内部的学习表示。
- 解码器。一个全卷积的因果解码器,它以自回归的方式将学习到的表征与多跳卷积注意力机制解码为低维的音频表征(融规模谱图)。
- 转换器:一个全卷积的后处理网络,它从解码器的潜在状态预测最终声码器参数(取决于声码器的选择)。与解码器不同,转换器是非因果性的,因此可以依赖未来的上下文信息。
要优化的总体目标函数是解码器和转换器的损失的线性组合。将解码器和转换器分开,并采用多任务训练,因为它使注意力学习在实践中更容易。具体来说,旋律谱图预测的损失指导注意力机制的训练,因为注意力的训练除了声码器参数预测外,还有来自旋律谱图预测的梯度。
文本预处理。
将输入文本中的所有字符大写,删除所有中间的标点符号,用句号或问号结束每一句话,用特殊的分隔符替换单词之间的空格,这些分隔符表示说话者在单词之间插入停顿的时间。使用四种不同的词分隔符,表示 (i) 语无伦次;(ii) 标准发音和空格字符;(iii) 单词之间的短暂停顿;(iv) 单词之间长时间的停顿。
字符和音素的联合表示。
模型可以直接将字符(包括标点和空格)转换为声学特征,从而学习一个隐式的字素-音素模型。除了字符模型外,还通过显式允许音素输入选项来训练纯音素模型和混合音素模型。除了编码器的输入层有时接收音素和音素重音嵌入而不是字符嵌入外,这些模型与纯字符模型完全相同。
纯音素模型需要一个预处理步骤来将单词转换为它们的音素表示(通过使用外部音素字典或单独训练的字素-音素模型)。字符和音素混合模型需要类似的预处理步骤,除了音素字典中没有的单词。这些词汇表外的单词以字符的形式输入,允许模型使用其隐式学习的字素到音素模型。在训练混合音素模型时,在每次训练迭代中,每个单词都以一定的概率替换其音素表示。
用于顺序处理的卷积块。
通过提供足够大的接收域,堆叠的卷积层可以利用序列中的长期上下文信息,而无需在计算中引入任何序列相关性。用图 17所示的卷积块作为主要的顺序处理单元来编码文本和音频的潜在表示。
图4. 卷积块由一个门控线性单元和一个残差连接的一维卷积组成。这里c表示输入的维度。大小为2-c的卷积输出被分割成同等大小的部分:门控向量和输入向量
编码器。
编码器网络(如图 16 所示)从嵌入层开始,它将字符或音素转换成可训练的向量表示为 he 。这些嵌入 he 首先通过一个全连接层从嵌入维度映射到目标维度。然后,提取随时间变化的文本信息。最后,它们被投影回嵌入维度,以创建注意力关键向量 hk 。注意值向量由注意力关键向量和文本嵌入计算,hv = √0.5— (he + he),综合考虑 he 中的本地信息和 hk 中的长期上下文信息。每个注意力块使用关键向量 hk 来计算注意力权重,而最终的上下文向量计算为值向量 hv 的加权平均值。
解码器。
解码器网络从多个全连接层开始,通过ReLU非线性对输入梅尔谱图进行预处理(图 1 6中表示为 PreNet )。接着是一系列因果卷积和注意力块。这些卷积块生成用于编码器潜在状态的查询。最后,一个全连接层输出下一组 r 个音频帧和一个二进制的 “最终帧” 预测(指示话语的最后一帧是否被合成)。Dropout 应用于除了第一个之外的每个全连接层之前的注意力块。使用输出梅尔谱图计算,二进制交叉熵损失使用最终帧预测计算。
注意力模块。
注意力机制使用来自编码器的查询向量(解码器的潜在状态)和每个时间步长的关键向量来计算注意力权重,然后输出作为值向量加权平均值计算的上下文向量。
图5. 将位置编码添加到键和查询向量中,其比率分别为ω_key和ω_query。强制单调性可以通过给对数添加一个大的负值的掩码来在推理中应用。使用两种可能的注意力方案之一:softmax或monotonic注意力。在训练过程中,丢弃注意力权重
转换器。
转换器网络以译码器最后一个潜在层的激活为输入,应用几个非因果卷积块,然后预测下游声码器的参数。与解码器不同,转换器是非因果和非自回归的,因此它可以使用解码器的未来上下文来预测其输出。转换网络的损耗函数取决于所使用的声码器的类型:(1)Griffin-Lim 声码器:Griffin-Lim 算法通过迭代估计未知相位将声谱图转换为时域音频波形。(2)WORLD 声码器:作为声码器参数,预测一个布尔值(当前帧是清音还是未清音)、一个 F0 值(如果帧是清音)、谱包络线和非周期性参数。使用交叉熵损失进行语音-非语音预测, L1 损失用于所有其他预测(见图19 )。(3)WaveNet 声码器:分别训练了一个 WaveNet 网络作为声码器,将梅尔尺度对数级谱图作为声码器参数。这些声码器参数作为外部调节器输入到网络。使用真实情况梅尔谱图和音频波形训练 WaveNet 网络。
图6. 用全连接(FC)层生成WORLD声码器参数
当前 SOTA!平台收录Deep Voice 3共 1 个模型实现资源。
项目 | SOTA!平台项目详情页 |
Deep Voice 3 | 前往SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/deepvoice3 |
ClariNet
ClariNet是一种全新的基于 WaveNet 的并行音频波形(raw audio waveform)生成模型。并行波形生成模型基于高斯逆自回归流(Gaussian inverse autoregressive flow),可以完全并行地生成一段语音所对应的原始音频波形。比起自回归的 WaveNet 模型,其合成速度提升了数千倍,可以达到实时的十倍以上。
对比 DeepMind 稍早提出的 Parallel WaveNet,ClariNet 中的概率分布蒸馏(probability density distillation)过程更加简单优美,直接闭式(closed-form)计算训练目标函数 KL 散度(KL divergence),大大简化了训练算法,并且使得蒸馏过程效率极高——通常 5 万次迭代后,就可以得到很好的结果。同时作者还提出了正则化 KL 散度的计算办法,大大提高了训练过程的数值稳定性,使得结果简单易训练(注:Clari 在拉丁语中是 clear, bright 的意思)。而 Parallel WaveNet 由于需要蒙特卡洛采样来近似 KL 散度,使得梯度估计的噪音很大,训练过程很不稳定,外界极难重现 DeepMind 的实验结果。
值得注意的是,ClariNet 还是语音合成领域第一个完全端到端的系统,可以通过单个神经网络,直接将文本转换为原始的音频波形。先前为业界所熟知的「端到端」语音合成系统(Tacotron),实际是先将文本转换为频谱(spectrogram),然后通过波形生成模型 WaveNet 或者 Griffin-Lim 算法,将频谱转换成原始波形输出。这种方法由于文本到频谱的模型和 WaveNet 是分别训练优化的,往往导致次优的结果。而 ClariNet则是完全打通了从文本到原始音频波形的端到端训练,实现了对整个 TTS 系统的联合优化,比起分别训练的模型,在语音合成的自然度上有大幅提升。另外,ClariNet 是全卷积模型,训练速度比起基于循环神经网络(RNN)的模型要快 10 倍以上。
图7 (a) 文本到波形模型将文本特征转换为波形。所有的组件都直接将它们的潜在表示反馈给其他组件。(b) Bridge-net通过几个卷积块和转置的卷积层与软信号非线性交错,将帧级潜在表示映射到样本级。(c) 卷积块是基于门控线性单元的
ClariNet 的网络结构如图7所示。它使用基于注意力机制(Attention)的编码器-解码器(Encoder-Decoder)模块来学习文本字符与频谱帧之间的对齐关系。将解码器的潜在状态(hidden states)输入Bridge-net 来进行时序信息处理和上采样(upsample)。将 Bridge-net 的潜在状态输入音频波形生成模块(Vocoder),以最终合成原始音频波形。
- 编码器。如同Deep Voice 3中的卷积编码器,它将文本特征编码为内部的潜在表示。
- 解码器。Deep Voice 3中的因果卷积解码器,以自回归的方式将编码器的表征与注意力解码到对数梅尔谱图中。
- 桥网。一个卷积中间处理块,它处理来自解码器的潜在表示并预测对数线性谱图。与解码器不同,它是非因果的,因此可以利用未来的背景信息。此外,它对潜在表示从帧级到样本级进行上采样。
- 声码器。一个高斯自回归波浪网来合成波形,它以桥网的上采样潜在表示为条件。这个组件可以被一个从自回归声码器中提炼出来的学生IAF( inverse autoregressive flow )取代。
当前 SOTA!平台收录 ClariNet共 1 个模型实现资源。
项目 | SOTA!平台项目详情页 |
ClariNet | 前往SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/clarinet |