好用的语音合成声码器,你知道吗?(一)

举报
白马过平川 发表于 2021/12/31 10:28:06 2021/12/31
【摘要】 声码器作为语音合成的重要组成部分,是人们长期研究的方向。

声码器的几种方法

  声码器作为语音合成的重要组成部分,是人们长期研究的方向。目前主流声码器主要包含以下四种:1)纯信号处理的参数声码器;2)基于自回归神经网络构建的声码器;3)基于非自回归神经网络构建的声码器;4)基于对抗神经网络构建的声码器。本文先对前三种方法分别进行简单介绍。

1 纯信号处理方法:

  基于传统信号处理算法的参数声码器是利用传统数学建模或逆变换将声学特征解码为波形的过程。最初的基于信号处理算法的声码器的输入特征是短时傅里叶变换(STFT)后的幅度谱,然后基于逆傅立叶变化重新生成波形。由于幅度谱缺失相位信息,直接进行逆傅立叶变化并不能得到原波形,早期人们设计了一种迭代算法通过修正STFT幅度估算原波形。该迭代算法在初始时先随机初始化一个相位谱,用相位谱和输入的幅度谱经过逆傅立叶变换(ISTFT)合成波形,然后改合成波形重新进行STFT得到新的幅度谱和相位谱,用新的相位谱和输入的幅度谱再次进行ISTFT变换合成波形,经过多次迭代,每次迭代中减少了生成波形的STFT幅度和修正后的STFT幅度之间的均方误差,逐步合成具有一定听感的波形。该这迭代算法需要大量的迭代计算,计算量较大且相位信息存在多种可能,迭代只能生成具有一定规律的相位谱,使得该算法合成的波形会产生一种空灵声,缺少复杂的细节信息。在此基础上,更复杂的声学特征被运用到声码器中,具有增强的参数修改功能和相对高质量的参数声码器WORLD被提出和不断研究。
  WORLD是一种基于vocoder的参数合成方法,是通过基频F0(Fundamental Frequency)、频谱包络(spectral envelope)、非周期信号参数(aperiodic parameter)等语音信号相关的参数信息来合成原始语音。包含三个模块,具体结构如下图1所示:

WORLD声码器
图1 WORLD声码器结构示意图

  其中DIO的作用是用来估计一段波形的Fundamental Frequency(简称F0),CheapTrick算法是根据波形和F0来计算spectral envelope,PLATINUM算法是基于波形、F0和spectral envelope来计算aperiodic parameter。得到上述三个声学参数,WORLD声码器可以根据F0、spectral envelope、aperiodic三个参数将最小相谱与激励信号进行卷积合成一段语音,因此,在歌声合成研究中,会通过深度学习技术学习到一段文本所对应的这三个特征,然后借助WORLD合成为语音。
  WORLD声码器是传统信号处理算法中较为成熟的一种参数声码器,其在真实声学特征参数下可以较好的还原高质量的波形,且使用计算复杂度更低的算法,大大减少了计算所需的时间,因此早期在工业界有着广泛的应用。但是随着人们对合成音质的要求越来越高,WORLD声码器的合成效果却严重依赖声学特征参数预测准确性,而往往声学特征参数的预测存在一定的误差,这便大大降低了最终的合成音质。

2 自回归神经网络:

  随着深度学习算法的流行,深度学习算法被应用到声码器中。其中最具有历史意义也是最早提出的基于自回归神经网络的声码器WaveNet,是被众多人所研究和关注的。WaveNet是一种完全概率和自回归的模型,每个音频样本的预测分布均以所有先前样本为条件,可以直接学习到采样值序列的映射,因此具有很好的合成效果。
  WaveNet声码器是一种直接在原始音频波形上运行的新的生成模型。波形的联合概率分布 x = x 1 , x 2 , x 3 , , x t x=x_1,x_2,x_3,…,x_t 被分解为条件概率的乘积,第 t t 个采样点的概率可以根据前 t 1 t-1 个采样点的预测得到,因此可以用来预测语音中的采样点数值。其基本公式如下:

P ( x ) = t = 1 T p ( x t x 1 , x 2 , x 3 , , x ( t 1 ) ) P(x)=∏_{t=1}^Tp(x_t│x_1,x_2,x_3,…,x_{(t-1)})

  WaveNet声码器的模型结构主要构成是膨胀因果卷积网络(Dilated Casual Convolutions),每个卷积层都对前一层进行卷积,卷积核越大,层数越多,时域上的感知能力越强,感知范围越大。
  WaveNet声码器在输出层使用softmax求取每个采样点的概率,把采样值的预测作为分类任务进行。由于16位的采样点就有65536种采样结果,需要对采样值进行转换,将65536种采样值会转换成256种,论文作者也实验证明该转换方法没有对原始音频造成明显损失。转换公式如下:

f ( x t ) = s i g n ( x t ) l n ( 1 + μ x ) / l n ( 1 + μ ) f(x_t)=sign(x_t ) ln(1+μ|x|)/ln(1+μ)

  其中 1 < x t < 1 -1<x_t<1 µ = 255 µ =255 。与简单的线性量化方案相比,这种非线性量化产生的重建效果明显更好,量化后的重建信号听起来与原始信号非常相似。WaveNet声码器虽然在歌声合成效果上可以达到令人接受的效果,但其模型需要堆叠多层膨胀因果卷积来提升合成效果,从而导致其计算量大,无法实现实时合成,导致其不能很好的得到工业应用。
  后来人们在此基础上为了保证合成效果减少模型的计算量提出了WaveRNN声码器,其修改点:1)将堆叠多层的膨胀因果卷积替换为单层GRU结构。2)应用矩阵稀疏化技术来减少WaveRNN模型中的权重数量。3)将长波形进行折叠成短波形,然后并行生成。这些改进点虽然在一定层面加快了WaveNet的计算速度,使其在CPU部署成为可能。

