了解文本转语音及其由变压器实现的方式
2019年,FastSpeech在神经网络文本转语音领域取得了重大突破,其推断速度显著提高,同时保持了鲁棒性,防止单词重复或遗漏。它还允许对输出语音进行控制,包括语音和韵律。
本文旨在使您熟悉变压器在文本转语音中的应用,为您提供关于FastSpeech论文的简明概述,并指导您如何从头开始实现它。我们假设您已熟悉变压器及其各个组件。如果不熟悉,我们强烈推荐阅读涉及此主题的前文文章。

目录
· 背景 ∘ 介绍 ∘ Mel频谱图· 论文概述 ∘ 介绍 ∘ 实验和结果 ∘ 架构 ∘ 编码器 ∘ 长度调节器 ∘ 解码器· 实现 ∘ 策略 ∘ 完整实现
背景
介绍
传统的文本转语音(TTS)模型依赖于串联和统计技术。串联技术通过将来自音素数据库的声音进行串联来合成语音(音素是语言中的声音单位)。统计技术(例如,HMMs)尝试对足以生成波形的语音的基本属性进行建模。这两种方法往往存在产生自然声音或表达情感的问题。换句话说,它们倾向于为给定的文本产生不自然或机器人化的语音。
使用深度学习(神经网络)进行TTS可以显著提高语音质量。这样的方法通常由两个主要模型组成:第一个模型接受文本并输出对应的Mel频谱图,第二个模型接受Mel频谱图并合成语音(称为声码器)。
Mel频谱图

在其最基本的形式中,演讲波形只是一系列表示随时间变化的气压变化的振幅序列。我们可以使用短时傅里叶变换(STFT)将任何波形转换为相应的Mel频谱图(这是一个表示原始波形在不同时间窗口的不同频率的幅度的矩阵)。使用短时傅里叶变换将一段音频映射到其Mel频谱图很容易;然而,反向操作要困难得多,最佳系统方法(例如Griffin Lim)可能会产生粗略的结果。一种首选的方法是为此任务训练一个模型。已经为此任务训练的现有模型包括WaveGlow和WaveNet。
因此,重申一下,深度学习方法通常通过训练模型来预测与许多文本实例相对应的语音的Mel频谱图来进行文本到语音的处理。然后它依赖于另一个模型(称为声码器)来将预测的频谱图映射到音频。FastSpeech使用Nvidia的WaveGlow模型。

论文概述
引言
虽然最近基于Transformer的TTS方法在语音质量上大大提高了,但仍存在以下三个主要问题:
- 它们的推理速度较慢,因为变形金刚的解码器是自回归的。也就是说,它们按照先前生成的片段生成Mel频谱图的块。这也适用于基于RNN和CNN的旧的深度学习模型。
- 它们不够稳健;由于在顺序生成过程中传播的对齐错误(也称为注意力分数)会导致单词跳过或重复。
- 它们缺乏一种简单的方法来控制生成的语音的特征,如速度或韵律(例如语调)。
FastSpeech试图解决这三个问题。它与其他变形金刚架构的两个关键区别是:
- 解码器是非自回归的;它是完全可以并行化的;因此,解决了速度问题。
- 它在解码器之前使用一个长度调整器组件,试图确保音素和Mel频谱图之间的理想对齐,并且省去了交叉注意力组件。
- 长度调整器的工作方式通过超参数轻松控制语音速度。类似地,还可以以类似的方式控制韵律的微小属性,如停顿持续时间。
- 作为对长度调整的回报,它在训练过程中使用了序列级别的知识蒸馏。换句话说,它依赖于另一个已经训练好的文本到语音模型进行训练(Transformer TTS模型)。
实验和结果
作者使用了LJSpeech数据集,其中包括大约24小时的音频长度散布在13100个音频剪辑中(每个剪辑都附带其相应的输入文本)。训练任务是输入文本并使模型预测相应的频谱图。约95.6%的数据用于训练,其余的用于验证和测试。
- 推理加速它将推理速度提高了38倍(如果不包括声码器,则为270倍),与自回归变形金刚TTS模型相比;因此,被称为FastSpeech。
- 音频质量根据20位英语母语者的平均意见分数,作者已经表明FastSpeech与Transformer TTS模型和Tacotron 2(当时的最先进技术)的质量非常接近。
- 稳健性FastSpeech在50个具有挑战性的文本到语音示例上的跳过和重复方面的错误率为零,而Transformer TTS和Tacotron 2分别为24%和34%。
- 可控性作者提供了示例来证明速度和停顿持续时间的控制工作。
- 消融实验作者确认了在变形金刚中集成1D卷积和使用序列级别的知识蒸馏等决策的有效性。他们揭示了在缺乏每个决策时(以平均意见得分衡量)的性能下降。
架构

第一张图展示了整个架构,包含编码器、长度调整器和解码器:

前馈变换器(FFT)块在编码器和解码器中使用。它类似于变换器中的编码器层,但将位置级别的 FFN 替换为 1D 卷积。超参数 N 表示编码器和解码器中连接的 FFT 块的数量。论文中设置 N 为 6。
长度调整器根据持续预测器(第三张图)调整其输入的序列长度。持续预测器是第四张图中显示的简单网络。
你应该能够直观地了解数据流的形式如下:

