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技术、开发资源及社区动态定期推送。