本次分享国立台湾大学李宏毅(Hung-yi Lee)老师组刚刚被语音领域顶刊 IEEE/ACM Transactions on Audio, Speech, and Language Processing (IEEE/ACM-TASLP)录用的语音合成论文《Meta-TTS: Meta-Learning for Few-Shot Speaker Adaptive Text-to-Speech》。该论文使用元学习(Meta-Learning)技术提升语音合成在少样本场景下的说话人自适应能力。


论文地址:

https://ieeexplore.ieee.org/document/9756900

代码仓库:

https://github.com/SungFeng-Huang/Meta-TTS/

Demo地址:

https://reurl.cc/k7l1nG


0 Abstract

个性化语音合成系统可以基于极少量的注册样本生成指定用户的高质量合成语音。目前的主流方法氛分为两类:1、说话人自适应(Speaker Adaptation);2、说话人编码(Speaker Encoding)。说话人自适应方法使用少量的注册样本在训练好的多说话人TTS模型基础上进行微调,但是,该方法通常需要至少上千步的微调才能达到高质量的自适应效果,很难部署到移动设备。说话人编码方法为注册样本提取说话人向量,之后训练好的TTS模型可以以该说话人向量为条件输入输出指定用户的语音。然而,说话人编码器常常受到seen speaker和unseen speaker之间泛化差异的影响而表现欠佳。
本文将元学习(meta-learning)技术应用到说话人自适应方法当中。我们提出Model Agnostic Meta-Learning (MAML)算法来训练多说话人TTS模型,使得模型可以找到一个合适的元初始状态(meta-initialization)以便其快速地适应到任意少样本说话人。因此,我们可以将使用元学习算法训练好的TTS模型对unseen speaker进行高效的适应。
实验部分将我们提出的模型(Meta-TTS)与 说话人自适应 和 说话人编码 两个baseline进行比较。实验结果表明,与说话人自适应方法相比,Meta-TTS可以在极少注册样本场景下,使用更少的自适应步数在说话人相似度方面合成更高质量的语音。与说话人编码方法相比,基于相同的训练策略,Meta-TTS方法也具有更好的表现。
当baseline系统中的说话人编码器使用额外的8371个说话人数据进行预训练时,Meta-TTS仍然可以在LibriTTS数据集上超过baseline,并在VCTK数据集上取得不相上下的结果。

1 Introduction

语音合成(Text-to-Speech,TTS)模型可以基于大规模的高质量单说话人/多说话人语音数据生成自然的类人语音。常用的多说话人语音数据一般包含固定数量的说话人,其中每个说话人都包含一定数量的语音数据。然而,当我们需要为TTS模型实现定制声音合成时,面向特定用户收集大规模的语音数据的代价很昂贵。因此,基于少量样本为特定用户合成语音(也称为“语音克隆(vocie cloning)”)这一有趣的课题应运而生。
传统的语音克隆方法主要包含两类:说话人自适应(Speaker Adaptation)和说话人编码(Speaker Encoding)。说话人编码方法将说话人编码器和TTS模型组合在一起构建多说话人TTS模型。其中说话人编码器的学习方式可以是预训练或者与TTS模型联合训练。在为unseen speaker合成声音时,说话人编码器需要从少量语音样本中提取说话人向量,之后TTS模型以该说话人向量为条件输入进行该说话人语音的合成。但是说话人编码器受到泛化性问题影响,对unseen speaker的自适应能力较差。
对于说话人自适应方法,通常将说话人向量look-up table代替说话人编码器来构建多说话人TTS模型。说话人向量look-up table一般与TTS模型联合训练。当为unseen speaker合成语音时,我们需要先为新的speaker随机初始化一个embedding,之后该embedding可以基于该speaker的语音数据进行单独或随TTS模型一起微调。虽然说话人自适应方法的表现要优于说话人编码方法,但是它的训练过程需要千步以上的自适应训练。也就是说,说话人自适应方法的高质量语音合成表现依赖于更多的训练时间和更大的计算资源。
本文中,为了加速说话人自适应方法的训练,我们提出了基于meta-learning的说话人自适应训练方法。Model-Agnostic Meta-Learning (MAML)算法是一个经典的meta-learning算法,其目的是为快速自适应找到合适的参数初始化状态。MAML包含两层优化循环操作:外循环(outer loop)和内循环(inner loop)。外循环目的是找到一个元初始化状态(meta-initialization),之后内循环可以在此基础上基于少量样本快速适应到新任务中。