编码器
编码器接受一个与文本中给定字符相对应的整数序列。可以使用字素到音素转换器将文本转换为音素字符序列,如论文中所述;然而,在训练过程中,我们将仅使用字母作为字符单元,并假设模型可以在训练过程中学习所需的任何音素表示。因此,对于输入“Say hello!”,编码器将接受一个包含 10 个整数序列 [“S”,”a”,”y”,…,”!”]。
与变换器编码器类似,编码器的目的是为每个字符分配丰富的向量表示,该向量表示考虑了音素字符本身、其顺序以及与给定文本中其他字符的关系。与变换器类似,编码器在 Add & Norm 方面,仍保持了分配向量的维度。
对于具有 n 个字符的输入序列,编码器输出 [h₁,h₂,…,hₙ],其中每个表示的维度为 emb_dim。
长度调整器
长度调整器的作用是将编码器为每个字符提供的表示重复。其理念是文本中每个字符的发音通常对应于多个(或零个)梅尔频谱图单位(由解码器生成);它不仅仅是声音的一个单位。通过梅尔频谱图单位,我们指的是梅尔频谱图中的一列,它将声音的频率分布分配给对应列的时间窗口,并对应于波形中的实际声音。
长度调整器的操作如下:
- 预测每个字符的梅尔频谱图单位数。
- 根据该数量重复编码器表示。
例如,给定与“knight”对应的输入字符的编码器表示 [h₁, h₂, h₃, h₄, h₅]。在推断时间内发生以下情况:
- 长度调整器将每个表示传递给持续预测器,持续预测器使用表示(涉及与文本中所有其他字符的关系)来预测表示梅尔频谱图的数量的单个整数。
- 假设持续预测器返回 [ 1, 2, 3, 2, 1],然后长度调整器根据预测的持续时间重复每个隐藏状态,得到 [h₁, h₂, h₂, h₃, h₃, h₃, h₄, h₄, h₅]。现在我们知道序列的长度(为 10)是梅尔频谱图的长度。
- 然后将这个新序列传递给解码器。
值得注意的是,在实际情况下,将 “knight” 传递给 FastSpeech,并检查持续预测器的输出得到 [ 1, 8, 15, 3, 0, 17]。注意到字母“k”,“g”,“h”与其他字母相比,对梅尔频谱图的贡献微不足道。实际上,当该单词发音时,主要发音的是字母“n”,“i”,“t”。
可控性 通过缩放预测的持续时间,可以轻松控制速度。例如,如果 [ 1, 8, 15, 3, 0, 17] 被加倍,说单词 knight 的时间将是原来的两倍(加快 0.5 倍),如果乘以一半(然后四舍五入),则说单词的时间将减少一半(加快 2 倍)。还可以仅更改与特定字符(例如空格)对应的持续时间,以控制其发音的持续时间(例如,暂停的持续时间)。
训练
在训练中,FastSpeech 不使用持续时间预测模型(没有经过训练),而是使用经过训练的 TTS Transformer 的注意力矩阵来预测持续时间。
- 该变压器中的交叉注意力通过注意力矩阵将每个字符和 Mel 频谱单元与注意力分数关联起来。
- 因此,在 FastSpeech 的训练中,为了预测字符 c 的 Mel 频谱单元数(即持续时间),它通过使用 TTS Transformer 中的交叉注意力矩阵计算在该字符上具有最大注意力的 Mel 频谱单元数。
- 由于交叉注意力涉及多个注意力矩阵(每个头一个),它在最“对角线”的注意力矩阵上执行此操作。这可能确保字符和 Mel 频谱单元之间的真实对齐。
- 它还使用此持续时间来训练持续时间预测模型(简单的回归任务)。这样我们在推理过程中就不需要这个教师模型了。
解码器
解码器接收这种新的表示形式,并旨在预测每个 Mel 频谱单元的频率内容(向量)。这等同于预测与文本相对应的整个频谱图,可以使用声码器将其转换为音频。
解码器的结构与编码器类似。它只是将第一个块(嵌入层)替换为线性层作为最后一个块。这个层使用之前解码器中的 FFT 块为 Mel 频谱单元形成的复杂特征表示来产生每个 Mel 频谱单元的频率向量。
频率数 n_mels 是该层的超参数,在论文中设置为 80。

实现

策略
FastSpeech 架构对应于

我们将从实现以下部分开始:

和

然后我们可以实现编码器和解码器,因为它们的组合是

现在我们只需要长度调节器

因为一旦完成了最后一步

全面实现
为了避免在本文中出现大量的代码,我之前已经准备了一个带有注释的笔记本,其中包含一个经过组织、代码优化和友好学习的版本的原始实现,用于推断目的。你可以在Github或Google Colab上找到它。请注意,Google Colab上无法播放声音(您必须下载并离线运行笔记本)。强烈建议在开始实现之前,您先了解变压器架构中的不同组件。

希望本文所提供的解释对于增强您对FastSpeech及其架构的理解,并指导您如何从零开始实现它,有所帮助。下次再见,再会。