《Flowtron: an Autoregressive Flow-based Generative Network for Text-to-Speech Synthesis》论文阅读

在这里插入图片描述

Abstract

在这篇论文中提出了Flowtron:一个基于流的自回归生成网络,可以控制语音合成中的语音变化和风格迁移。 Flowtron 借鉴了IAF, 并对Tacotron 进行改造,提供了更高质量和表现力丰富的mel谱合成。 Flowtron 通过优化训练数据的最大似然估计,使得训练过程更简单,更稳定。 Flowtron 学习数据到潜空间之间的可逆变换, 该空间能够控制语音合成的各个方面, 如音高,语调, 语速,口音,节奏等。 MOS显示Flowtron能够达到当前语音合成的最新质量。 而且, 我们还展示了对语音变化的控制, 样本差值和说话人之间的说话风格迁移。

Introduction

目前大多数的语音合成的过程只提供text information而忽略声学属性, 这导致文本到语音的转换并不像真实语音那样富有含义和表现力。 但是把这些non-textual information加入到语音合成的训练中也是很困难的, 因为我们无法对这些信息进行标注, 因此只能进行无监督学习。 目前虽然有些模型能够几乎达到人类水平的质量, 但是这些模型将non-textual information 作为一个黑匣子, 使用者无法洞察或控制这些信息。

以这样一种方式来描述无监督学习问题是可能的,即用户可以获得对数据集的结构的洞察。 一种方法是将问题描述为假设数据在某个潜在空间中具有表示,并让模型学习该表示。然后可以对这个潜在的空间进行调查和操纵,以使用户能够更好地控制生成模型的输出。 该方法在图像生成中使用较多。 在语音领域, 这些方法主要集中在embedding上面, 如何将从假设中获取的大量无用信息给去除掉。 如结合文本和潜变量来控制韵律或全局的风格, 将混合高斯模型(GMM)加入到Tacotron中来学习潜变量。然而,这些方法需要对嵌入的维度进行假设,并且不能保证包含重建语音所需的所有非文本信息,包括具有虚拟维度或容量不足的风险。同时需要一个编码器和embedding来防止模型只是简单地学习复杂的函数而忽略了其他的输入。并且这些潜变量都是定长的, 而且用户也无法控制语音合成的不同角度。

在这篇论文中提出了Flowtron:一个基于流的自回归生成网络,可以控制语音合成中的语音变化和风格迁移。 Flowtron通过一个球面高斯函数来学习mel谱分布到潜空间z之间的可逆映射关系。通过这种形式化,我们可以通过在z-空间中找到并采样相应的区域来生成包含特定语音特征的样本。在基本方法中,我们通过采样一个零均值的球面高斯先验来生成样本,并通过调整其方差来控制变化量。尽管它很简单,但这种方法比Tacotron提供了更多的语音变化和控制。

在Flowtron中, 我们可以通过对后验概率进行采样来获取mel 谱的特定区域。这种方法允许我们通过计算z空间中与表达性语音相关的区域,使单调的说话人更具表达性。mel谱图空间中的语音特征可以与单个分量相关联。因此,可以通过选择分量或其混合物来生成具有特定语音特征的样本。

我们发现Flowtron能够通过最大化数据的似然估计来产生质量好的mel谱, 而不需要Prenet 或者 Postnet, 也不需要复合的损失函数。 Flowtron 通过优化训练数据的最大似然估计,使得模型的训练更加简单和稳定。

Related work

之前的工作集中在从文本中生成声学特征, 将非文本信息作为一个黑盒。 像Tacotron2 找那个需要添加一个Prenet 来帮助收殓和改善合成质量, 还需要一个Postnet 的残差层来修正损失。 一种处理这种缺乏非文本信息标签的方法是,根据我们认为与这些基本信息相关的音频,寻找手工设计的统计数据。这些统计信息可以直接从训练数据中计算。 然而,为了使用这样的模型,我们希望近似的统计量必须事先确定,并且这些统计量的目标值必须在合成之前确定。 另一种处理缺乏非文本信息标签的方法是学习韵律或风格的潜向量, 虽然这些方法已经显示出前景,但操纵这些潜在变量只能粗略地控制语音的表达特征。混合方法包括将统计数据与在无监督模式中学习的潜在嵌入相结合, 如mellotron。

Flowtron