图1a和1b分别展示了多任务迁移学习和元学习的TTS训练示意图。与多任务的迁移学习方法不同,由于MAML迫使模型具有高效学习新任务的能力,元学习模型将是一个更适合于少样本适应的初始化模型。因此,我们提出使用MAML算法训练多说话人TTS模型,从而使用更少的自适应步数来获得高质量的说话人自适应效果。我们使用改进后的多说话人FastSpeech2作为TTS模型。MAML算法只应用到了其中说话人相关的模块中。


2 Problem Definition

2.1 Tasks

本文研究对象为5-shot语音克隆任务。每个任务包含一个support set(即任务的训练数据)和一个query set(即任务的测试数据)。TTS模型输入为说话人身份信息、文本音素序列,模型输出或训练目标为mel-spectrogram、duration、pitch和energy。模型通过拟合support set 数据集来学习说话人的语音,然后为query set中的音素序列生成期望的对应说话人的合成语音。

2.2Methods

如果我们直接使用随机初始化的TTS模型来拟合5-shot任务中的support set数据,那么模型很容易过拟合到support set并且无法合成正确鲁棒的单词序列。因此,相关的工作常常使用迁移学习的方法将TTS的知识迁移到训练好的TTS模型。然后只对下游任务中说话人相关的模块进行微调来调整合成语音的说话人信息。如果预先训练的模型在多说话人场景下训练得到,那么其微调的效果也会更好。然而,对一个训练好的TTS模型进行微调是非常耗时的,并且需要设计大量的实验tricks(如只微调说话人向量、early stopping、adaptive layer norm等)来防止过拟合现象的发生。
因此,我们使用meta-learning技术来处理few-shot任务。其中,在保证合成语音质量的前提下,模型的微调步骤可以压缩到10s以内。

2.3 Evaluation

我们将评价不同训练好的TTS模型在few-shot语音克隆任务中的自适应能力。
首先,我们将从测试数据中生成一些5-shot测试任务。之后对于每个任务,TTS模型对support set数据进行拟合。我们在query set测试合成语音的说话人相似度和合成语音音质。

3 Multi-Speaker TTS Architecture

我们将单说话人的FastSpeech2模型扩展为多说话人模型,图2a展示了多说话人FastSpeech2的模型结构。我们在FastSpeech2的基础上添加了Speaker Embedding Block。

相同内容的语音会有多种多样的表达方式。不同表达方式的不同之处主要在于说话人特点,其中包括语速(speaking speed), 音调(tones), 响度(loudness), 和 音色(timbre)。原始FastSpeech2模型的variance adapter模块通过预测duration、pitch、和energy对语速、音调和响度等信息建模,解码器通过预测mel-spectrogram来建模音色。这两个模块对合成语音的说话人信息生成起到重要作用。而文本编码器的主要目的是从音素序列中提取上下文语义知识。因此,我们将目标说话人的embedding加入到variance adapter和解码器模块的输入中,以便融合说话人信息。图2a所示的Speaker Embedding模块是一个可学习的speaker embedding look-up table(记作Es)。在训练阶段,我们将该table与FastSpeech2的其他模块进行参数的同时更新。

4 Speaker Adaptation via Fine-tuning

迁移学习常被用于领域自适应问题中,尤其是few-shot场景。模型通常先使用多任务配置进行预训练,之后在新任务中使用少量标注样本进行微调。因为多说话人TTS可以看作是单说话人TTS的多任务版本,因此我们可以通过微调的方式将预训练的多说话人TTS模型使用到新的说话人。对于说话人自适应方法,常用的微调方式包括:1、只微调说话人向量table(Es);2、微调整个TTS模型。然而,由于Es只学习到训练过程中说话人的身份信息,我们需要为新的说话人初始化一个新的table以使新说话人有自己对应的说话人向量。
由于文本编码器不涉及说话人信息,本文中,我们将主要对variance adapter、解码器和说话人向量table(Es)等三个模块进行微调。

5 Meta-TTS