3 非自回归网络:

  由于自回归神经网络声码器在工业应用中的种种限制,人们开始逐步研究非自回归结构的神经网络声码器。近年,提出很多关于非自回归结构的神经网络声码器,这些声码器通常比自回归模型快几个数量级,因为它们具有高度可并行性的网络结构,并且充分利用了现代深度学习的硬件(GPU和TPU)。现阶段有两种不同的方法来训练这些模型。1)将经过训练的自回归结构的声码器蒸馏成基于卷积的非自回归结构的声码。2)基于流的生成模型WaveGlow。这两种方法都在非自回归神经网络声码器发展上做出了贡献。其中第一种方法训练较为复杂,其比自回归结构的声码器更加难以训练和实施。例如声码器Parallel WaveNet和Clarinet的训练需要两个网络,一个教师网络和一个学生网络,其中教师网络是自回归的结构,学生网络是非自回归的结构。通常需要训练教师网络和学生网络,以让学生网络合成效果无限逼近教师网络,但通常难以成功地训练这些网络使其收敛,因此这种方法难以复制和部署。
第二种方法是结合了Glow和WaveNet的想法而提出的WaveGlow模型,Glow是一种流式生成模型,可以从简单分布中获取采样点来生成真实样本点。这是一种比较独特的生成模型,它直接将生成模型的概率计算出来,即把分布转换的积分式给直接计算出来。通常转换公式如下所示:

z N ( z ; 0 , I ) z∼N(z;0,I)

x = f 0 f 1 f k ( z ) x=f_0∘f_1∘…f_k (z)

  其中z为期望为0的高斯分布,f_k (z)为简单分布的生成模型,x为需要得到的样本的真实分布。然后通过直接最小化数据的负对数概率来训练Glow。其中负对数概率的公式如下所示:

l o g P θ ( x ) = l o g P θ ( z ) + i = 1 K l o g d e t ( J ( f i 1 ( x ) ) ) logP_θ (x)=logP_θ (z)+∑_{i=1}^Klog |det(J(f_i^{-1} (x)))|

z = f k 1 f k 1 1 f 0 1 ( x ) z=f_k^{-1}∘f_{k-1}^{-1}∘…f_0^{-1} (x)

  其中 d e t ( J ( f i 1 ) ) det(J(f_i^{-1})) f i 1 f_i^{-1} 的Jacobian矩阵, f k 1 f_k^{-1} f k f_k 生成模型的逆过程,按照上述公式来可以看出:1)从最基本的架构上可以看出, f k 1 f_k^{-1} 必须是存在的且能被算出,这意味着 f k f_k 的输入和输出的维度必须是一致的并且 f k f_k 的行列式不能为零。2) f k 1 f_k^{-1} 可以计算出来,而 l o g P θ ( x ) logP_θ (x) 的目标表达式只与 f k 1 f_k^{-1} 有关,所以Glow在实际训练中一般先训练 f k 1 f_k^{-1} 对应的网络,然后想办法算出 f k f_k


图2 Glow模型训练过程

   如图2所示,在训练时从数据真实分布中采样出𝑥,然后去训练 f k 1 f_k^{-1} 使得通过 f k 1 f_k^{-1} 生成的 z = f k 1 ( x ) z=f_k^{-1}(x) 满足特定的先验分布;接下来在测试时,从高斯分布中采样出𝑧,然后通过 f k f_k 生成的样本𝑥就是新的生成音频。
  WaveGlow将神经网络用作生成模型 f k 1 f_k^{-1} ,从高斯分布中获取样本z,输入样本维度具有与所需输出音频相同的维数,然后将这些样本输入到一系列神经网络堆叠的构成的多层生成模型 f 0 f 1 f k f_0∘f_1∘…f_k ,最后生成以梅尔谱图为条件的音频样本的分布。其中WaveGlow的模型结构由12个耦合层和12个可逆1x1卷积组成,每个耦合层由8层膨胀卷积的堆栈组成。


图3 WaveGlow模型网络结构

  具体结构如图3所示,其中每一层Affine Coupling Layer代表仿射耦合层,即生成模型 f k 1 f_k^{-1} 。该层将输入数据拆分成两部分 x a x_a x b x_b ,进行上图所示的公式变换,其中affine xform是仿射变换,具体公式如下所示:

l o g ( s , t ) = W N ( x a , m e l s p e c t r o g r a m ) log(s,t)=WN(x_a,mel-spectrogram)

x b = s x b + t x_b^{'}=s⨀x_b+t

f k 1 ( x ) = c o n c a t ( x a , x b ) f_k^{-1} (x)=concat(x_a,x_b^{'})

  这里WN可以是任意模型,当反转网络时,可以从输出 x a x_a 计算s和t,然后通过简单地重新计算 W N ( x a , m e l s p e c t r o g r a m ) WN(x_a,mel-spectrogram) 来反转 x b x_b^{'} 以计算 x b x_b 。 在我们的案例中,WN使用具有门控tanh非线性的膨胀卷积层以及残差连接和跳跃连接, WN体系结构与WaveNet类似。仿射耦合层也会输入梅尔谱图,以便在输入上调节生成的结果。按照上述模型结构进行构建的WaveGlow可以生成较好的音频效果。但由于 f i 1 f_i^{-1} 的Jacobian矩阵的维度不低,其行列式的计算量是异常巨大的,所以WaveGlow通常训练较慢,难以训练。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200