Flowtron是一个自回归的生成模型, 生成mel谱序列 p ( x ) p(x) p(x), 每一帧的mel谱是根据前面生成的的mel谱而生成的: p ( x ) = ∏ p ( x t ∣ x 1 : t − 1 ) p(x) = \prod{p(x_t | x_{1:t-1})} p(x)=p(xtx1:t1). 我们的设置使用神经网络作为生成模型,从简单分布p(z)采样。我们考虑了两个简单的分布,它们的维数与我们期望的mel谱图相同:一个是零均值的球面高斯分布,另一个是具有固定或可学习参数的球面高斯分布。
z ∼ N ( z ; 0 , I ) z ∼ ∑ k ϕ ^ k N ( z ; u ^ k , ∑ k ^ ) z \sim \mathcal{N}(z;0,I)\\ z \sim \sum_k \hat \phi_k \mathcal{N}(z; \hat u_k, \hat {\sum_k}) zN(z;0,I)zkϕ^kN(z;u^k,k^)
这些样本经过一系列可逆的参数化变换f,在我们的例子中,仿射变换f将p(z)变换为p(x)。
x = f 0 ∘ f 1 ∘ f 2 . . . f k ( z ) x = f_0 \circ f_1 \circ f_2...f_k(z) x=f0f1f2...fk(z)
在自回归标准流中国, 第t个变量 z t ′ z_t^{'} zt依赖于前t-1个时间步:
z t ′ = f k ( z 1 : t − 1 ) z_t^{'} = f_k(z_{1:t-1}) zt=fk(z1:t1)

利用参数化仿射变换f,由于f的自回归结构,每个变换f的Jacobian行列式都是下三角的,因此易于计算。通过这种设置,我们可以通过最大化数据的对数可能性来训练Flowtron,这可以通过变量的变化来实现:
l o g p θ ( x ) = l o g p θ ( z ) + ∑ i = 1 k l o g ∣ d e t ( J ( f i − 1 ( x ) ) ) ∣ z = f k − 1 ∘ f k − 1 − 1 . . . f 0 − 1 ( x ) log p_{\theta}(x) = log p_{\theta}(z) + \sum_{i=1}^k {log |det(J(f_i^{-1}(x)))|} \\ z = f_k^{-1} \circ f_{k-1}^{-1}...f_0^{-1}(x) logpθ(x)=logpθ(z)+i=1klogdet(J(fi1(x)))z=fk1fk11...f01(x)

对于网络中的前向传播,我们将mel谱图作为向量,并根据文本和说话人id通过几个“流”步骤进行处理。这里的流动步骤包括仿射耦合层,如下所述:

Affine coupling layer

可逆的神经网络通畅由耦合层构成, 在我们的案例中, 我们使用了仿射耦合层。 每个输入 x t − 1 x_{t-1} xt1会产生一个比例项s 和一个偏差项b, 然后对后续的输入 x t x_t xt进行仿射变换:
( l o g s t , b t ) = N N ( x 1 : t − 1 , t e x t , s p e a k e r ) x t ′ = s t ⊙ x t + b t (log{s_t}, b_t) = NN (x_{1:t-1}, text, speaker) \\ x_t^{'}= s_t \odot x_t + b_t (logst,bt)=NN(x1:t1,text,speaker)xt=stxt+bt
这里的NN可以是任意的自回归因果变换。 仿射耦合层保证了整个网络的可逆性, 即便NN()是不可逆的。对于仿射耦合层,只有st项改变了映射的大小,并且在损失中增加了变量的变化项。这个项也用来惩罚模型的不可逆仿射映射。
l o g ∣ d e t ( J ( f c o u n p l i n g − 1 ( x ) ) ) ∣ = l o g ∣ s ∣ log {|det (J(f_{counpling}^{-1}(x)))|} = log {|s|} logdet(J(fcounpling1(x)))=logs
通过这种设置,还可以恢复输入x的顺序,而不丧失通用性。因此,我们选择在流的每个偶数步恢复输入的顺序,并在流的奇数步保持原始顺序。这使得模型能够在保持因果性和可逆性的同时,向前和向后学习依赖关系。

Model architecture

我们的text encoder 对Tacotron中的进行了修正, 将batchnorm 替换为instance norm。 我们的decoder 和NN结构, 如图1 所示(将Tacotron中的prenet 和 postnet移除):
在这里插入图片描述

Inference

一旦对网络训练完成,进行推理只需从一个球形高斯或高斯混合中随机抽样z值,然后在网络中运行它们,必要时恢复输入的顺序。在训练中我们使用 σ 2 = 1 \sigma ^2 =1 σ2=1, 高斯混合模型的参数要么是固定值, 要么由flowtron来预测。在下面的实验中, 我们会对探究 σ \sigma σ大小的作用。 一般来说,我们发现从高斯分布中采样z值与训练过程中假设的标准偏差较低,结果得到的mel谱图听起来更好,

Experiments

在这里插入图片描述

sampling the prior

从Flowtron生成样本的最简单方法是从先验分布 z ∼ N ( 0 , σ 2 ) z \sim \mathcal N(0, \sigma^2) zN(0,σ2)中采样, 并控制 σ \sigma σ的大小来改变语音。通过实验证明了调整σ2是一种简单而有价值的方法,它比Tacotron提供了更多的变化和控制,同时又不牺牲语音质量。
σ \sigma σ越大的时候, 样本的duration 变化越大。
在这里插入图片描述

σ = 0 \sigma=0 σ=0的时候F0轮廓线没有变化, 当 σ \sigma σ增大的时候, F0轮廓线相应地变多。
在这里插入图片描述

代码链接: https://github.com/NVIDIA/flowtron

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值