Char2Wav
Char2Wav包含两个部分:reader和vocoder。reader由encoder和decoder两部分组成,encoder是双向RNN网络,可以接受文本/音素作为输入,decoder是带attention的RNN网络,生成vocoder对应的声学特征。Char2Wav的突出贡献是可以用直接从text中学会产生wav。Char2Wav是一个端到端模型,可以对角色进行训练,使用的是SampleRNN神经声码器之前预测声码器参数。Char2Wav结构如图6所示。
图6. Char2Wav端到端的语音合成模型
Reader:
基于注意力的递归序列发生器(attention-based recurrent sequence generator,ARSG)是一个递归神经网络,它以输入序列X为条件生成序列Y=(y1,...,yT),X由一个编码器预处理,输出序列h=(h1,...,hL)。在这项工作中,输出Y是一个声学特征序列,X是要生成的文本或音素序列。此外,编码器是一个双向的递归网络。在第i步,ARSG专注于h,同时生成yi :
其中,s_i-1是生成器递归神经网络的第(i - 1)个状态,α_i∈R^L是注意力权重或排列方式。使用基于位置的注意力机制,α_i = Attend(s_i-1, α_i-1),给定一个长度为L的条件序列h,我们有:
其中 κi , βi 和ρi分别代表窗口的位置、宽度以及窗口的重要性。
NEURAL VOCODER:
语音合成的质量会受到vocoder的限制,为了确保高质量的输出,引入SampleRNN。SmapleRNN用于建模extremely长时依赖性,其中的垂直结构用于捕捉序列不同时刻的动态。捕捉长的audio step(词级别)和短的audio step之间的长相关很重要。使用conditional version model学习vocoder 特征序列和对应audio sample之间的映射,每一个时刻的输出取决于它的vocoder特征和过去时刻的输出。
项目 | SOTA!平台项目详情页 |
Char2Wav | 前往SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/char2wav |
Deep Voice
深度语音(Deep Voice)系统是一个完全由深度神经网络构建的高质量text-to-speech系统。该系统包含 5 个重要基础:定位音素边界的分割模型、字母到音素(grapheme-to-phoneme) 的转换模型、音素时长预测模型、基础频率预测模型、音频合成模型。聚焦于分割任务,提出了一种使用深度神经网络完成音素边界检测的新方法,使用 CTC(connectionist temporal classification)损失函数。聚焦于音频合成任务,引入了一个 WaveNet 的变体,它比原始的 WaveNet 需要的参数更少、训练速度更快。在每个组件上使用神经网络,从而实现比传统的TTS系统更简单、更灵活(传统的组件需要人工调配以及大量的专业知识)。
图7. Deep Voice结构,(a)训练程序,(b)推理程序,左边是输入,右边是输出。持续时间预测模型和F0预测模型是由一个用联合损失训练的单一神经网络实现的。字母到音素的模型被用来作为不存在于音素字典中的单词的后备手段。虚线表示非学习的成分
Deep Voice是使用DNN开发的语音合成系统,主要是使用神经网络代替传统参数语音合成中的各个模块,具体包括以下五个模块:
(1)grapheme-to-phoneme转换模型:将输入本文转为phoneme序列;
(2)segmentation模型:定位音素边界;
(3)phoneme duration模型:预测phoneme持续时长;
(4)fundamental frequency模型:预测基频F0,音素是否发声;其中,phoneme duration模型和fundamental frequency模型一起训练;
(5)audio synthesis模型:综合(1)/(3)/(4)的输出进行音频合成。
Grapheme-to-Phoneme Model:
字母到音素模型是基于编码器-解码器的结构。使用一个具有门控递归单元(GRU)非线性的多层双向编码器和一个单向GRU解码器。每个解码层的初始状态都被初始化为相应编码器前向层的最终潜在状态。该架构是用teacher强迫法训练的,解码是用波束搜索法进行的。在编码器中使用了3个双向层,每个层有1024个单元,在解码器中使用了3个相同大小的单向层,并使用了宽度为5的波束搜索。在训练过程中,在每个递归层之后使用概率为0.95的Dropout。
Segmentation Model:
训练分割模型来实现给定语料和目标音素序列之间的对齐。这项任务类似于语音识别中的语音与书面输出的对齐问题。在该领域,CTC损失函数已被证明非常适用于字符对齐任务,以学习声音和文本之间的映射关系。用CTC训练的网络生成音素序列,能够为每个输出音素生成短暂的峰值。直接训练的结果能使音素与音频大致一致,但却无法检测出精确的音素边界。为了克服这个问题,训练预测音素对的序列,而不是单个音素。然后,网络在接近音素对中两个音素的边界的时间段内输出音素对。
Phoneme Duration and Fundamental Frequency Model:
使用一个单一的架构来联合预测音素持续时间和随时间变化的基本频率。该模型的输入是一个带有重音的音素序列,每个音素和重音都被编码为一个独热向量。该结构包括两个全连接层,每个单元256个GRU;然后是两个单向递归层,每个单元128个GRU,最后是一个全连接的输出层。在最初的全连接层和最后的递归层之后,分别引入概率为0.8的DropOut。最后一层为每个输入音素产生三个估计值:音素持续时间、音素发声的概率(即有一个基本频率)和20个随时间变化的F0值,这些值在预测的持续时间上被均匀采样。
Audio Synthesis Model:
音频合成模型是WaveNet的一个变体。WaveNet由一个调节网络和一个自回归网络组成,前者在语言特征上采样到所需的频率,后者在离散的音频样本Y上生成一个概率分布P(y)。改变层数l,剩余通道的数量r(每层潜在状态的维度),以及跳过通道的数量s(在输出层之前,层输出被投射到的维度)。
WaveNet由一个上采样和调节网络组成,然后是l个2×1的卷积层,有r个Residual输出通道和门控tanh非线性。将卷积分解为每个时间段的两个矩阵乘以W_prev和W_cur。这些层与残差连接相连。每一层的潜在状态都被串联成一个l_r向量,并用W_skip投射到s个跳过通道,然后是两层1×1的卷积(权重为W_relu和W_out),具有relu非线性。具体结构如图8所示。
图8. 修改后的WaveNet架构。各部分根据功能进行着色:茶色的输入,绿色的卷积和QRNNs,黄色的单项运算和softmax,粉色的二项运算,以及靛蓝色的重塑、转置和切片
当前 SOTA!平台收录 Deep Voice 共1 个模型实现资源。
模型 | SOTA!平台模型详情页 |
Deep Voice | 前往SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/deep-voice |
Parallel WaveNet
Parallel WaveNet 是一种新的方法:概率密度蒸馏。这种方法可以在生成的语音质量没有显著差异的情况下,通过一个训练好的 WaveNet 去训练一个平行前馈网络。结果证明, Parallel WaveNet 能以比实时快20倍的速度产生高保真语音样本,这比原来的 WaveNet 要快1000倍。现已能在生产环境中提供多种英语和日语的声音。概括来说,Parallel WaveNet 对基本的wavenet模型做了两项优化,以提高音频质量:一是,使用16bit音频,采样模型替换为离散化混合逻辑斯蒂分布;二是,将16khz的采样率提升到24khz,所采用的具体方法包括提升层数、增加扩张系数等。
图9. 概率密度蒸馏法概述。一个预先训练好的WaveNet教师被用来对学生输出的样本x进行评分。学生被训练成最小化其分布和教师分布之间的KL-散度,方法是在教师下最大化其样本的对数可能性,并同时最大化其自身的熵
直接以极大似然训练并行 WaveNet 模型是不切实际的,因为估计对数似然所需的推理过程是连续的,而且很慢。因此,引入一种新的神经网络蒸馏形式,使用一个已经训练好的 WaveNet 作为“教师”,让“学生” Parallel WaveNet可以有效地学习。为了强调“处理标准化的密度模型”,将这一过程称为概率密度蒸馏(与概率密度估计相反)。其基本思想是让学生尝试在教师学到的分布下匹配自己的样本的概率。
给定在音频数据集上训练的并行 WaveNet student pS(x) 和 WaveNet teacher pT(x),定义概率密度蒸馏损失如下:
D_KL为KL-散度,H(P_S, P_T)为学生P_S与教师P_T之间的交叉熵,H(P_S)为学生分布的熵。当KL散度为零时,学生分布完全恢复了教师分布。熵项(在以前的蒸馏目标中并不存在)至关重要,因为它防止了学生分布坍塌为教师模式。更重要的是,所有估计这个损失的导数所需的操作(从pS(x)采样,评估pT(x)和评估H(pS))都可以有效地执行。
熵项H(P_S)写作:
第一个等式中,x = g(z), z_t 为 logistic 分布得出的独立样本。第二个等式中,因为逻辑分布 L(u, s) 的熵是 lns+2 因此,我们可以计算这一项而不必显式地生成x。然而,交叉熵项H(P_S, P_T)明确依赖于x = g(z),因此需要从学生取样来估计:
对于从学生 pS 中抽取的每个样本 x ,可以与教师并行计算所有的 pT(xt|x<t) ,然后通过在每个时间步长中从 pS(xt|z<t) 中抽取多个不同的样本 x_t ,计算 H(p_S(xt|z<t) , p_T(xt|x<t))。这个无偏估计量的方差比单纯地用第一个等式评估样本的方差要小得多。将教师的输出分布 pT(x_t|x<t) 参数转换,这使得损失项 lnpT(x_t|x<t) 对于 x_t 和 x<t 都是可微分的。另一方面,分类分布只能是可微分的 w.r.t. x<t 。
此外,单独使用概率密度蒸馏训练可能不足以约束学生生成高质量的音频流。因此,引入额外的损失函数来引导学生分布向期望的输出空间。包括:功率损失:
以及,对比蒸馏损失:
当前 SOTA!平台收录 Parallel WaveNet 共2个模型实现资源。
项目 | SOTA!平台项目详情页 |
Parallel WaveNet | 前往SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/parallel-wavenet |
GAN
这篇文章提出了一种结合生成式对抗网络的基于静态参数的语音合成方法,具体由两个神经网络组成:区分自然样本和生成样本的鉴别器,以及欺骗鉴别器的发生器。在所提出的框架中,训练鉴别器以区分自然和生成的语音参数,同时训练声学模型以最小化传统的最小生成损失和用于欺骗鉴别器的对抗性损失的加权和。GAN的目的是最小化自然语音参数和生成的语音参数之间的KL-divergence,所提出的方法有效地减轻了对所生成的语音参数的过度平滑效应。这篇文章在验证GAN模型有效性的实验中,同时考虑了TTS和VC(Voice Conversion)两种任务,TTS是基于文本的语音合成,而VC则是从另一个语音来合成具有原始语言信息的语音的技术(在保留原始语音的语言信息的同时)。
图10. 基于GAN的多任务学习框架的系统示意图
GAN是一个生成模型,可以通过对抗过程学习随机噪声输入向量z和输出参数y之间的复杂关系。GAN的估计由两个模型组成:一个是生成模型G,它从随机噪声z中捕捉数据分布;另一个是鉴别模型D,它能最大限度地正确判别真实例子和从G中生成的虚假样本的概率。在这个对抗过程中,生成器倾向于学习一个映射函数G(z),以从均匀随机的噪声分布p_z(z)中拟合真实数据分布p_data(x),而鉴别器的目的是完美地判断样本是来自G(z)还是p_data(x)。因此,G和D都是在具有价值函数的two-player min-max game中同时训练的:
在上述生成模型中,由于指导性不强,生成样本的模式无法控制,由此引入了条件生成对抗网络(CGAN),通过考虑额外的信息y来指导生成。损失函数可以表示为:
在传统的SPSS声学模型中,我们通常在估计过程中最小化预测参数X_model和自然语音X_real之间的MSE。这个目标可以写成
数字上的差异(以MSE计)只涉及到估计,而数字上的错误减少不一定会导致合成语音的感知改善。为了解决这个问题,引入GANs,通过鉴别过程来学习合成语音和自然语音之间的本质区别。GAN能够生成数据而不是估计密度函数。为了解决GAN中生成模型的模型崩溃问题,进一步提出了以下生成器损失函数,以指导GAN收敛到最佳解决方案,从而使生成模型产生预期的数据:
最终目标函数为:
将语言特征视为额外的向量y,并使输入噪声z服从于[-1,1]区间的均匀分布。然后,我们的框架可以通过G(z|y)生成语音X_model,并且在训练期间同时估计loss_mse和loss_cgan。
图11. 带有音素信息的鉴别器
在多任务框架中,也尝试使用音素信息来指导鉴别过程,如图11所示。假设标签是一个代表音素类别的独热编码向量,它是D的虚假和真实样本的类别。那么我们的目标是最小化真实的交叉熵(CE),最大化虚假的损失,而后者意味着我们不知道虚假的音素属于哪个音素。因此,在loss_multi中GANs的目标函数可以被更新为
考虑到音素分类,我们得到新的损失函数如下:
当前 SOTA!平台收录 GAN 共 1 个模型实现资源。
项目 | SOTA!平台项目详情页 |
GAN | 前往SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/gan-voice |