Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

17.3 VALL-E:使用两阶段语言模型生成音频

正如引言所总结的,VALL-E 这类 TTS 系统接收待合成文本和目标声音样本作为输入,并将二者分词:文本使用 BPE,语音使用音频编解码器。随后使用语言模型,以条件方式生成与文本提示对应、并采用语音样本声音的离散音频词元。

图 17.7 VALL-E 的两阶段语言建模方法。图中展示了自回归 Transformer 的推理阶段,以及 7 个非自回归 Transformer 中的前 3 个。离散音频编码序列分两阶段生成:首先,自回归语言模型从左到右生成第一个量化器的所有编码;然后调用非自回归模型 7 次,生成其余编码,每次都以先前量化器的所有编码(包括右侧编码)为条件。

VALL-E 不使用单个自回归语言模型执行条件生成,而是使用两个不同语言模型组成的两阶段过程。这一架构选择受到 RVQ 量化器层次结构的影响:第一个 RVQ 量化器的输出对最终语音最重要,后续量化器对最终信号贡献越来越少的残差信息。因此,语言模型分两个阶段生成声学编码。首先,自回归语言模型根据输入文本和已登记的语音,为整个输出序列生成第一个量化器的编码。然后给定这些编码,运行非自回归语言模型 7 次;每次接收初始自回归编码和前一个非自回归量化器的输出,逐一生成其余量化器的编码。图 17.7 展示了推理步骤的直觉。

下面更详细地看看架构。训练时,给定一个音频样本 yy 及其分词后的文本转写 x=[x0,x1,,xL]\mathbf{x}=[x_0,x_1,\ldots,x_L]。使用预训练 ENCODEC 把 yy 转换为编码矩阵 CC。设 ENCODEC 输出的下采样向量数量为 TT,每个向量有 8 个编码,则编码器输出可以表示为

CT×8=ENCODEC(y)(17.5)\mathbf {C} ^ {T \times 8} = \operatorname{ENCODEC} (\mathbf {y})\tag{17.5}

这里 CC 是一个二维声学编码矩阵,包含 T×8T\times 8 个元素;列表示时间,行表示不同量化器。也就是说,矩阵的行向量 ct,:\mathbf{c}_{t,:} 包含第 tt 帧的 8 个编码,列向量 c:,j\mathbf{c}_{:,j} 包含第 jj 个向量量化器产生的编码序列,其中 j[1,,8]j\in[1,\ldots,8]

给定文本 xx 和音频 CC,我们训练 TTS 作为条件编码语言模型,使 CC 在给定 xx 时的似然最大:

L=logp(Cx)=logt=0Tp(c<t,,x)(17.6)\begin{array}{l} L = - \log p (\mathbf {C} | \mathbf {x}) \\ = - \log \prod_ {t = 0} ^ {T} p (\mathbf {c} _ {< t, \cdot}, \mathbf {x}) \end{array}\tag{17.6}

图 17.8 VALL-E 的训练过程。给定文本提示,先训练自回归 Transformer,以自回归方式生成第一个量化器编码序列中的每个编码;非自回归 Transformer 再根据前面的编码序列生成其余编码。图源:Chen et al.(2025)。

图 17.8 展示了这一思想。左侧是音频样本及其转写,二者都进行分词。随后在 xx 后追加一个 [EOS] 和一个 [BOS] 词元,在 CC 末尾追加一个 [EOS] 词元,训练自回归 Transformer 预测声学词元:从 c0,1\mathbf{c}_{0,1} 开始,直到 [EOS];然后使用非自回归 Transformer 填充其他词元。

推理时,给定要朗读的文本序列,以及来自未见说话人的一段已登记语音样本 y\mathbf{y}'(其转写为文本 y\mathbf{y}')。先运行编解码器,为 y\mathbf{y}' 获取声学编码矩阵:

CP=C:T,:=[c0,:,c1,:,,cT,:]{\mathbf{C}}^P=\mathbf{C}_{:T',:}=[\mathbf{c}_{0,:},\mathbf{c}_{1,:},\ldots,\mathbf{c}_{T',:}]

接着,把 y\mathbf{y}' 的转写拼接到待朗读文本序列上,形成总输入文本 xx,并通过文本分词器。此时,我们拥有分词后的文本 xx 和分词后的音频提示 CP{\mathbf{C}}^P

然后以文本序列 xx 和提示 CP{\mathbf{C}}^P 为条件,生成

CT=C>T,:=[cT+1,:,,cT,:]{\mathbf{C}}^T=\mathbf{C}_{>T',:}=[\mathbf{c}_{T'+1,:},\ldots,\mathbf{c}_{T,:}]

CT=argmaxCTp(CTCP,x)=argmaxCTt=T+1Tp(ct,:c<t,:,x)(17.7)\begin{array}{l} \mathbf {C} ^ {T} = \underset {\mathbf {C} ^ {T}} {\operatorname{argmax}} p (\mathbf {C} ^ {T} | \mathbf {C} ^ {P}, \mathbf {x}) \\ = \underset {\mathbf {C} ^ {T}} {\operatorname{argmax}} \prod_ {t = T ^ {\prime} + 1} ^ {T} p (\mathbf {c} _ {t,:} | \mathbf {c} _ {< t,:}, \mathbf {x}) \end{array}\tag{17.7}

最后,生成的词元 CT{\mathsf{C}}^T 可以由 ENCODEC 解码器转换为波形。图 17.9 展示了这一过程。

图 17.9 VALL-E 的推理过程。图源:Chen et al.(2025)。先把已登记语音 3 秒内容的转写置于待生成文本之前,并对语音和文本进行分词。接着,自回归 Transformer 以转写和声学提示为条件,开始生成第一个编码 cT+1,1\mathbf{c}_{T'+1,1}

更多关于 Transformer 组件及训练细节的信息,参见 Chen et al.(2025)。