Meta-learning(或者叫“学习如何学习”)旨在设计一个模型如何在极少训练样本场景下快读的学习新的技能或者适应到一个新的环境。因此,Meta-learning非常适用于解决few-shot下游任务。有监督学习中,模型常常用来拟合训练数据,之后在测试数据中评价其效果。与有监督学习类似,meta-learning在一系列训练任务中拟合,之后在一系列测试任务中进行评价。本文采用MAML作为元学习算法,为下游任务学习一个好的meta-initialization。即通过元学习的方式为进一步的迁移学习学习一个好的模型参数初始化状态。算法1展示了MAML的具体流程。

5.1 An introduction to MAML

假定我们将要在一个K-shot回归下游任务上评价模型效果,MAML会基于训练数据生成一系列K-shot回归训练任务,其中每个任务被称作一个适用于元学习的“meta-task”。每个任务包含一个含有K个样本的supprt set,以及一个含有Q个样本的query set。每个任务的学习目标都是基于support set学习任务相关的模型参数(内循环,inner loop)。MAML的目标就是学习meta-initialization参数,每个meta-task都可以基于该参数得到表现不错的任务自适应参数(外循环,outer loop)。这一优化过程称为“meta-update”。


5.2 Meta-training FastSpeech 2 with MAML

本文研究对象为K-shot语音克隆任务,我们需要从多说话人语音合成数据库中构建一系列的meta-tasks。每一个meta-task的support set和query set均包含相同说话人的K个样本和Q个样本。在训练阶段,我们设置K=Q,在模型推理阶段,我们设置Q=1。
为了生成meta-task,我们先从语音合成数据中采用一个说话人,之后针对该说话人随机选择2K个语音样本,其中K个分配到support set,另外K个分配到query set。
在使用MAML算法训练多说话人FastSpeech2模型时,在内循环自适应阶段,文本编码器的参数保持固定不变。meta-training训练流程如图3所示。

5.3 Fine-tuning

MAML的目的是为模型微调学习一个好的参数初始化状态。Meta-TTS的模型微调与第4节中的微调方法相同。因为内循环的目标是模仿微调过程,meta-update更新的模块应该与待微调的模块保持一致(例如:如果我们在模型推理阶段只微调speaker embdding,那么在内循环阶段,我们也只微调speaker embdding table)。


6 Evaluation Metrics

6.1 Human evaluation

Speaker similarity (SMOS)

使用similarity MOS(SMOS)作为说话人相似度的评价指标。

Naturalness(MOS)

使用MOS测试合成语音的音频质量。

6.2 Neural evaluation metrics

Speaker similarity

先分别计算合成语音和对应真实语音的D-vector,之后计算各自D-vector的余弦相似度(cosine similarity)。

Speaker verification

先计算合成语音的D-vector,之后从目标说话人的真是样本中随机选择真实语音计算D-vector。通过判断D-vector的余弦相似度是否超过一定阈值来判断是否属于同一说话人。

Synthesized speech detection

与Speaker verification计算类似,我们从相同说话人的样本中选择语音,分别计算选择语音和合成语音的D-vector后计算余弦相似度。之后通过判断余弦相似度是否超过阈值来判断语音时合成语音还是真实语音。

Naturalness MOS prediction

使用MOSNet、MBNet以及另外3种基于自监督表示的模型对合成语音的MOS值进行预测。

7 Experimental Setup of Speaker Adaptation

本文实验中,我们主要比较多任务多说话人TTS模型(即baseline模型)与Meta-TTS模型在5-shot说话人自适应任务上的表现。对于Meta-TTS,我们设计两种speaker embedding和四种模块微调组合方式。为了实验公平性,我们在baseline模型上同样比较两种不同speaker embedding类型和四种微调组合方式。需要注意的是,baseline模型训练好之后可以在不同的微调组合方式上直接进行微调,而Meta-TTS需要为每种微调组合方式单独进行预先训练。

Datasets

我们使用LibriTTS的train-clean-100数据集进行模型训练,该子数据集包含247个说话人共54小时。
为了验证模型的语音克隆效果,我们不仅使用LibriTTS的test-clean数据集集(39个说话人,时长约8.56小时,平均每个说话人13分钟)进行测试,而且将模型自适应到VCTK数据集(110个说话人,时长约44小时)进行效果测试。

