本文对 Chengyi Wang 等人于 2023 年发表的论文进行简单地翻译。如有表述不当之处欢迎批评指正。欢迎任何形式的转载,但请务必注明出处。

论文链接https://arxiv.org/pdf/2301.02111

论文目的

提出一种用于 TTS 的语言建模方法。

Abstract

我们介绍了一种用于文本到语音(TTS)的语言建模方法。具体来说,我们训练一个神经编码器语言模型(neural codec language model,称为 VALL-E),该模型使用从现成的神经音频编码器模型中得到的离散 codes,并将 TTS 视为一个条件语言建模任务,而不是像以往的工作中那样,将其视为连续信号回归任务。在预训练阶段,我们将 TTS 训练数据扩大到 60 K 60\text{K} 60K 小时的英文语音,这比现有系统大数百倍。VALL-E 展现出了上下文学习(in-context learning)能力,并且能够在只提供 3 3 3 秒钟未见过的说话人语音作为声学 prompt 的情况下,合成高质量的个性化语音。实验结果表明,在语音自然度和说话人相似性方面 VALL-E 远远超越当前最先进的 zero-shot TTS 系统。此外,我们发现 VALL-E 能够在合成的语音中,保留声学 prompt 中说话人的情感和声学环境。可以在 https://aka.ms/valle 里体验我们工作的 demos.

1. Introduction

过去十年间,随着神经网络和端到端建模的发展,语音合成任务取得了巨大的突破。目前,级联的 TTS 系统通常包含一个声学模型和一个声码器(vocoder),其将梅尔谱( mel spectrograms)作为中间表示。虽然先进的 TTS 系统能够使用单个或多个说话人来合成高质量的语音,但它仍然需要来自录音棚的高质量干净数据。从互联网上抓取的大规模数据并不能满足该要求,而且通常会降低合成质量。由于训练数据相对较少,现代 TTS 系统的泛化性依然较差。在 zero-shot 场景中,对于未见过的说话人,其说话人相似性和语音自然度急剧下降。为了处理 zero-shot TTS 问题,现有工作使用说话人自适应和说话人编码的方法,这都需要额外的 fine-tuning,复杂的预先设计的特征,或繁重的结构工程。

图 1

相比于设计一个复杂而特定的网络结构,该问题的终极解决方案是使用尽可能多且多样化的数据来训练模型,这是受文本合成领域成功的启发。近年来,随着文本语言模型的数据量的增加,其性能有了显著提升,从 16 GB 16\text{GB} 16GB 未压缩的文本,到 160 GB 160\text{GB} 160GB,再到 570 GB 570\text{GB} 570GB,最终达到 1 TB 1\text{TB} 1TB 左右。将这一成功应用到语音合成领域,我们提出了 VALL-E,即第一个基于语言模型的 TTS 框架,其使用了大量、多样且多说话人的语音数据。如图 1 所示,为了合成个性化语音(例如 zero-shot TTS),VALL-E 根据 3 3 3 秒时长的注册语音的声学 tokens 和音素 prompt 来生成相应的声学 tokens,这两个条件分别约束了说话人和内容信息。最终,生成的声学 tokens 将通过相应的神经编解码器的解码器部分来合成最终的波形。从音频编解码器模型中得到的离散声学 tokens 能够让我们将 TTS 视为条件编解码器语言建模,从而可以将基于 prompting 的大模型技术应用于 TTS 任务。声学 tokens 还能允许我们在推理过程中使用不同的采样策略,以生成不同的 TTS 结果。

我们使用 LibriLight 来训练 VALL-E,这是一个包含了 60 K 60\text{K} 60K 小时,多达 7000 7000 7000 个说话人的英语语料库。原始的数据只包含音频,所以我们首先使用语音识别模型来生成对应的文本。与先前的 TTS 训练数据集相比,例如 LibriTTS,我们的数据包含更多的含噪语音和不正确的文本,但却提供了多样化的说话人和韵律。我们相信通过使用大量数据,所提方法对噪声是鲁棒的,并且具有很好的泛化性。值得注意的是现有的 TTS 系统所使用的训练数据,通常是数十小时的单说话人数据或数百小时的多说话人数据,比 VALL-E 的训练数据量小了上百倍。表 1 总结了 VALL-E 的创新,这是一种用于 TTS 的语言模型方法,它使用音频编解码器的 codes 作为中间表示,并使用大量多样化的数据,从而实现强大的上下文学习能力。

表 1

我们在 LibriSpeechVCTK 数据集上评估 VALL-E,其中所有的说话人都是在训练语料中未见到过的。在语音自然度和说话人相似性方面,VALL-E 显著优于最先进的 zero-shot TTS 系统,在 LibriSpeech 上,CMOS (comparative mean option score) 提升了 0.12 0.12 0.12SMOS (similarity mean
option score)
提升了 0.93 0.93 0.93VALL-E 还以 0.11 0.11 0.11SMOS 提升以及 0.23 0.23 0.23CMOS 提升击败了 VCTK 的基线。相比于真实音频,它的 CMOS 提升了 0.04 0.04 0.04,表明它合成的未见过的说话人语音和 VCTK 中的人类录音一样自然。此外,定性分析表明,VALL-E 使用同样的文本和目标说话人能够合成多种输出,这可以为语音识别任务创建数据。我们还发现 VALL-E 能够保留声学 prompt 中的声学环境(例如混响)和情感(例如愤怒)。

