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(xt∣x1:t−1). 我们的设置使用神经网络作为生成模型,从简单分布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})
z∼N(z;0,I)z∼k∑ϕ^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=f0∘f1∘f2...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:t−1)
利用参数化仿射变换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=1∑klog∣det(J(fi−1(x)))∣z=fk−1∘fk−1−1...f0−1(x)
对于网络中的前向传播,我们将mel谱图作为向量,并根据文本和说话人id通过几个“流”步骤进行处理。这里的流动步骤包括仿射耦合层,如下所述:
Affine coupling layer
可逆的神经网络通畅由耦合层构成, 在我们的案例中, 我们使用了仿射耦合层。 每个输入
x
t
−
1
x_{t-1}
xt−1会产生一个比例项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:t−1,text,speaker)xt′=st⊙xt+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|}
log∣det(J(fcounpling−1(x)))∣=log∣s∣
通过这种设置,还可以恢复输入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)
z∼N(0,σ2)中采样, 并控制
σ
\sigma
σ的大小来改变语音。通过实验证明了调整σ2是一种简单而有价值的方法,它比Tacotron提供了更多的变化和控制,同时又不牺牲语音质量。
当
σ
\sigma
σ越大的时候, 样本的duration 变化越大。
σ
=
0
\sigma=0
σ=0的时候F0轮廓线没有变化, 当
σ
\sigma
σ增大的时候, F0轮廓线相应地变多。