Training

5-shot说话人自适应任务中,每个meta-task在训练过程中只包含一个说话人的10个样本,其中support set和query set各包含5个样本。在meta-training阶段的每个内循环训练中,都对模型进行5次迭代。采用8-GPU进行分布式训练,meta-update的总训练样本书则为80个。为了公平实验,baseline模型的batch size也设置为80。Meta-TTS的meta-update步数与baseline模型的训练步数保持一致,都设置为训练100k步。

Inference

我们为每个说话人采样了16个任务。每个任务包含含有5个样本的support set和1个样本的query set。对于每个task,我们使用support set微调模型,使用query set进行语音合成测试效果。

我们从LibriTTS的test-clean数据集中选择30个说话人、从VCTK中选择80个说话人进行听力测试。

我们观察不同微调步数下的模型表现来探究模型自适应需要的最佳步数。

我们使用另外的6个说话人的语音数据进行MelGAN声码器的训练作为本文实验的声码器。

8 Speaker Adaptation Results

8.1 Speaker similarity

我们使用微调10步的自适应模型来验证Meta-TTS的有效性。SMOS结果如表1所示。如图所示,Meta-TTS的所有结果都优于baseline。


另外,我们可以使用D-vector的余弦相似度来验证说话人自适应效果。我们分别计算合成语音和真实语音的D-vector,之后计算余弦相似度。结果如图4所示。


坐标轴中的数字表示说话人身份,上边一行的结果表示baseline模型在不同自适应步数下的表现,下边一行是Meta-TTS的表现。最右边一列是重建语音与真实语音的相似度结果,可以看到余弦相似度在呈对角线时表示说话人信息趋于一致。因此,从图4结果可以看出,baseline模型在50自适应步数后出现对角线趋势,但是Meta-TTS在5-10步时已经出现对角线趋势。这说明本文的Meta-TTS具有更快的自适应效果,在5步自适应后即可表现很好的自适应效果。

我们又对所有合成语音和真实语音的D-vector都计算了余弦相似度进行统计并计算它们的均值和方差,统计结果如图5所示。


从结果可以看到,Meta-TTS相比baseline模型可以更快的自适应到目标说话人。

8.2 Speaker verification

说话人验证的目的是将目标说话人的合成语音与其他说话人的语音进行有效的区分。图6和图7展示了说话人验证在Equal error rate(EER,越小表示效果越好)和detection error trade-off(DET,越趋向于左下方向表示效果越好)上的结果。



从结果同样可以发现,Meta-TTS达到了最好的效果。

8.3 Visualizing d-vector utterance embeddings

为了直观感受说话人自适应的效果,我们对合成语音的D-vector在图8进行了可视化。


所有的模型都进行了20步的微调。如图所示,baseline模型的向量在向量空间中广泛分布,无集中趋势。而Meta-TTS的向量都比较集中,与目标说话人的向量非常接近。

8.4 Synthesized speech detection

本小节我们评估从真实语音中分辨合成语音的难度。图9和10展示了合成语音检测的ROC曲线。(如果合成语音和真实语音几乎无法区分,那么ROC曲线接近对角线形状,并且ROC AUC的数值会趋于50%。)



从图中曲线我们可以得出与之前相同的结论:Meta-TTS的表现要优于baseline模型。当ROC AUC远低于50%时,意味着我们可以轻易的将合成语音和真实语音分辨出来。因此,图中还可以看出,Meta-TTS可以合成接近目标说话人的语音,但是还没有达到与真实语音难以区分的程度。从伦理角度考虑,这样的结果也是可以接受的。


8.5 Naturalness of synthesized samples

本小节我们进行MOS测试来评价合成语音的音质。我们使用微调10步的模型进行测试。MOS结果如表II和图11。



从表II可以看到,Meta-TTS与baseline的合成语音在音质方面不相上下,但是之前的结果表明Meta-TTS在说话人相似度上实现了更好的效果。因此,Meta-TTS模型在说话人相似度和语音音质两方面实现了一个很好的折中效果。

9 Comparing with Speaker-Encoding Baseline

之前提到,说话人自适应和说话人编码时语音克隆的两种主要方法。之前的实验将说话人自适应模型作为baseline进行比较。本节将添加说话人编码baseline进行效果比较。