总而言之,我们的贡献如下:

  • 我们提出了 VALL-E,这是第一个与 GPT-3 一样,具有强大上下文学习能力的 TTS 框架,它将 TTS 视为一个语言模型任务,并使用音频编解码器的 codes 作为中间表示来取代传统的梅尔谱。它具有上下文学习能力,而且能够将基于 prompt 的方法用于 zero-shot TTS,与先前的工作不同,这不再需要额外的结构工程,预先设计的声学特征以及 fine-tuning

  • 我们利用大量的半监督数据在说话人维度上构建了一个通用的 TTS 系统,这表明简单地扩大半监督数据对 TTS 的影响被低估了。

  • 使用同样的输入文本,VALL-E 能够提供多样的输出,而且还能保留声学 prompt 中的声学环境和说话人情感。

  • 我们验证了在 zero-shot 场景下,通过 promptingVALL-E 能够合成很自然并且说话人相似度也较高的语音。评估结果表明在 LibriSpeechVCTK 数据上,VALL-E 显著超越了最先进的 zero-shot TTS 系统。

我们鼓励读者访问 https://aka.ms/valle,来体验我们的样例。

2. Related Work

Zero-Shot TTS: 现有的 TTS 方法可以被分类为级联和端到端的方法。级联的 TTS 系统通常包含一个声学模型和一个声码器,其将梅尔谱作为中间表示。为了解决声码器的缺点,端到端的 TTS 模型被提出,它可以联合优化声学模型和声码器。在实际场景中,在只有极少数录音数据的情况下,能够定制一个用于任意声音的 TTS 系统是非常令人期待的一件事。因此,人们对 zero-shot 多说话人 TTS 技术的兴趣日益浓厚,并且大多数工作都使用的是级联 TTS 系统。作为先驱者,Arik 等人于 2018 2018 2018 年提出了说话人自适应和说话人编码技术。在说话人自适应方面,Chen 等人于 2019 2019 2019 年,Wang 等人于 2020 2020 2020 年和 Chen 等人于 2021 2021 2021 年的工作都试图通过减少目标说话人的数据和说话人特定的参数,来提高自适应的有效性。Huang 等人于 2022 2022 2022 年的工作将 meta-learning 应用于说话人自适应,这只需要 5 5 5-shot 就能构建一个性能较好的系统。与此同时,基于说话人编码的方法也在近些年取得了巨大的进步。基于说话人编码的系统包含一个说话人编码器,以及一个 TTS 组件。其中,说话人编码器可以在说话人验证任务上进行预训练。在 Jia 等人于 2018 2018 2018 年和 Arik 等人于 2018 2018 2018 年的工作中,实验表明模型能够利用 3 3 3 秒的录音数据为域内(in-domain)说话人生成高质量的输出。为了提高未见过的说话人的质量,可以使用先进的说话人 embedding 模型,不过 Tan 等人于 2021 2021 2021 年的工作表明这仍然不是很理想。另一种方法是设计先进但复杂的说话人编码器。基于 diffusion 模型的 TTS 也被扩展到了 zero-shot TTS,并取得了较好的结果。与先前的工作相比,我们的工作也是基于级联 TTS,但是是第一个将音频编解码器 code 作为中间表示的。这是第一个与 GPT-3 一样,具有强大上下文学习能力的 TTS 框架,它不需要 fine-tuning,预先设计的特征或复杂的说话人编码器。

Spoken generative pre-trained models: 自监督学习在语音理解和语音到语音生成领域得到了广泛研究。在语音到语音生成中,一个热门话题是在无文本的情况下合成语音。GSLM 提出了基于 HuBERT codes 合成语音的方法,Polyak 等人于 2021 2021 2021 年通过结合 HuBERT codes、VQVAE codes 和一个说话人编码器提升了其性能。AudioLM 也遵循了相似的方法,但是是使用音频编解码器和语义 codes 来合成语音。需要注意的是 AudioLM 可以基于音频编解码器来合成语音,而不需要额外训练一个像 HifiGAN 这样的声码器。AudioLM 是一个语音到语音的模型,而 VALL-E 是一个 TTS 模型,所以我们可以显式地控制语音合成的内容。另一个方向是将预训练用于神经 TTSChung 等人于 2018 2018 2018 年的工作,通过自回归梅尔谱预测的方式对 TTS 中的语音解码器进行预训练。在 Ao 等人于 2022 2022 2022 年的工作中,作者提出了一个统一模态的编-解码器框架 SpeechT5,它可以使用未标注的语音和文本数据,对 TTS 模型中的所有组件进行预训练。Tjandra 等人于 2019 2019 2019 年的工作,通过 VQVAE 将未标注的语音量化为离散 tokens,并使用 token-to-speech 序列来训练模型。他们证明了预训练模型只需要少量的真实数据进行 fine-tuningBai 等人于 2022 2022 2022 年的工作提出对梅尔谱进行掩蔽并恢复,这在语音编辑和合成任务上,展示出了更好的性能。先前的 TTS 预训练工作只使用少于 1 k 1\text{k} 1k 小时的数据,而 VALL-E 使用 60 k 60\text{k} 60k 小时的数据。此外,VALL-E 首次将音频编解码器 codes 作为中间表示,并在 zero-shot TTS 中展现了上下文学习能力。

