这篇论文探讨了解决语音克隆问题的两种基本方法:说话人自适应(speaker adaptation)和说话人编码(speaker encoding)。适用于带有说话人嵌入的多说话人语音生成模型,不会降低音频质量。
原论文链接: Neural Voice Cloning with a Few Samples
语音克隆是个性化语音接口的一项备受期待的能力。基于神经网络的语音合成已经显示能为大量说话人生成高质量的语音。在本文中,我们介绍了一个神经语音克隆系统,将少量音频样本作为输入。我们研究了两种方法:说话人自适应和说话人编码。说话人自适应基于在一个多说话人生成模型上,使用少量克隆样本进行微调。说话人编码基于训练一个单独的模型以直接由克隆音频推断新的说话人,这在一个多说话人生成模型中被使用。就语音的自然度及其与原始说话人的相似度而言,即使只有非常少的克隆音频,这两种方法都可以实现良好的性能(克隆音频样本位于https://audiodemos.github.io)。尽管说话人自适应可以实现更好的自然度和相似度,说话人编码方法的克隆时间或所需存储明显更少,使其有利于低资源部署。
基于深度学习的生成模型已成功应用于许多领域,如图像合成(van den Oord et al., 2016; Karras et al., 2017),音频合成(Wang et al., 2017; Engel et al., 2017; Arik et al., 2017a),和语言建模(Jozefowicz et al., 2016; Merity et al., 2017)。深度神经网络能够对复杂的数据分布进行建模,并且可以很好地扩展大型训练数据。它们可以进一步以外部输入为条件来控制高级行为,例如指示生成样本的内容和风格。
对于语音合成,生成模型可以用文本(Wang et al., 2017)和说话人身份来训练(Arik et al., 2017b; Ping et al., 2017)。虽然文本携带语言信息并控制所生成语音的内容,但是说话人表征捕获说话人的特征,例如音调范围,语速和重音。一种多说话人语音合成的方法是用三元组(文本,音频,说话人身份)联合训练生成模型和说话人嵌入(Arik et al., 2017b; Ping et al., 2017)。所有说话人的嵌入都是随机初始化,并以生成性损失来训练的。该想法是以低维嵌入对说话人相关信息进行编码,同时对于所有说话人共享大多数模型参数。这种模型的一个限制是它只能为训练中观察到的说话人生成语音。一个更有趣的任务是少量语音样本中学习未知说话人的声音,这也被称为语音克隆。语音克隆可用于许多支持语音的应用程序,以提供个性化的用户体验。
在这项工作中,我们专注于未知说话人的有限语音样本的语音克隆,这也可以在语音的小样本生成建模的背景下考虑。对于大量样本,可以从头开始为任意目标说话人训练生成模型。然而,除了具有吸引力外,小样本生成建模还具有挑战性。生成模型需要从少量音频样本提供的有限信息中学习说话人特征,并泛化至未知文本。我们利用最近提出的端到端神经语音合成方法(Wang et al., 2017; Ping et al., 2017)探索语音克隆方法,该合成方法应用了带注意力机制的序列到序列建模。在神经语音合成中,编码器将文本转换为隐藏表征,并且解码器以自回归方式估计语音的时频表征。与传统的单元选择语音合成(Sagisaka et al., 1992)和统计参数语音合成(Zen et al., 2009)相比,神经语音合成具有更简单的流水线并产生更自然的语音(Shen et al., 2017b)。
端到端多说话人语音合成模型通常通过生成模型的权重和说话人嵌入查找表来参数化,其中后者应带有说话人特性。这项工作中,我们研究了两个问题。首先,说话人嵌入能够在多大程度上捕捉说话人之间的差异?然后,仅仅由未知说话人的少量样本,说话人嵌入能学习地多好?我们比较了两种语音克隆方法:(i)说话人自适应和(ii)说话人编码,在语音自然度,说话人相似度,克隆/推断时间和模型占用空间方面。
我们考虑一个多说话人生成模型 f(ti,j,si;W,esi) f ( t i , j , s i ; W , e s i ) ,其中文本 ti,j t i , j ,说话人身份 si s i 。模型中的可训练参数由 W W 参数化,esi e s i 表示为关于 si s i 的可训练说话人嵌入。 W W 和esi e s i 都由最小化损失函数 L L 来优化,损失函数惩罚生成和真实标定音频之间的差异(例如,谱图的回归损失):minW,eEsi∼S,(ti,j,ai,j)∼Tsi{L(f(ti,j,si;W,esi),ai,j)}(1) (1) min W , e E s i ∼ S , ( t i , j , a i , j ) ∼ T s i { L ( f ( t i , j , s i ; W , e s i ) , a i , j ) } 其中, S S 是说话人集合,Tsi T s i 是说话人 si s i 的文本-音频对训练集, ai,j a i , j 是说话人 si s i 的文本 ti,j t i , j 对应的真实标定音频。通过所有训练发言人的文本音频对来估计期望。在实践中,损失函数的 E E 算子通过minibatch来近似。我们使用 W^ W ^ 和 e^ e ^ 来表示训练参数和嵌入。
说话人嵌入已经显示能有效地捕获多说话人语音合成中的说话人差异。它们是说话人特征的低维连续表征(Arik et al., 2017b; Ping et al., 2017)。尽管使用纯粹的生成性损失进行训练,但在嵌入空间中确实可以观察到判别式属性(例如,性别或口音)。
语音克隆的目的是从一组克隆音频 Ask A s k 中提取未知说话人 sk s k 的说话人特征,以便为该说话人生成基于给定文本的不同音频。生成音频的两个性能指标是(i)音频的自然度,以及(ii)它是否听起来是由同一个说话人发音的。
神经语音克隆的两种方法总结在图1中,并在以下部分中进行了解释。
说话人自适应的想法是通过应用梯度下降,使用少量音频和相应的文本,来为未知说话人微调训练的多说话人模型。微调可用于说话人嵌入(Taigman et al., 2017)或者整个模型。对于仅作用于嵌入的自适应,我们有以下目标: mineskE(tk,j,ak,j)∼Tsk{L(f(tk,j,sk;W^,esk),ak,j)}(2) (2) min e s k E ( t k , j , a k , j ) ∼ T s k { L ( f ( t k , j , s k ; W ^ , e s k ) , a k , j ) }
其中, Tsk T s k 是目标说话人 sk s k 的文本-音频对集合。对于整个模型的自适应,我们有如下的目标函数: minW,eskE(tk,j,ak,j)∼Tsk{L(f(tk,j,sk;W,esk),ak,j)}(3) (3) min W , e s k E ( t k , j , a k , j ) ∼ T s k { L ( f ( t k , j , s k ; W , e s k ) , a k , j ) }
尽管对于说话人自适应,整个模型提供了更大的自由度,但其优化对于少量克隆样本尤其具有挑战性。在运行优化时,仔细选择迭代次数对于避免欠拟合或过拟合至关重要。
我们提出了一种说话人编码方法,用于从未知说话人的音频样本中直接估计说话人嵌入。这种模型在语音克隆中不需要任何微调。 因此,相同的模型可用于所有未知说话人。
具体地,说话人编码函数 g(Ask;Θ) g ( A s k ; Θ ) 采用一组克隆音频样本 Ask A s k 和估计 esk e s k 。该函数由 Θ Θ 参数化。理想情况下,说话人编码可以从头开始与多说话人生成模型联合训练,具有为生成的音频质量定义的损失函数: minW,ΘEsi∼S,(ti,j,ai,j)∼Tsi{L(f(ti,j,si;W,g(Ask;Θ)),ai,j)}(4) (4) min W , Θ E s i ∼ S , ( t i , j , a i , j ) ∼ T s i { L ( f ( t i , j , s i ; W , g ( A s k ; Θ ) ) , a i , j ) }
请注意,说话人编码以多说话人生成模型的说话人进行训练。训练时,对于训练说话人 si s i ,克隆音频样本集合 Ask A s k 随机取样。在推断时, Ask A s k ,来自目标说话人的音频样本,被用来计算 g(Ask;Θ) g ( A s k ; Θ ) 。然而,我们观察到从头开始训练,等式4的优化很困难。主要问题是拟合平均声音以最小化整体生成性损失,通常在生成建模文献中称为模式崩溃。解决模式崩溃的一个想法是为中间嵌入(我们试验了通过softmax层将嵌入映射到说话人分类标签的分类损失)或生成音频(我们试验了集成预训练的说话人分类器以提升生成音频的说话人区分度)引入判别性损失函数。然而,在我们的例子中,这些方法仅略微改善了说话人的差异。
作为代替,我们为说话人编码提出了单独的训练程序。说话人嵌入 e^si e ^ s i 从训练的多说话人生成性模型 f(ti,j,si;W,esi) f ( t i , j , s i ; W , e s i ) 中提取,然后说话人编码模型 g(Ask;Θ) g ( A s k ; Θ ) 被训练由采样的克隆音频来预测嵌入。对于相应的回归问题可以有若干目标函数。我们通过简单使用估计嵌入与目标嵌入间的L1损失取得了最好的结果: minΘEsi∼S{|g(Asi;Θ)−e^si|}(5) (5) m i n Θ E s i ∼ S { | g ( A s i ; Θ ) − e ^ s i | }
最终,整个模型可以基于目标函数等式4,使用预训练的 W^ W ^ 和预训练的 Θ^ Θ ^ 作为初始点,进行联合微调。微调使生成模型能够学习如何补偿嵌入估计的误差,并产生更少的注意力问题。然而,生成性损失仍然主导着学习,并且生成的音频中的说话人差异可能会略微减少(细节参见3.3)。
对于说话人编码 g(Ask;Θ) g ( A s k ; Θ ) ,我们提出了一个包含三部分的神经网络架构(见图2):
(i)谱处理:我们计算克隆音频样本的梅尔谱,并将其传递给PreNet,PreNet包含带指数线性单元(ELU)的全连接层用于特征转换。
(ii)时间处理:我们使用具有门控线性单元和残差连接的若干卷积层来包含时间上下文。 然后,应用平均池化来概括整个话语。
(iii)克隆样本注意力:考虑不同的克隆语音包含不同数量的说话人信息,我们使用了多头自注意力(multi-head self-attention)机制(Vaswani et al., 2017)来计算不同音频的权重,并获取聚合嵌入。
语音克隆性能指标可以基于众包平台的人工评估,但在模型开发过程中它们速度慢且成本高。 我们建议使用判别模型的两种评估方法。
说话人分类器确定音频样本属于哪个说话人。 对于语音克隆的评估,可以在用于克隆的目标说话人集合上训练说话人分类器。高质量的语音克隆将提高说话人分类的准确性。 我们使用与图7所示的(即说话人编码器详细架构)具有类似的谱和时间处理层的说话人分类器,以及在softmax函数之前的额外嵌入层。
说话人验证是基于来自说话者的一段测试音频和注册的音频来验证所声称的说话人身份的任务。特别是,它执行二分类以确定测试音频和注册的音频是否来自同一说话人(例如, Snyder et al., 2016)(更多模型架构细节见附录C)。说话人验证模型可以基于多说话人数据集进行训练,然后直接测试克隆的音频和真实标定音频是否来自同一说话人。与说话人分类方法不同,说话者验证模型不需要使用来自目标说话人的用于克隆的音频进行训练,因此它可以用于具有少量样本的未知说话人。作为定量性能指标,可以使用等错误率(EER)(可以改变判定阈值以在错误接受率和错误拒绝率之间进行权衡。 等错误率是指两者相等时的点)来测量克隆的音频与真实标定音频的接近程度。
我们比较了语音克隆的两种方法。对于说话人自适应方法,我们训练了多说话人生成模型并通过微调嵌入或整个模型,对目标说话人做自适应。对于说话人编码方法,我们也训练了说话人编码器,并考虑是否对其做联合微调。
在我们的第一组实验中(3.3节和3.4节),使用LibriSpeech数据集(Panayotov et al., 2015)来训练多说话人生成模型和说话人编码器模型。该数据集包含来自2484个说话人的采样频率16KHz的音频,总计820小时。LibriSpeech是一个用于自动语音识别的数据集,其音频质量相比语音合成数据集更低(我们设计了一个分段和去噪流水线来处理LibriSpeech,如Ping等人所述)。使用VCTK数据集(Veaux et al., 2017)执行语音克隆。VCTK包括108个带各种口音的英语母语人士的音频,以48 KHz采样。为了与LibriSpeech数据集保持一致,VCTK音频被降采样至16KHz。对于选定的发言者,每个实验随机抽样一些克隆音频。 附录B中的句子用作生成用于评估的音频。
在我们的第二组实验中(3.5节),我们的目标是调查训练数据集的影响。我们使用VCTK数据集,84个说话人用于训练多说话人生成模型,8个说话人用于验证,18个说话人用于克隆。
我们的多说话人生成模型基于(Ping et al., 2017)提出的卷积序列到序列架构,有相似的超参数和Griffin-Lim声码器。为了获得更好的性能,我们通过将跳跃长度和窗口大小参数减少到300和1200来增加时间分辨率,并添加二次损失项以超线性地惩罚更大的振幅分量。对于说话人自适应实验,我们将嵌入维数降低到128,因为它产生的过拟合问题较少。总体而言,基线多说话人生成模型在训练LibriSpeech数据集时具有约25M个可训练参数。对于第二组实验,VCTK模型的超参数使用来自(Ping et al., 2017),以训练VTCK的84个说话人的多说话人模型,使用的是Griffin-Lim声码器。
对于说话人自适应方法,对多说话人生成模型的全部参数或者只是其说话人嵌入参数进行微调。对于这两种情况,优化分别应用于每个说话人。
我们分别为不同数量的克隆音频训练说话人编码器,以获得最小的验证损失。最初,克隆音频被转换为具有80个频带的对数梅尔频谱图,跳跃长度为400,窗口大小为1600。对数梅尔频谱图被送入大小128的2层prenet构成的时间处理层。然后,使用滤波器宽度为12的两个1维卷积层进行时间处理。最后,多头注意力使用2个头,单位大小为128,用于键,查询和值。最后的嵌入大小为512。为了构建验证集,25个说话人由训练集中取出。在训练时使用64的批大小,初始学习率为0.0006,每8000次迭代应用0.6的退火率。验证集的平均绝对误差如附录D中的图12所示。更多的克隆音频可以实现更准确的说话人嵌入估计,尤其是带有注意力机制(关于学习的注意力系数的更多细节见附录D)。
我们在VCTK数据集上训练一个说话人分类器,以对音频样本属于108个说话人中的哪一个进行分类。说话人分类器有一个大小256的全连接层,6个卷积层,每层有256个宽度为4的滤波器,最终的嵌入层大小32。该模型在大小512的验证集上获得了100%的准确性。
我们在LibriSpeech数据集上训练说话人验证模型,以测量克隆音频的质量,与未知说话人的真实标定音频进行比较。我们留存了Librispeech的50个说话人作为未知说话人的验证集。 通过在测试集中随机配对来自相同或不同说话人(每种情况50%)的话语来估计等错误率(EER)。我们为每个测试集执行40960次试验。我们在附录C中描述了说话人验证模型的细节。
对于说话人自适应方法,我们使用说话人分类准确度选择最佳迭代次数(对于整个模型自适应,我们对于1,2,3个克隆音频样本选择迭代次数100,对于5,10个克隆音频样本选择迭代次数1000。对于说话人嵌入自适应,我们对于所有情况固定迭代次数100K)。对于说话人编码,我们考虑说话人编码器和多说话人生成模型是否进行联合微调以语音克隆(学习率和退火参数针对联合微调进行了优化)。表1总结了这些方法,并列出了训练,数据,克隆时间和占用空间大小的要求。
对于说话人自适应方法,图3显示了说话人分类精度与迭代次数的关系。对于两种自适应方法,分类准确度随着更多样本而显著增加,最多十个样本。在低样本计数方案中,调整说话人嵌入相比调整整个模型不太可能过拟合样本。这两种方法也需要不同的迭代次数收敛。整个模型的自适应,即使100个克隆音频样本也会在大约1000次迭代收敛,与之相比,嵌入自适应需要明显更多的迭代才能收敛。
图4和5展示了通过说话人分类和说话人验证模型取得的分类准确度和EER。说话人自适应和说话人编码方法都受益于更多的克隆音频。当克隆音频样本的数量超过五个时,整个模型的自适应在两种指标中均优于其他技术。说话人编码方法相比嵌入自适应,产生更低的分类准确性,但是获得了类似的说话人验证性能。
除了通过判别模型进行评估外,我们还在Amazon Mechanical Turk框架上进行了主题测试。为了评估生成的音频的自然度,我们使用5级平均意见得分(MOS)。为了评估生成音频与目标说话人的真实标定音频的相似度,我们使用(Wester et al., 2016)中相同的问题和类别进行4级相似性得分。我们独立进行每项评估,因此在打分期间不会直接比较两种不同模型的克隆音频。同一样本的多个投票通过多数投票规则汇总。
表2和3显示了人类评估的结果。通常,更高数量的克隆音频会改进这两个指标。由于对未知说话人提供了更多的自由度,因此对整个模型自适应如预期一样,改进更为显著。而对于具有更多克隆音频的说话人编码方法,在自然度方面存在非常小的差异。最重要的是,说话人编码不会降低基线多说话人生成模型的自然度。微调如预期一样可以提升说话人编码的自然度,因为它允许生成模型学习如何在训练时补偿说话人编码器的误差。相似度得分随着说话人编码的样本数量的增加而略有改善,并且与说话人嵌入自适应的得分相匹配。与真实标定在相似度上的差距也部分归因于输出的有限自然度(由于他们用LibriSpeech数据集训练)。
如图6和附录E所示,说话人编码器模型将说话人映射到有意义的潜在空间。受到词嵌入操作的启发(例如,证明存在简单的代数运算如国王-王后=男人-女人),我们考虑将代数运算应用于推断的嵌入以转换它们的语音特征。
为了转变性别,我们得到女性和男性的平均说话人嵌入,并将他们的差异添加到特定的说话者。例如,
可以产生英国女性说话人。类似地,我们可以考虑口音区域的转变,
以得到美国男性说话人。我们的结果(https://audiodemos.github.io/)显示,这种方式取得了特定性别和口音特征的高质量音频。
为了评估训练数据集的影响,我们还考虑语音克隆设置,其中训练基于包含84个说话人的VCTK的子集,另外8个说话人用于验证,16个用于测试。由于训练说话人有限,说话人编码器模型对未知说话人的泛化能力很差。表4和表5列出了说话人自适应方法的人类评估结果。说话人验证结果如附录C中的图11所示。仅嵌入和整体模型自适应之间的显著性能差异强调了训练说话人的多样性,以及将说话人区分信息结合到嵌入中的重要性。
人类可以从少量几个例子中学习大多数新的生成任务,这激发了对少量生成模型的研究。关于少量生成建模的早期研究主要集中在贝叶斯模型上。在Lake et al.(2013) 和Lake et al. (2015)中,分层贝叶斯模型用于将组合和因果关系应用于字符的少量生成。在Lake et al. (2014)中,类似的想法被修改为声学建模任务,目的是用不同的语言生成新单词。
最近,深度学习方法应用于少量生成建模,特别是对于图像生成应用。在Reed et al. (2017)中,对于条件图像生成,使用注意力机制和元学习过程来考虑少量分布估计。在Azadi et al. (2017),通过从少量观察到的字母建模字形样式,并根据估计的样式合成整个字母表,将少数量学习应用于字体风格迁移。该技术基于多内容生成对抗网络,与真实标定相比,惩罚不切实际的合成字母。在Rezende et al. (2016)中,使用空间注意力机制,将序列生成建模应用于图像生成的单次泛化。
说话人嵌入是一种成熟的方法,用于编码说话人的判别信息。这种方法已经用于许多语音处理任务,例如说话人识别/验证(Li et al., 2017),说话人分割(diarization)(Rouvier et al., 2015),自动语音识别(Doddipatla, 2016)和语音合成(Arik et al., 2017b)。其中一部分,模型明确地学习输出具有判别任务的嵌入,例如说话人分类。在其他情况下,嵌入是随机初始化的,并且隐式地从与说话人辨别没有直接关系的目标函数中学习。例如,在Arik et al. (2017b)中,训练多说话人生成模型以从文本生成音频,其中说话人嵌入由生成损失函数隐式学习。
语音转换的目标是修改源说话人的话语,使其听起来像目标说话者,同时保持语言内容不变。一种常见的方法是动态频率弯曲,以对齐不同说话人的频谱。Agiomyrgiannakis & Roupakia (2016)提出了一种动态编程算法,在使用匹配最小化算法匹配源和目标说话人时,同时估计最佳频率弯曲和权重变换。Wu et al. (2016)使用与局部线性嵌入集成的频谱转换方法进行流形学习。还有使用神经网络建模频谱转换的方法(Desai et al., 2010; Chen et al., 2014; Hwang et al., 2015)。这些模型通常使用大量的目标和源说话人的音频对进行训练。
在本文中,我们研究了两种神经语音克隆方法:说话人自适应和说话人编码。我们证明,即使只有少量克隆音频,这两种方法都可以实现良好的克隆质量。
对于自然度,我们表明说话人自适应和说话人编码都可以实现类似于基线多说话人生成模型的自然度平均意见得分(MOS)。因此,将来可以通过更好的多说话人模型来改进所提出的技术(例如像Shen et al. (2017a)中的用WaveNet声码器替换Griffin-Lim)。
对于相似度,我们证明了这两种方法都能从大量克隆音频中受益。整体模型和仅嵌入自适应之间的性能差距表明,除了说话人嵌入之外,生成模型中仍存在一些判别性的说话人信息。通过嵌入实现紧凑表征的好处是快速克隆且每个用户的占用空间小。特别是对于资源有限的应用,这些实际考虑应该明显倾向于使用说话人编码方法。将说话人信息完全嵌入到嵌入中的方法将是提高语音克隆性能的重要研究方向。
我们观察到使用语音识别数据集训练多说话人生成模型的缺陷,该数据集包含低质量音频和通用说话人集合表征的有限多样性。数据集质量的改进将导致生成的样本具有更高的自然度和相似度。此外,增加说话人的数量和多样性应该能够实现更有意义的说话人嵌入空间,这可以提高两种方法取得的相似度。我们希望我们的技术能够从大规模和高质量的多说话人语音数据集中获益。
我们相信,语音克隆有很多有希望的改进方面。元学习的进步,即在训练时学会学习的系统方法,应该有希望改进语音克隆,例如, 通过将说话人自适应或编码整合到训练中。另一种方法是以比使用说话人嵌入更灵活的方式推断模型权重,即最小化说话人信息损失,即使对于有限多样性的数据集。