Tacotron2、GST、Glow-TTS、Flow-TTS…你都掌握了吗?一文总结语音合成必备经典模型(二)
机器之心专栏
本专栏由机器之心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 |
传统的语音合成模型(也称为统计参数语音合成(Statistical Parametric Speech Synthesis)SPSS)包括三个处理步骤:前端处理——声学模型——声码器,其中,前端处理与声码器都有通用的一些方案,针对不同任务的改进点主要在声学模型部分。前端处理主要是指对文本进行分析,通常会对输入语音合成系统的文本进行预处理,比如转成音素序列,有时还会进行断句、韵律分析等,最终从文本中提取发声和韵律。声学模型主要是根据语言学特征生成声学特征。最后,声码器根据声学特征合成语音信号。建设这些模块需要大量的专业知识和复杂的工程实施,这将需要大量的时间和精力。另外,每个组成部分的错误组合可能会使模型难以训练。向传统的三阶段式语音合成模型中引入深度学习模型(DNN),可以学习从语言特征(输入)到声音特征(输出)的映射函数。基于DNN的声学模型为语言特征和声学特征之间的复杂依赖关系提供了有效的分布式表示。然而,基于前馈DNN的声学特征建模方法的一个局限性是,它忽略了语音的连续性。基于DNN的方法假定每一帧都是独立采样的,尽管语音数据中的连续帧之间存在着关联性。递归神经网络(RNN)提供了一种有效的方法来模拟语音相邻帧之间的相关性,因为它可以使用所有可用的输入特征来预测每一帧的输出特征。在此基础上,一些研究人员用RNN代替DNN来捕捉语音帧的长期依赖性,以提高合成语音的质量。
近年来,随着深度学习的兴起,模型精度有了突飞猛进的发展。其中,深度神经网络超强的特征学习能力大大简化了特征抽取的过程,降低了建模对于专家经验的依赖,建模流程逐步从之前复杂多步的流程转向了简单的端到端的建模流程,端到端的神经网络语音合成也成为产业化大规模应用的主流方法。端到端的模型可以看做是两个主要阶段:声学模型建模和神经声码器。其中,声学模型建模直接将输入的文本/音素序列转换为帧级语音特征,神经声码器将帧级语音特征转换为语音波形,神经声码器包括自回归模型和非自回归模型两类。端到端的方法在性能和部署推广遍历性方面都优于传统方法。
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样本的负对数可能性。
项目 | 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所示的卷积块作为主要的顺序处理单元来编码文本和音频的潜在表示。
编码器。
编码器网络(如图 16 所示)从嵌入层开始,它将字符或音素转换成可训练的向量表示为 he 。这些嵌入 he 首先通过一个全连接层从嵌入维度映射到目标维度。然后,提取随时间变化的文本信息。最后,它们被投影回嵌入维度,以创建注意力关键向量 hk 。注意值向量由注意力关键向量和文本嵌入计算,hv = √0.5— (he + he),综合考虑 he 中的本地信息和 hk 中的长期上下文信息。每个注意力块使用关键向量 hk 来计算注意力权重,而最终的上下文向量计算为值向量 hv 的加权平均值。
解码器。
解码器网络从多个全连接层开始,通过ReLU非线性对输入梅尔谱图进行预处理(图 1 6中表示为 PreNet )。接着是一系列因果卷积和注意力块。这些卷积块生成用于编码器潜在状态的查询。最后,一个全连接层输出下一组 r 个音频帧和一个二进制的 “最终帧” 预测(指示话语的最后一帧是否被合成)。Dropout 应用于除了第一个之外的每个全连接层之前的注意力块。使用输出梅尔谱图计算,二进制交叉熵损失使用最终帧预测计算。
注意力模块。
注意力机制使用来自编码器的查询向量(解码器的潜在状态)和每个时间步长的关键向量来计算注意力权重,然后输出作为值向量加权平均值计算的上下文向量。
转换器。
转换器网络以译码器最后一个潜在层的激活为输入,应用几个非因果卷积块,然后预测下游声码器的参数。与解码器不同,转换器是非因果和非自回归的,因此它可以使用解码器的未来上下文来预测其输出。转换网络的损耗函数取决于所使用的声码器的类型:(1)Griffin-Lim 声码器:Griffin-Lim 算法通过迭代估计未知相位将声谱图转换为时域音频波形。(2)WORLD 声码器:作为声码器参数,预测一个布尔值(当前帧是清音还是未清音)、一个 F0 值(如果帧是清音)、谱包络线和非周期性参数。使用交叉熵损失进行语音-非语音预测, L1 损失用于所有其他预测(见图19 )。(3)WaveNet 声码器:分别训练了一个 WaveNet 网络作为声码器,将梅尔尺度对数级谱图作为声码器参数。这些声码器参数作为外部调节器输入到网络。使用真实情况梅尔谱图和音频波形训练 WaveNet 网络。
当前 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 |
LPCNet
LPCNet 一个将数字信号处理(DSP) 和神经网络(NN)结合应用于语音合成中 vocoder 的工作,可以在普通的CPU上实时合成高质量语音。
图8. LPCNet算法概述。网络的左边部分(黄色)每帧计算一次,其结果在整个帧中对右边的采样率网络(蓝色)保持不变。计算预测块根据以前的样本和线性预测系数,预测时间t的样本。为了清楚起见,省略了µ-law和线性之间的转换
LPCNet核心设计在图8中右侧的Sample rate network 部分。Frame rate network 主要为 Sample rate network 提供一个条件向量的输入,这个条件向量一帧计算一次,并在该帧时间内保持不变。LPC 计算模块则从输入特征中计算线性预测参数 LPC,LPC 也是一帧计算一次,并在帧内保持不变。
LPCNet分为两部分,一是每帧计算一次的特征计算部分,二是每个采样点都要计算的采样部分。特征计算部分的输入就是BFCC和二维pitch信息,输出为帧特征。采样部分的输入是特征计算部分的输出和用LPC计算的当前采样点的线性部分,还有上一个采样点以及上一个采样点的采样网络输出(非线性部分),输出就是当前点的非线性部分。最后只要将LPC计算的值和采样网络输出的值加起来就是LPCNet最后的输出。
如图8,整个系统由帧级别的 frame rate network(黄色部分)和采样点级别的 sampling rate network(浅蓝色部分)组成。frame rate network 每一帧计算一次,其中使用了 2 层 1*3 的一维卷积,因此该网络的感受视野为 5 帧。sampling rate network 是每一帧计算 160 次(如使用16khz的音频,10ms帧移),该部分为 autoregressive 模型,每一个激励 e 的推测都需要前一个推测 e 作为条件。
项目 | SOTA!平台项目详情页 |
---|---|
LPCNet | 前往SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/lpcnet |
Transformer -TTS
把Transformer和Tacotron2融合,就形成了Transformer-TTS。模型的主体是原始的Transformer,只是在输入阶段和输出阶段为了配合语音数据的特性做了改变。首先是Encoder的输入阶段,先将text逐字符转化为token,方便Embedding,然后进入Encoder PreNet,这层网络由一个Embedding layer和三层卷积层构成,转化为512维的向量后,进入Transformer Encoder。其次是Transformer的Decoder部分,分为输入和输出。输入通过一个PreNet将80维的梅尔声谱图转化为512维向量,这里的PreNet是一个三层的全连接网络。输出部分与Tacotron2的设计完全一致。基于Transformer的TTS模型已是现在主流的End-to-End TTS系统的baseline,它的实现必不可少,而且因为Transformer本身优异的结构,也能大大加快实验的速度。
图9. Transformer-TTS 系统架构
当前 SOTA!平台收录 Transformer-TTS 共 1 个模型实现资源。
项目 | SOTA!平台项目详情页 |
---|---|
Transformer-TTS | 前往SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/transformer-tts-mel-waveglow |
Glow-TTS
Glow-TTS是一个不需要任何外部对齐处理的基于流的并行TTS生成模型。GLow-TTS引入了一种用于内部对齐的单调对齐搜索(Monotonic Alignment Search,MAS)方法。MAS利用流的特性,搜索文本和语音的潜在表示之间最可能的单调对齐。
图10. Glow-TTS的训练和推理程序
通常,用流来做条件概率密度估计的处理方法都是将给定条件先合并到流中,然后将数据映射到已知的条件流中。而Glow的做法不同,Glow-TTS是将条件信息合并到流的统计信息中去(如高斯分布的均值及标准差),而不是直接合并到流中。具体的,音频信息-梅尔谱特征通过解码器网络fdec生成潜在变量z,z服从高斯分布Pz;文本信息c通过编码器网络fenc生成潜在变量h,然后h通过网络生成高斯分布的均值u和标准差theta。此时,每帧的音频特征都映射成了某个特定的高斯分布,每个字符也都映射成了相应的高斯分布。
接下来的工作就是寻找两类分布的映射矩阵A,即对齐矩阵。作者定义,当音频帧j对应的潜在变量z_j服从某个字符i对应的高斯分布时,就认为该音频帧与这个字符对应,即N(z_j;u_i,theta_i),也就是A(j)=i。在知道了对齐矩阵A的情况下,可以利用如下公式计算似然概率:
下一步求解最大似然概率。作者用EM算法的思想,直接求取最大似然的下界。这样,最大似然计算就被简化成了两步计算,(1)在固定网络参数theta时,求解上述公式;(2)在固定求得的对齐矩阵A下,求取参数theta。
为了计算A,作者提出了单调对齐搜索算法MAS,如图24所示,MAS其实就是一个动态规划算法。即先计算所有的对齐概率,然后寻找一条最大概率搜索路径。由于训练时是有对应的文本和音频特征的,所以可以直接通过求解对齐矩阵A计算每个输入的字符应该对应哪些音频帧,但是在推理时是没有音频信息的,也就没法反算A。所以需要一个字符对应音频特征帧数预测网络来预测每个字符对应的音频帧数,然后得到A,有了A,有了学习得到的网络参数theta,就可以计算输出了。
图11.单调对齐搜索示例
图12.编码器(上)和解码器(下)示例
最后,图12给出Glow-TTS的结构。在Glow-TTS中,解码器是由一系列可以并行进行正向和反向转换的流程组成的,具体包括仿生耦合层、可逆1x1卷积和激活归一化。解码器则是一个由多个块组成的堆栈,每个块由激活归一化、可逆1x1卷积和仿生耦合层组成。解码器部分遵循了Transformer TTS的编码器结构,并做了两个轻微的修改:去掉了位置编码,将相对位置表示加入到自注意力模块中;在编码器预网中加入了残差连接。为了估计先验分布的统计数据,只是在编码器的末端添加了一个线性层。持续时间预测器由两个卷积层组成:ReLU激活、层规范化和Dropout,然后是一个投影层。
当前 SOTA!平台收录 Glow-TTS 共 1 个模型实现资源。
项目 | SOTA!平台项目详情页 |
---|---|
Glow-TTS | 前往SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/glow-tts |
Flow-TTS
Flow-TTS是一个基于生成流(generative flow)的non-autoregressive端到端神经TTS模型。与其他non-autoregressive模型不同,Flow-TTS可以通过使用单一的前馈网络实现高质量的语音生成。Flow-TTS是第一个在频谱生成网络中使用流的TTS模型,也是第一个通过单一网络联合学习对齐和频谱生成的non-autoregressive模型。
图13 整体模型架构。(a) Flow-TTS;(b) 流程步骤;(c) 耦合块
Flow-TTS是基于生成流(Glow)的。Flow-TTS的整体架构如图13(a)所示。它由一个编码器、一个解码器、一个长度预测器和一个位置注意力层组成。
Encoder。
编码器首先将文本符号转换为可训练的嵌入,然后是一系列卷积块,每个卷积块由一个一维卷积层、一个ReLU激活、一个批处理规范化和一个dropout层组成。在编码器的末端增加了一个LSTM层来提取长距离的文本信息。鉴于文本长度远短于输出谱图的长度,LSTM层不会影响推理速度和平行谱图的生成,同时大大加快了模型的收敛速度。
Length Predictor。
长度预测器用于预测输出谱图序列的长度。然而,Flow-TTS是平行地预测所有的输出帧。因此,必须提前预测输出长度。Flow-TTS的长度预测器由2层一维卷积网络组成,每层后面都有归一化层和dropout层。在长度预测器的末端添加了一个累积层,将所有的符号持续时间累积到最终长度。用对数域预测长度,以获得更稳定的训练损失。请注意,长度预测器是堆叠在编码器之后的,与模型的其他部分共同训练。
Positional Attention。
位置注意力层是学习输入文本序列和输出谱图序列之间对齐的关键模块。它采用多头点积注意力机制,将编码器的输出潜在状态作为关键向量和值向量,并将谱图长度的位置编码作为查询向量。谱图的长度在训练时取自ground-truth谱图,在推理时由长度预测器进行预测。
Decoder。
解码器遵循Glow的架构,它由一系列的流程步骤和多尺度架构组成。每一步流程由两个可逆变换层、一个可逆1 x 1卷积层和一个仿生耦合层组成。
仿生耦合层。仿生Affine耦合层是一个强大的可逆变换,其中正向函数和反向函数的计算效率都很高,还有对数决定式:
这里的split()和concat()函数是将输入的张量分成两半,并将输出的张量沿通道维度串联起来。NN()可以是任何非线性变换,对可逆性没有限制。
可反转的1x1卷积层。为了改变通道的顺序,在仿生耦合层之前插入了一个1×1的可反卷积层。将权重矩阵初始化为一个随机的正态矩阵,其对数决定数为0,对数决定数在一个训练步骤后将从0发散。
多尺度结构。多尺度结构已被证明有助于训练深层次的流动步骤。在Flow-TTS的实现中,每个尺度是4个流动步骤的组合。在每个尺度之后,张量的几个通道将从流程步骤中删除,并在模型通过所有流程步骤后串联在一起。
耦合块。耦合块(在图26(c)中)与上面的NN()转换一样。耦合块从一个核大小为1的一维卷积层开始,然后是一个修改过的门控tanh单元(GTU)层:
在GTU层上添加一个残差连接,以适应深层网络。在最后添加一个核大小为1的一维卷积层,以匹配通道尺寸。最后一个卷积层的权重被初始化为零,这确保了每个仿生耦合层最初执行一个identity function。
当前 SOTA!平台收录 Flow-TTS 共 1 个模型实现资源。
项目 | SOTA!平台项目详情页 |
---|---|
Flow-TTS | 前往SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/flow-tts |
VITS
VITS是一个完全并行化的语音合成模型,与两阶段模型相比可以生成更加自然的合成语音。模型采用基于标准化流模型 (normalizing flows) 的变分推理 (variational inference) 策略和对抗学习策略来提升生成模型的表现力。还提出随机时长预测模块来提升合成语音的韵律多样性。利用变分推理潜在变量和随机时长预测模块的不确定性建模,VITS可以很好的处理语音合成中的一对多问题,从而可以为给定文本生成具有多种多样基频和韵律表现的合成语音。
图14. 系统图描述了(a)训练程序和(b)推理程序。VITS可被看作是一个条件性VAE;一个后置编码器、解码器和条件性先验(绿色块:一个归一化流、线性投影层和文本编码器)与一个基于流的随机持续时间预测器
如图14所示,VITS包括:条件VAE基于条件推理的对齐估计以及对抗训练。模型整体结构包括:后验编码器(posterior encoder)、先验编码器(prior encoder)、解码器、随机时长预测器。其中,后验编码器和鉴别器仅用于模型训练阶段,模型推理阶段不使用。
Posterior encoder: 在训练时后验编码器以线性谱为输入,输出潜在变量z。推理阶段潜在变量z则由流模型产生。VITS的后验编码器采用WaveGlow和Glow-TTS中的非因果WaveNet残差模块。应用于多人模型时,可以将说话人向量添加到残差模块中。
Prior encoder: 先验编码器包括文本编码器和提升先验分布多样性的标准化流。文本编码器为基于相对位置编码的transformer编码器。将线性层添加到文本编码器的最后一层来生成构建先验分布的均值和方差。标准化流模块包含若干WaveNet的残差块。应用于多人模型时,可以向标准化流的残差模块添加说话人向量。
Decoder: 解码器的结构与HiFi-GAN V1的生成器结构相同,应用于多人模型时,将说话人向量线性变换后与潜在变量z拼接在一起。
Discriminator: 鉴别器的结构与HiFI-GAN中的多周期鉴别器结构相同。
Stochastic duration predictor: 随机时长预测器以文本音素表示的潜在状态htext为条件输入,估计音素的时长分布。应用于多人模型时,将说话人向量线性变换后与潜在状态htext拼接在一起。随机时长预测器的结构和训练及推理程序具体如图28、29所示。
图15. 框图描述了(a)随机时长预测器的训练程序和(b)推理程序。随机时长预测器的主要构件是(c)扩张和深度可分离的卷积残差块
图16. 随机时长预测器中使用的(a)条件编码器和(b)耦合层的结构
当前 SOTA!平台收录 VITS 共 2 个模型实现资源。
项目 | SOTA!平台项目详情页 |
---|---|
VITS | 前往SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/cvae-flow-gan |
PnG BERT
PnG BERT是一种将音素和字符作为输入的BERT模型,主要用作声学模型的编码器。PnG BERT可以在语料上进行预训练,然后在TTS模型上进行微调。PnG BERT在原有的BERT基础上,将文本的音素(phoneme)、字素(grapheme)以及词级别的对齐作为输入,在大量文本语料上以自监督模式预训练,并在TTS任务上微调。
图17. 用于神经TTS的PnG BERT的预训练和微调。音素显示为黄色,字形显示为粉红色
输入表征。
PnG BERT包含两段,第一段是音素序列,IPA音素作为token;第二段是词面序列,将子词作为token。类似于BERT添加[CLS]和[SEP]标识,所有的token共享嵌入表,预训练目标仅有MLM。除了BERT原始的token、segment、position嵌入,还有第四个word-position嵌入,提供词级别的音素和词面对齐。
预训练。
自监督模式,音素利用一个外部工具获得,词面可以用Word-Piece、SentencePiece或者BPE切分获得,MLM目标仅在预训练阶段使用。PnG BERT采用的掩码策略是在词层面进行随机掩码,同时掩蔽一个词的词面和对应的音素序列。12%的单词会被替换为<MSK>,1.5%替换为随机的,1.5%保持不变,MLM只会针对这15%的单词进行计算。
微调。
图17(b)给出了PnG BERT 微调的过程。使用PnG BERT替换NAT的编码器,仅微调PnG BERT高层网络权重,防止因为小的TTS训练集造成微调时的过拟合,提高最终TTS模型的泛化能力。因为多注意力全局视野的特性,PnG BERT能从文本和音素获取信息。微调阶段不使用MLM。
当前 SOTA!平台收录 PnG BERT 共 1个模型实现资源。
项目 | SOTA!平台项目详情页 |
---|---|
PnG BERT | 前往SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/png-bert |
前往 SOTA!模型资源站(sota.jiqizhixin.com)即可获取本文中包含的模型实现代码、预训练模型及API等资源。
网页端访问:在浏览器地址栏输入新版站点地址 sota.jiqizhixin.com ,即可前往「SOTA!模型」平台,查看关注的模型是否有新资源收录。
移动端访问:在微信移动端中搜索服务号名称「机器之心SOTA模型」或 ID 「sotaai」,关注 SOTA!模型服务号,即可通过服务号底部菜单栏使用平台功能,更有最新AI技术、开发资源及社区动态定期推送。
微信扫码关注该文公众号作者