3. Background: Speech Quantization

音频通常被存储为 16 -bit 16\text{-bit} 16-bit 的整数序列,所以一个生成模型在每个时间步需要从 2 16 = 65536 2^{16}=65536 216=65536 个候选值中输出一个合适的值来合成音频。此外,较大的音频采样率会导致序列长度特别长,给音频合成带来了更大的困难。为此需要进行语音量化来压缩整数值和序列长度。 μ -law \mu\text{-law} μ-law 变换能够将每个时间步量化成 256 256 256 个值,并重构出高质量的音频。它被广泛地用于语音生成模型中,比如 WaveNet,但总体的推理速度仍然会比较慢,因为序列长度并没有减少。近年来,矢量量化(vector quantization)被广泛用于自监督语音模型中以提取特征,例如 vq-wav2vecHuBERTLakhotia 等人于 2021 2021 2021 年以及 Du 等人于 2022 2022 2022 年的工作都表明,自监督模型生成的 codes 也可以重构内容,而且推理速度快于 WaveNet。然而,说话人的身份被丢弃了,并且重构质量较低。AudioLM 使用来自于自监督模型的 k-means tokens 和来自于神经编解码器模型的声学 tokens 来训练 speech-to-speech 语言模型,从而实现高质量的 speech-to-speech 生成。

在这篇文章中,我们遵循 AudioLM 的工作,使用神经编解码器模型将语音表示为离散 tokens 的形式。为了压缩音频以用于网络传输,编解码器模型能够将波形编码为离散的声学 codes,而且可以重构出高质量的波形,即使说话人是在训练过程中未见过的。与传统的音频编解码器模型相比,神经编解码器在低比特率情况下表现得更好,我们相信量化的 tokens 中包含了关于说话人和录制环境的足够信息。与其它量化方法相比,音频编解码器展示出了以下优势:1)包含丰富的说话人信息和声学信息,与 HuBERT codes 相比,这可以在重构中保留说话人的身份信息。2)存在现成的解码器可以将离散的 tokens 转换为波形,而不需要像基于 VQ 的方法那样额外训练声码器。3)它可以提高效率,以应对 μ -law \mu\text{-law} μ-law 变换中的问题。

图 2

我们使用一个预训练的神经音频编解码器模型—EnCodec—来作为我们的 tokenizerEnCodec 是一个卷积编-解码器模型,其输入输出都是 24 kHz 24\text{kHz} 24kHz 的音频,支持可变比特率。编码器部分输入 24 kHz 24\text{kHz} 24kHz 的波形,输出 75 Hz 75\text{Hz} 75Hzembeddings,采样率降低了 320 320 320 倍。每个 embedding 都由 RVQ(residual vector quantization) 进行建模,我们选择了 8 8 8 个层次量化器,每个量化器有 1024 1024 1024entries,如图 2 所示。该配置对应于 EnCodec 工作在 6 K 6\text{K} 6K 比特率下。在这个设置中,给定一个 10 10 10 秒的波形,其离散表示是一个 750 × 8 750\times8 750×8 的矩阵,其中 750 = 24000 × 10 320 750=\frac{24000\times10}{320} 750=32024000×10 8 8 8 是量化器的数量。也可以选择其它的比特率。比特率越大就表示量化器数量越多,重构质量就越好。例如,如果令比特率等于 12 K 12\text{K} 12K,那么就需要 16 16 16 个量化器, 10 10 10 秒的波形对应的矩阵是 750 × 16 750\times16 750×16EnCodec 的卷积解码器使用编码器生成的离散 codes,来生成实值 embeddings,并重构出 24 kHz 24\text{kHz} 24kHz 的波形。

4. VALL-E

4.1 Problem Formulation: Regarding TTS as Conditional Codec Language Modeling

给定一个数据集 D = { x i , y i } \mathcal{D} = \{\mathbf{x}_i, \mathbf{y}_i\} D={xi,yi},其中 y \mathbf{y} y 是音频样本, x = { x 0 , x 1 , ⋯ x L } \mathbf{x} = \{x_0, x_1, \cdots x_L\} x={x0,x1,xL} 是对应的音素转录(phoneme transcription),我们使用预训练的神经编解码器模型来将每个音频样本编码成离散的声学 codes,表示为 Encodec( y \mathbf{y} y) = C T × 8 = \mathbf{C}^{T\times8} =CT×8,其中 C \mathbf{C} C 表示二维的声学 code 矩阵, T T T 是下采样后的句子长度。每个声学 code 矩阵的行向量 c t , : \mathbf{c}_{t,:} ct,: 表示第 t t t 帧的 8 8 8codes,列向量 c : , j \mathbf{c}_{:,j} c:,j 表示来自于第 j j jcodebookcode 序列,其中 j ∈ { 1 , ⋯   , 8 } j\in\{1,\cdots,8\} j{1,,8}。经过量化之后,神经编解码器的解码器部分能够重构出波形,表示为 Decodec ( C ) ≈ y ^ \text{Decodec}(\mathbf{C}) \approx \hat{\mathbf{y}} Decodec(C)y^