我们使用GE2E模型作为说话人编码模型中的说话人编码器。对三中说话人编码器训练方法进行比较:1、与TTS模型联合训练(“scratch encoder”);2、预训练之后固定参数(“D-vector”);3、预训练之后随TTS模型一起更新(“pre-trained encoder”)。

Models

本节对7中模型配置进行比较:

  • 真实/重建语音

  • Meta-TTS和说话人自适应baseline

  • 刚才提到的3种说话人编码baseline

Training

训练方式与说话人自适应baseline相似,但是说话人编码baseline中使用真实语音作为参考音频来获取说话人向量。

Inference

在推理阶段,我们使用support set的目标语音作为query set的参考音频。在5-shot任务场景下,我们需要将5个语音样本分别提取说话人向量,之后进行平均计算得到最终的说话人向量。

9.1 Experimental results

图12、13、14展示了说话人相似度、说话人验证和合成语音检测的结果。




可以看出,说话人编码的第二种方案(即“D-vector”)时最佳方案。不管说话人编码器是否预训练,将说话人编码器与TTS模型一起训练会导致效果下降。这样的结果说明,说话人编码器会很容易的过拟合到TTS训练数据,导致模型泛化性表现不好。

另外,说话人编码baseline中的说话人编码器增加了TTS模型的参数量,并且需要使用另外的大规模数据进行预训练,将其与Meta-TTS直接比较不具有很好的公平性。但是尽管如此,Meta-TTS在VCTK上的合成语音表现与说话人编码baseline不相上下,在LibriTTS上的表现要显著优于说话人编码baseline。

综上所述,对于语音克隆任务,Meta-TTS在训练效率和合成语音相似度上都具有最佳的表现。

10 Related Works

(注:相关文献请查看原文)

文献 [8] 基于DeepVoice3作为基础模型框架实现了两种语音克隆方法:1、使用通用说话人编码器实现说话人编码方法;2、通过微调TTS模型的speaker embedding实现说话人自适应。实验结果表明,如果只对speaker embedding微调,说话人自适应方法与说话人编码方法的效果不相上下。如果对TTS模型参数全部微调,那么说话人自适应方法的效果会显著提升。

SV2TTS模型采用了说话人编码方法,其中说话人编码器是由一个预训练的说话人验证模型迁移得到。模型架构采用Tacotron2。该论文得出结论与文献 [8] 类似:如果目标用户的参考语音少至1-3秒(约1-shot),那么只微调speaker embedding或者使用说话人编码器都可以达到不错的效果。如果使用更多参考语音(约3-shots)对全部模型参数进行微调,那么合成效果也将会进一步提升。

SEA-TTS使用WAVENET作为基本框架,在论文中比较了两种语音克隆方法。SEA-TTS使用两种方法来解决说话人自适应中的过拟合问题:1、将few-shot support data划分为训练集和验证集,并使用early stopping技术;2、在TTS模型训练前,提前对speaker embdeding微调5k-10k步。

AdaSpeech使用FastSpeech2作为基本框架,并且做出两处修改来实现说话人自适应:1、acoustic condition modeling;2、conditional LayerNorm。在说话人自适应阶段,说话人向量与conditional LayerNorm参数一起微调2k步。

本文中,说话人自适应和说话人编码baseline的工作方式与上述工作一致。主要的不同点在于TTS模型结构的不同。本文说话人编码baseline的说话人编码器与SV2TTS中的编码器相同。但是,与上述工作不同的是,本文工作主要关注如何在100步数之内获取高质量的说话人自适应效果。实验证明,本文提出的Meta-TTS可以更加有效的进行说话人自适应,甚至在模型微调步数为10-20步数时,仍然具有优秀表现。另外,尽管说话人编码baseline的说话人编码器在额外的数据进行了预训练,但是与其相比,Meta-TTS在100步微调之后的结果仍然表现出不相上下甚至时更好的合成效果。

11Conclusion

在本文中,我们提出利用元学习在TTS的过程中更快地适应目标说话人。我们从多个角度分析了Meta-TTS模型的适应结果,得出了令人信服的结论: Meta-TTS模型在说话人相似度和适应速度方面明显优于基线多说话人TTS模型。