Zero-shot TTS 需要用模型来合成未见过的说话人的高质量语音。在这项工作中,我们将 zero-shot TTS 视为条件编解码器语言建模(conditional codec language modeling)任务。在给定音素序列 x \mathbf{x} x 和声学 prompt 矩阵 C ~ T ′ × 8 \tilde{\mathbf{C}}^{T^{'}\times8} C~T×8 的条件下,我们训练一个神经语言模型来生成声学 code 矩阵 C \mathbf{C} C,优化目标是最大化 p ( C ∣ x , C ~ ) p(\mathbf{C}|\mathbf{x}, \tilde{\mathbf{C}}) p(Cx,C~) C ~ \tilde{\mathbf{C}} C~ 是注册语音经过相同的神经编解码器得到的。我们期望神经语言模型学习抽取音素序列中的内容和声学 prompt 中的说话人信息。在推理阶段,给定一个音素序列和一个未见过的说话人的 3 3 3 秒语音,训练好的语言模型先估计出声学 code 矩阵。然后,神经编解码器的解码器部分再合成高质量的语音。

4.2 Training: Conditional Codec Language Modeling

神经语音编解码器模型允许我们对离散的音频表示进行处理。由于神经编解码器模型中的残差量化,tokens 有着层级结构:前面的量化器的 tokens 可以恢复例如说话人身份等的声学特性,后面的量化器可以学习更精细的声学细节。每个量化器都被训练以建模来自先前量化器的残差。受此启发,我们也以层级的方式设计了两个条件语言模型。

对于第一个量化器的离散 tokens c : , 1 \mathbf{c}_{:,1} c:,1,我们训练一个自回归(AR)的 decoder-only 的语言模型。如下式:
p ( c : , 1 ∣ x , C ~ : , 1 ; θ A R ) = ∏ t = 0 T p ( c t , 1 ∣ c < t , 1 , c ~ : , 1 , x ; θ A R ) \begin{align} p(\mathbf{c}_{:,1}|\mathbf{x}, \tilde{\mathbf{C}}_{:,1}; \theta_{AR}) = \prod_{t=0}^{T}p(\mathbf{c}_{t,1}|\mathbf{c}_{<t,1}, \tilde{\mathbf{c}}_{:,1}, \mathbf{x}; \theta_{AR}) \tag{1} \end{align} p(c:,1x,C~:,1;θAR)=t=0Tp(ct,1c<t,1,c~:,1,x;θAR)(1)

因为 VALL-E 是一个 decoder-onlyLM c ~ : , 1 \tilde{\mathbf{c}}_{:,1} c~:,1 c : , 1 \mathbf{c}_{:,1} c:,1 的拼接就是一整个序列,我们在训练过程中不对它们进行区分,也不会插入特殊的 token。在推理时, c ~ : , 1 \tilde{\mathbf{c}}_{:,1} c~:,1 是给定的,只有 c : , 1 \mathbf{c}_{:,1} c:,1 需要预测。

对于第二个到最后一个量化器的离散 tokens c : , j ∈ [ 2 , 8 ] \mathbf{c}_{:,j\in[2,8]} c:,j[2,8] 来说,我们训练一个非自回归(NAR)的语言模型。由于在非自回归的方式中,tokens 之间无法互相访问,为了约束说话人身份,将矩阵 C ~ \tilde{\mathbf{C}} C~ 作为声学 prompt。因此,该模型是以音素序列 x \mathbf{x} x,声学 prompt C ~ \tilde{\mathbf{C}} C~ 和先前的 codebooks 预测的声学 tokens C : , < j \mathbf{C}_{:,<j} C:,<j 为条件的:
p ( C : , 2 : 8 ∣ x , C ~ ; θ N A R ) = ∏ j = 2 8 p ( c : , j ∣ C : , < j , x , C ~ ; θ N A R ) (2) p(\mathbf{C}_{:,2:8}|\mathbf{x}, \tilde{\mathbf{C}}; \theta_{NAR}) = \prod_{j=2}^{8}p(\mathbf{c}_{:,j}|\mathbf{C}_{:,<j}, \mathbf{x}, \tilde{\mathbf{C}}; \theta_{NAR}) \tag{2} p(C:,2:8x,C~;θNAR)=j=28p(c:,jC:,<j,x,C~;θNAR)(2)

AR 模型和 NAR 模型的结合很好地权衡了生成的语音质量和推理速度。一方面,生成的语速应该和注册语音的语速保持一致,但由于不同说话人的语速差异可能很大,训练一个长度预测器非常困难。在这种情况下,AR 模型凭借其对声学序列长度预测的灵活性,成为了一个更自然的选择。另一方面,NAR 可以将时间复杂度从 O ( T ) \mathcal{O}(T) O(T) 降低到 O ( 1 ) \mathcal{O}(1) O(1)。总体来说, C \mathbf{C} C 的预测可以建模为:
p ( C ∣ x , C ~ ; θ ) = p ( c : , 1 ∣ C ~ : , 1 , X ; θ A R ) ∏ j = 2 8 p ( c : , j ∣ c : , < j , x , C ~ ; θ N A R ) (3) p(\mathbf{C}|\mathbf{x}, \tilde{\mathbf{C}}; \theta) = p(\mathbf{c}_{:,1}|\tilde{\mathbf{C}}_{:,1}, \mathbf{X}; \theta_{AR}) \prod_{j=2}^{8}p(\mathbf{c}_{:,j}|\mathbf{c}_{:,<j}, \mathbf{x}, \tilde{\mathbf{C}}; \theta_{NAR}) \tag{3} p(Cx,C~;θ)=p(c:,1C~:,1,X;θAR)j=28p(c:,jc:,<j,x,C~;θNAR)(3)

4.2.1 Autoregressive Codec Language Modeling

自回归语言模型生成第一个量化器的 tokens。它包含一个音素 embedding W x W_x Wx,一个声学 embedding W a W_a Wa,一个 transformer 解码器和一个预测层。为了生成指定内容的语音,我们将音素序列作为语言模型的音素 prompt。因此,模型的输入是 x \mathbf{x} x c : , 1 \mathbf{c}_{:,1} c:,1 的拼接,并且在这两个序列的尾部各添加一个特殊的 token 。我们分别计算 prompt tokens 和输入 tokens 的正弦位置 embedding。对于因果 transformer 模型来说,如图 3 左半部分所示,每个 token c t , 1 \mathbf{c}_{t,1} ct,1 都可以与 ( x , c ≤ t , 1 ) (\mathbf{x}, \mathbf{c}_{\leq t,1}) (x,ct,1) 进行 attend。该模型被优化以最大化第一个 codebook 中的下一个 token 的概率。我们共享输出投影层的参数与声学 embedding W a W_a Wa 的参数。

图 3

AR 模型中,我们在训练时并未显式提取音频片段作为 prompt。训练过程是纯粹的因果语言模型训练。通过这种方式,任何 c < t , 1 \mathbf{c}_{<t, 1} c<t,1 都被看作是 c ≥ t , 1 \mathbf{c}_{\geq t, 1} ct,1prompt。在推理阶段,给定一个注册语音,我们会把该注册语音的音素序列和用于合成的音素序列拼接到一起。同时,将注册语音的声学 token 序列作为 AR 解码中的前缀,如公式 ( 1 ) (1) (1) 所展示的那样。我们将在实验部分研究这种设置的优越性。

4.2.2 Non-Autoregressive Codec Language Modeling

当我们使用 AR 模型获得第一个量化器的 codes 后,我们应用 NAR 模型来生成其它 7 7 7 个量化器的 codesNAR 的模型结构与 AR 的类似,不同之处在于前者包含了 8 8 8 个独立的声学 embedding 层。在每个训练步骤中,我们随机选择一个训练阶段 i ∈ [ 2 , 8 ] i\in[2,8] i[2,8]。模型被训练以最大化来自第 i i i 个量化器 codebook 中的声学 tokens 的概率。阶段 1 1 1 到阶段 i − 1 i-1 i1 的声学 tokens 会被 embedded 并相加作为模型的输入:
e c t , j = W a j ⊙ c t , j e c t = ∑ j = 1 i − 1 e c t , j \begin{align} e_{c_{t,j}} &= W_a^{j} \odot c_{t,j} \tag{4} \\ \mathbf{e}_{\mathbf{c_t}} &= \sum_{j=1}^{i-1}e_{c_{t,j}} \tag{5} \end{align} ect,ject=Wajct,j=j=1i1ect,j(4)(5)

其中 ⊙ \odot 表示索引选择。音素序列也被认为是语言模型的 prompt。此外,为了克隆给定说话人的独特音色,我们也将注册语音的声学 tokens 作为声学 prompt。特别地,我们首先使用神经编解码器模型将注册语音 tokenize C ~ T × 8 \tilde{\mathbf{C}}^{T\times8} C~T×8。将来自所有 8 8 8codebooksembedded 表示进行相加,以做为声学 prompt e c ~ t = ∑ j = 1 8 e c ~ t , j \mathbf{e}_{\tilde{\mathbf{c}}_\mathbf{t}} = \sum_{j=1}^{8} e_{\tilde{c}_{t,j}} ec~t=j=18ec~t,j。为了预测来自第 i i icodebook 的声学 tokenstransformer 的输入是 ( e x , e c ~ , e c : , < i ) (\mathbf{e_x}, \mathbf{e_{\tilde{c}}}, \mathbf{e_c}_{:,<i}) (ex,ec~,ec:,<i) 的拼接。也会分别计算 prompts 和声学序列的位置 embeddings。当前阶段 i i i 通过 Adaptive Layer Normalization 算子注入到网络中,即 AdaLN ( h , i ) = a i LayerNorm ( h ) + b i \text{AdaLN}(h,i) = a_i \text{LayerNorm}(h) + b_i AdaLN(h,i)=aiLayerNorm(h)+bi,其中 h h h 是中间激活值, a i a_i ai b i b_i bi 是从 embedding 阶段的线性投影中获得的。与 AR 不同,NAR 模型允许每个 tokenattend 自注意力层的所有输入 tokens。我们也共享声学 embedding 层和输出预测层的参数,这意味着第 j j j 个预测层的权重与第 j + 1 j+1 j+1 个声学 embedding 层的权重一样。

4.2.3 Inference: In-Context Learning via Prompting

上下文学习 (in-context learning) 是基于文本的语言模型的一种令人惊讶的能力,它可以在没有额外参数更新的情况下,预测未见过的输入的标签。对于 TTS 来说,如果模型可以在不 fine-tuning 的条件下合成未见过的说话人的高质量语音,那么该模型就被认为是具有上下文学习能力的。然而,现有的 TTS 系统的上下文学习能力并不强大,因为这些系统要么需要额外的 fine-tuning,要么合成的未见过的说话人的语音质量会很差。

对于语言模型来说,prompting 是使得模型在 zero-shot 场景中具备上下文学习能力所必需的。我们按照如下的方式设计 prompts 和推理。我们首先将文本转换为音素序列,并将注册语音编码成一个声学矩阵,以形成音素 prompt 和声学 prompt。这两种 prompts 都被用于 ARNAR 模型。对于 AR 模型来说,在给出这两种 prompts 的条件下,我们使用基于采样的解码方式,因为我们观察到 beam search 可能会令 LM 陷入无限循环。此外,基于采样的方法能够显著提升输出的多样性。对于 NAR 模型来说,我们使用贪心解码的方式来选择概率最高的 token。最后,我们在给定 8 8 8code 序列的情况下,使用神经编解码器的解码器部分来生成波形。这些声学 prompt 可能与待合成的语音在语义上相关,也可能不相关,因此会出现两种情况:
VALL-E: 我们感兴趣的是为未见过的说话人生成给定的内容。输入给模型的是一段文本,一个注册语音片段和其对应的转录。我们将注册语音的转录音素添加到给定文本的音素序列的前面,以作为音素 prompt,并将注册语音的第一层声学 token c ~ : , 1 \tilde{c}_{:,1} c~:,1 作为声学前缀。有了音素 prompt 和声学前缀,VALL-E 会为给定文本生成模仿了该说话人音色的声学 tokens
VALL-E-continual: 在此设置中,我们将完整的转录文本和注册语音的前 3 3 3 秒分别作为音素 prompts 和声学 prompts,并要求模型生成后续内容。推理过程与设置 VALL-E 时相同,唯一不同的是注册语音和生成的语音在语义上是连续的。

5. Experiment

5.1 Experiment Setup

Dataset: 训练数据集为 LibriLight,它包含了 60 K 60\text{K} 60K 小时未标记的英语有声读物语音,包含了大约 7000 个不同的说话人。我们按照 Kaldi 的方法,在 960 960 960 小时带标注的 LibriSpeech 数据集上训练了一个混合 DNN-HMM ASR 模型。一旦混合模型训练完成,未标注的语音数据将被解码并转录为最佳音素级对齐路径 (the best phoneme-level alignment paths),所用帧移为 30 30 30 毫秒。使用 EnCodec 模型生成这 60 K 60\text{K} 60K 小时数据的声学 code 矩阵。
Model: AR 模型和 NAR 模型都使用相同的 transformer 结构,其包含了 12 12 12 层, 16 16 16 个注意力头,embedding 的维度为 1024 1024 1024,前馈层的维度为 4096 4096 4096dropout 设置为 0.1 0.1 0.1LibriLight 中波形文件的平均长度为 60 60 60 秒。在训练阶段,我们随机将波形裁剪为 10 10 10~ 20 20 20 秒的片段。其对应的音素对齐将被作为音素 prompt。我们移除了强制对齐音素序列中的连续重复部分。我们从同一句子中随机选择一个 3 3 3 秒长的波形片段,来作为 NAR 的声学 prompt tokens

模型使用 16 16 16NVIDIA TESLA V100 32GB GPUs 进行训练,每张 GPUbatch size 6 k 6\text{k} 6k 个声学 tokens,共训练 800 k 800\text{k} 800k 步。使用 AdamW 优化器来优化模型,在前 32 k 32\text{k} 32k 次更新中将学习率预热到峰值 5 × 1 0 − 4 5 \times 10^{-4} 5×104,然后线性衰减。

Baseline: 我们选择最先进的 zero-shot TTS 模型 YourTTS 作为 baseline,它的训练数据集包含 VCTK,LibriTTSTTS-Portuguese。我们使用开源出来的 checkpoint

Automatic metrics: 我们使用最先进的说话人验证模型 WavLM-TDNN 来评估 prompt 语音和合成语音中的说话人的相似性。WavLM-TDNN 2021 2021 2021 年和 2022 2022 2022 年的 VoxSRC 挑战赛排行榜上名列前茅。它在 Vox1-O,Vox1-EVox1-H 上的平均 Equal Error Rate(EER)分别是 0.383 , 0.480 0.383,0.480 0.3830.480 0.986 0.986 0.986WavLM-TDNN 预测的相似性分数范围为 [ − 1 , 1 ] [-1, 1] [1,1],数值越大表示输入样本的相似性就越高。

我们还评估了模型的合成鲁棒性。神经 TTS 系统存在鲁棒性问题,有时会出现删除、插入和替换错误,这是由不正确的注意力对齐导致的。我们对生成的音频进行语音识别,并计算 WER。在这个实验中,我们把在 LibriSpeech 960 h 960\text{h} 960h 上微调的 HuBERT-Large 模型作为识别模型,这是一个基于 CTC 的模型,没有语言模型的融合。

Human evaluation: 我们通过众包的方式计算 CMOSSMOS。SMOS 的分数范围从 1 1 1 5 5 5,每次 递增 0.5 0.5 0.5 分。CMOS 的范围从 − 3 -3 3(新系统比基线差很多)到 3 3 3(新系统比基线好很多),间隔为 1 1 1CMOS 是语音自然度的指标,SMOS 衡量语音与原始说话人的相似度。

5.2 LibriSpeech Evaluation

我们先用 LibriSpeech 来评估 zero-shot TTS,因为 LibriLightLibriSpeech 没有重叠的说话人。按照 Borsos 等人的做法,我们使用 LibriSpeech 中时长在 4 4 4 秒到 10 10 10 秒之间的音频,得到一个 2.2 2.2 2.2 小时的子集。对于每个样本的合成,VALL-E 随机选取同一说话人的另一个语音片段,并截取其中的 3 3 3 秒作为注册语音。每个实验运行三次,并取平均分。VALL-E-continual 使用真实语音的前三秒作为注册语音。

表 2

2 给出了客观评价结果。我们先计算真实语音的 WER 和说话人相似度分数,以作为上限。为了比较说话人相似度,我们使用测试集中同一说话人的语音对。与基线 YourTTS 相比,我们的模型在鲁棒性和说话人相似度方面都表现地更好,这表明我们生成的语音高度匹配于给定的文本和注册语音。此外,VALL-E-continualWER 更低,这是因为前 3 3 3 秒的声学 tokens 来自于真实语音。我们也比较了其它基于 LM 的语音到语音的生成模型,即 GSLMAudioLM,它们都将音频潜在编码作为输入。GSLMHuBERT 编码作为输入,并使用 Tacotron2 模型和 WaveGlow 声码器来重构音频波形。我们使用官方开源出来的代码和模型。由于 HuBERT 编码丢失了说话人身份信息,因此其说话人相似度的分数较低。对于 AudioLM,我们列出了其论文中报告的通过 Conformer Transducer 模型得到的 WER。实验结果表明,在鲁棒性方面,VALL-E 优于其它基于 LM 的语音到语音的生成模型。一个主要原因是 VALL-E 使用 pseudo-phoneme 进行训练,而不是 HuBERT/w2v-BERT 编码,这使得它与输入文本的对齐质量更好。

对于 LibriSpeech 测试集中的每个说话人,我们随机选择其说的一个语音片段来做主观测评,总共得到了 40 40 40 个测试用例。表 3 给出了主观评测结果。VALL-E 与真实音频的 SMOS 非常接近,这表明合成的语音与测试集中未见过的说话人很相似。它比基线模型的 SMOS 高出了 0.93 0.93 0.93,证明了 VALL-Ezero-shot 场景下的有效性。在自然度方面,VALL-E 比基线模型的 CMOS 高出 0.12 0.12 0.12,这表明提出的方法能比基线模型合成出更自然、更真实的语音。

表 3

Ablation study: 在本小节,我们进行了详细的消融实验。我们首先研究了 NAR 模型。我们训练了 3 3 3 个不同 prompts 数量的 NAR 模型。NAR-no prompt 表示训练时没有任何 promptsNAR-phn prompt 表示训练时只将音素序列作为 promptNAR-2 prompts 表示训练时将音素 prompt 和声学 token prompt 作为条件。评估时,我们使用真实的 first-level 声学 tokens 作为模型输入,并计算 WER 和说话人相似度。表 4 给出了结果。结果显示,即使声学输入 token 是真实的,NAR-no promptASR 和说话人相似度方面依然表现得很差。添加了音素 prompt 后,WER 19.6 19.6 19.6 降到 3.0 3.0 3.0。这表明音素 prompt 的主要贡献在于生成的内容。在 NAR-2 prompts 中,模型可以从声学 token prompt 中学习到说话人的信息,因此可以提高说话人的相似度。

表 4

我们进一步在 AR 模型上进行消融实验。在这些实验中,我们将 NAR-2 prompts 作为 NAR 模型。在表 5 中,我们可以看到当移除声学 promptw/o 声学 prompt),说话人相似度只有 0.236 0.236 0.236,这表明声学 prompt 对说话人身份识别至关重要。即使 NAR 模型可以看到 promptpromptAR 模型在保持说话人相似度上也有显著贡献。

表 5

5.3 VCTK Evaluation

我们也在 VCTK 上评估了我们的模型,评估集包含了 108 108 108 个训练时未见过的说话人。因为 YourTTS 训练时见过 VCTK 中的 97 97 97 个说话人,因此我们分别在全部的 108 108 108 个和 11 11 11 个未见过的说话人上对 YourTTS 进行评估。对于每个说话人,我们随机选择了时长为 3 3 3 秒、 5 5 5 秒和 10 10 10 秒的语音片段作为 prompt,并使用另一段语音的文本作为文本 prompt

表 6

我们首先使用前述的说话人验证指标来评估两个模型。从表 6 可以看出,即使基线模型在训练时已经见过 97 97 97 个说话人,VALL-E 依然表现得更好,这表明我们的模型可以合成说话人相似度更高的语音。当我们在 11 11 11 个说话人上进行比较的时候,两者之间的差异变得更大,特别是在 3 3 3 秒时长 prompts 的情况下。通过比较不同时长的 prompt,我们可以看到当 prompt 变长时,我们的模型能够生成更相似的语音,这与我们的直觉是一致的。

我们选择了 60 60 60 个说话人用于主观评估。YourTTS 在训练时见过其中的 49 49 49 个说话人,而 VALL-E 未见过其中任何一个说话人。表 7 展示了我们的方法和基线模型与真实录音的对比。SMOS 的对比结果表明,VALL-E 比基线模型的说话人相似度更高。VALL-ECMOS 也比 YourTTS 0.23 0.23 0.23,这表明在合成的自然度上也比基线模型好。VALL-E 合成的自然度与真实录音相比也没有明显的差异。

表 7

5.4 Qualitative Analysis

Diversity: 以前的 TTS 系统在输入文本和输出波形之间有着很强的一一映射关系,这是因为梅尔谱的生成过程不具有随机性。由于 VALL-E 使用基于采样的方法来生成离散 tokens,因此对于同样的输入文本,由于推理的随机性,它的输出是不同的。给定一句文本以及注册语音,我们跑两次推理过程,生成的波形如图 4。在图 4(a) 中,我们观察到生成的两个输出时长不同,第一个输出的语速更快。在图 4(b) 中,我们观察到两个输出的重音位置不同。与第一个输出相比,第二个输更强调单词 “must”,它有着更大的幅度。

在一些下游场景中,多样性非常重要。例如,不同说话人和不同声学环境的多样化输入能提升语音识别的性能,而之前的 TTS 系统是无法满足这点的。鉴于 VALL-E 多样性的特点,它是生成语音识别训练数据的理想选择。

图 4

Acoustic environment maintenance: 另一个有趣的发现是,生成的语音和声学 prompt 中的声学环境一致。如果声学 prompt 中存在混响,那么 VALL-E 合成的语音中也存在混响,而基线系统生成的是不带混响的语音。我们给出的解释是,VALL-E 使用的训练数据集规模更大,声学条件更多,因此它在训练期间可以学习到声学一致性。

Speaker’s emotion maintenance: 情感 TTS 是语音合成领域的一个经典话题,它能合成带有目标情感的语音。传统的方式都是在有监督的情感 TTS 数据集上训练模型,数据集中的语音都有对应的转录和情感标签。我们发现 VALL-E 能够在 zero-shot 的设置下保留 prompt 中的情感。我们从 EmoV-DB 中选取声学 prompts,这是一个包含了五种情感的语音数据集,VALL-E 能够在语音合成过程中保留 prompt 中的情感,即使模型不在情感 TTS 数据集上进行微调。

6. Conclusion, Limitations, and Future Work

我们介绍了 VALL-E,一种用于 TTS 的语言模型方法,它将音频编解码器的 codes 作为中间表示。我们使用 60 K 60\text{K} 60K 小时的语音数据对 VALL-E 进行预训练,并展示了其在 zero-shot 场景中的上下文学习能力。我们在 LibriSpeechVCTK 数据集上实现了zero-shot TTS 最先进的成果。此外,VALL-E 能够在语音合成过程中保持声学环境和说话人的情感,并能在基于采样的解码过程中提供多样化的输出。

即使取得了较大的进展,VALL-E 仍然存在一些问题。
Synthesis robustness: 我们观察到在语音合成中有些词可能会不清晰、遗漏或重复。这主要是因为音素到声学的语言部分是一个自回归模型,可能存在着不正确的注意力对齐现象,并且没有约束来解决这个问题。这种现象在基于原始 TransformerTTS 中也有出现,通常通过使用非自回归模型或修改注意力机制来应对。在未来,我们希望利用这些技术来解决这个问题。

Data coverage: 即使使用 60 K 60\text{K} 60K 的数据,仍然不能覆盖到每个人的声音,尤其是有口音的说话人。此外,说话风格的多样性也不足,LibriLight 中的语音大多都是朗读风格。将来,我们将进一步扩大训练数据,以提高模型在韵律,说话风格和说话人相似度方面的性能。我们相信通过扩大模型和数据规模, zero-shot TTS 几乎可以通过我们的方法被解决。

Model Structure: 这里我们使用两个模型来预测不同量化器的 codes。一个有前景的方向是使用一个大的通用模型来预测它们。另一个有趣的方向是使用 NAR 模型,以加快模型推理速度。

Broader impacts: 因为 VALL-E 能够合成保留说话人身份信息的语音,因此模型滥用可能会带来潜在风险。为降低这种风险,可以训练一个检测模型来区分语音片段是否由 VALL-E 生成。

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