2018-02-03  661 views 评论

Deep Voice Report个人翻译

个人翻译,水平有限,仅供参考。

摘要

我们展示了Deep Voice,一个完全由深度神经网络构建的生产质量的文本到语音系统。 Deep Voice为真正的端到端神经语音合成奠定了基础。该系统包括五个主要构件:用于定位音素边界的分段模型,字形到音素转换模型,音素持续时间预测模型,基频预测模型和音频合成模型。对于分割模型,我们提出了一种使用连接主义时间分类(CTC)丢失的深度神经网络进行音素边界检测的新方法。对于音频合成模型,我们实现了WaveNet的一个变体,它需要更少的参数,并且训练速度比原来的要快。通过对每个组件使用神经网络,我们的系统比传统的文本托管系统更简单,更灵活,每个组件都需要费力的特征工程和广泛的领域专业知识。最后,我们展示了使用我们的系统进行推理可以比实时更快地进行,并且在CPUGPU上描述优化的WaveNet推理内核,在现有实现上实现高达400倍的加速。

1.介绍

合成从文本到人类语音,俗称文本到语音(TTS),是许多应用中,如语音设备、导航系统和盲人辅助视觉系统的必要成分。 从根本上说,它允许人机交互而不需要视觉界面。 现代TTS系统基于复杂的多级处理流水线,每个处理流水线都可能依赖于手工设计的特征和启发式算法。 由于这种复杂性,开发新的TTS系统可能是非常费力和困难的。

Deep Voice的灵感来源于传统的文本到语音系统,它采用与之相同的结构,但用神经网络替换所有组件,并使用更简单的特点:首先我们将文本转换为音素,然后使用音频合成模型将语言特征转换为语音。 与之前的产品(使用人工设计的特征,如频谱包络,频谱参数,非周期性参数等)不同,我们唯一的特征是带有音调的音素,音素持续时间和基频(F0)。 这种功能的选择使我们的系统更容易适用于新的数据集、语音和其它领域,而无需任何手动数据注释或附加特征工程。我们通过重新训练整个算法来证明这一说法,而对全部新数据集没有任何超参数变化,这个全新数据集只包含音频和未对齐的文本转录,并产生相对高质量的语音。 在传统的TTS系统中,这种调整需要几天到几周的调整,而Deep Voice则只需要几个小时的手动操作和模型训练所需的时间。

实时推断是高质量TTS系统的要求; 没有它,系统对于对于TTS的大多数应用程序是毫无用处的。之前的工作已经证明,WaveNet能够产生接近于人类的语音。然而,由于模型的高频自回归特性,WaveNet产生了了一个令人生畏的计算量,并且迄今为止我们还不知道这种模型是否可用于生产系统。 我们以肯定的方式回答了这个问题,并演示了高效的、比实时更快的WaveNet推理内核,可以生成高质量的16 kHz音频,并且比之前的WaveNet推理实现实现了400倍的加速。

2.相关工作

以前的研究使用神经网络作为TTS系统中几个组件的替代品,这里面包括字形到音素转换模型、音素持续时间预测模型、基频预测模型和音频合成模型。然而,与Deep Voice不同的是,这些系统都不能解决TTS的全部问题,而且其中许多系统都使用专门为其领域开发的专用人工设计功能。

最近,在参数音频合成方面有很多新的研究,如WaveNetSampleRNNChar2Wav。虽然WaveNet可用于有条件和无条件的音频生成,但SampleRNN仅用于无条件音频生成,Char2Wav使用基于注意力的音素持续时间模型和相当于F0预测模型的SampleRNN进行扩展,有效地为基于SampleRNN的声码器提供本地调节信息。

Deep Voice与这些系统在几个关键方面有所不同。 首先,Deep Voice是完全独立的; 培训一个新的Deep Voice系统不需要预先存在的TTS系统,并且可以使用短音频剪辑和相应的文本转录本的数据集从头开始。 相比之下,再现上述系统中的任一个需要访问和理解预先存在的TTS系统,因为它们使用来自另一TTS系统的特征,无论是在训练还是推理时间。

其次,Deep Voice最大限度地减少了手工功能的使用;它使用单字节编码字符来进行音素转换,单编码音素和应力,音素持续时间(以毫秒为单位),以及可以使用任何F0估计算法从波形计算的归一化对数基频。所有这些都可以轻松地从音频和副本中轻松获得。相比之下,以前的作品使用的是更为复杂的特征表示,这使得在没有预先存在的TTS系统的情况下再现系统是不可能的。 WaveNet使用TTS系统中的几个特征,包括一个单词中音节的数量,短语中音节的位置,音素当前帧的位置,以及语音频谱的动态特征,如频谱和激励参数,以及他们的时间派生。 Char2Wav依靠WORLD TTS系统的声码器特性来预先训练它们的对准模块,包括F0,频谱包络和非周期参数。

最后,我们着重于创建一个准产品级的系统,这需要我们的模型实时运行以进行推理。 Deep Voice可以在几分之一秒内合成音频,并在合成速度和音频质量之间提供可调节的折中。 相比之下,WaveNet以前的结果需要几分钟的运行时间才能合成一秒钟的音频。 我们不了解SampleRNN的类似基准,但是原始出版物中描述的三层架构在推理过程中需要大约4-5倍于我们最大的WaveNet模型的计算量,因此实时运行该模型可能会遇到挑战。

3 TTS系统元素

如图1所示,TTS系统由五个主要组成部分组成:

1)字形到音素模型。它将书面文本(英文字符)转换成音素(使用诸如ARPABET的音素字母表编码)。

2)分段模型。它在语音数据集中定位音素边界。 给定一个音频文件和一个音素的音素转录,该分割模型识别每个音素开始和结束在音频中的哪个位置。

3)音素持续时间模型。它是用来预测音素序列(发音)中每个音素的时间持续时间。

4)基频模型。它是用来预测音素是否有声:如果是,则模型预测音素持续时间内的基本频率(F0)。

5)音频合成模型。它实现了字形到音素的输出,音素持续时间和基频预测模型,并以高采样率合成对应于期望文本的音频。

1 描述(a)训练程序和(b)推理程序的系统图

在图中,输入在左边,输出在右边。在我们的系统中,持续时间预测模型和F0预测模型是通过一个联合损失训练的单个神经网络进行的。

在推理过程中,通过字形到音素模型或音素字典输入文本以生成音素。接下来,音素被提供为音素持续时间模型和F0预测模型的输入,以将持续时间分配给每个音素并生成F0轮廓。最后,音素,音素持续时间和F0被用作音频合成模型的本地调节输入特征,产生最终话语。

与其他模型不同,在推断过程中不使用分割模型。而是用于用音素边界来注释训练语音数据。音素边界意味着持续时间,可用于训练音素持续时间模型。用音素和音素持续时间以及基本频率注释的音频被用来训练音频合成模型。

在下面的章节中,我们将详细介绍所有构建块。

3.1 字形到音素模型

我们的字素到音素模型是基于由(YaoZweig2015)开发的编码器解码器架构。然而,我们使用具有门控循环单元(GRU)非线性和同样深度的单向GRU解码器的多层双向编码器。每个解码器层的初始状态被初始化为对应的编码器前向层的最终隐藏状态。该架构是训练与教授强迫和解码是使用波束搜索进行的。 我们在编码器中使用3个双向层,每个编码器有1024个单元,解码器使用3个相同尺寸的单向层,宽度为5个候选者。在训练期间,我们在每个重复层之后以0.95的概率使用丢失。

对于训练,我们使用Adam优化算法 ,批量大小为64,学习速率为 ,并且每1000次迭代施加0.85的退火速率。

3.2 分割模型

我们的分割模型被训练以输出给定话语和目标音素序列之间的对齐。这个任务类似于在语音识别中将语音与书写输出对齐的问题。在这个领域中,连接主义时态分类(CTC)损失函数已经被证明集中在字符对齐以学习声音和文本之间的映射。我们采用最先进的语音识别系统来调整卷积递归神经网络架构的音素边界检测。

CTC训练的生成音素序列的网络将为每个输出音素产生简短的峰值。虽然这足以大致将音素与音频对齐,但是不足以精确地检测精确的音素边界。为了克服这个问题,我们训练预测音素对的序列而不是单个音素。然后这个深度神经网络倾向于以接近两个音素之间的边界的时间步长输出音素对。

为了说明我们的标签编码,考虑字符串“Hello!”。要将其转换为音素对标签序列,需要先将发音转换为音素(使用发音词典,例如CMUDict等),并将音素序列的两端用无声音音素填充以获得“sil HH EH L OW sil”。 最后,构建连续的音素对并获得“(sil, HH), (HH, EH), (EH, L), (L, OW), (OW, sil)”。

通过以十毫秒的步幅计算20Mel频率倒谱系数(MFCC)来输入音频。 在输入层之上,有两个卷积层(时间和频率的二维卷积),三个双向循环GRU层,最后是一个softmax输出层。卷积层使用单位步长,高度9(频率)和宽度5(时间)的内核,并且循环层使用512GRU单元(对于每个方向)。在最后的卷积和重复图层之后应用0.95的概率。为了计算音素对错误率(PPER),我们使用波束搜索进行解码。为了解码音素边界,我们执行宽度为50的束搜索,其中相邻音素对由至少一个音素重叠并且跟踪每个音素对的发音中的位置。

训练中,我们使用Adam优化算法 ,批量大小为128,学习速率为 ,每500次迭代应用0.95的退火速率。

3.3 音素持续时间和基频模型

我们使用单一架构来共同预测音素持续时间和基于时间的基频。模型的输入是一系列具有应力的音素,每个音素和压力被编码为一个热点矢量。该体系结构包括两个完全连接的层,每层256个单元,随后是两个单向递归层,每个层具有128GRU单元,最后是完全连接的输出层。在初始完全连接图层和最后一个重复图层之后,应用概率为0.8的丢弃率。

最后一层为每个输入音素产生三个估计值:音素持续时间,音素发出的概率(即具有基本频率)和20个时间相关的F0值,它们在预测的持续时间内均匀采样。

该模型通过最小化联合损失来优化,所述联合损失结合了音素持续时间误差,基本频率误差,音素被发声概率的负对数似然性和与F0相对于时间的绝对变化成比例的惩罚项以施加平滑。

训练中,我们使用Adam优化算法 ,批量大小为128,学习速率为 ,每400次迭代应用0.9886的退火速率。

3.4 语音合成模块

我们的音频合成模型是WaveNet的一个变种。 WaveNet由一个调节网络和一个自动回归网络组成,该网络可以将语言特征上离散采样得到的样本点 产生期望的频率 。我们改变层数l,残余频道的数量r(每层的隐藏状态的维度)和跳过通道的数量s(在输出层之前投影层输出的尺寸)。

WaveNet由一个上采样和调节网络组成,其次是l 2×1卷积层、带有r个剩余输出通道和双曲正切门控非线性。我们用 将卷积分解为每个时间步长的两个矩阵乘法。这些层与剩余连接相连接。每一层的隐藏状态连接到一个lr个矢量,并投影到跳过 通道,然后是两层1×1的卷积(权重为 )。

WaveNet使用转置卷积进行上采样和调节。我们发现,如果我们首先用一叠双向准RNNQRNN)层对输入进行编码,然后通过重复执行到所需频率的上采样,我们的模型执行得更好,训练速度更快,并且需要更少的参数。

我们的取得很高质量的最终模型使用l=40层,r=64个残留信道,s=256个跳过通道。训练中,我们使用Adam优化算法 ,批量大小为8,学习速率为 ,每1000次迭代应用0.9886的退火速率。

4.测试结果

我们在一个内部的英语语音数据库上训练我们的模型,这个数据库包含大约20个小时的语音数据,分成13079个语音。另外,我们为我们在Blizzard 2013数据的子集上训练的模型展示了音频合成结果。这两个数据集都是由专业的女性演讲者讲的。

另外,我们所有的模型都是使用TensorFlow框架实现的。

4.1 分割模块结果

我们使用8TitanX Maxwell GPU进行训练,在GPU中平均分配每个批次,并使用ring all-reduce来计算在不同GPU上计算的平均梯度,每次迭代大约需要1300毫秒。在大约14,000次迭代之后,该模型收敛到7%的音素对错误率。我们还发现,音素边界不必是精确的,随机移动音素边界10-30毫秒没有任何区别的音频质量,所以怀疑音频质量对错误率未超过某一点并不敏感。

4.2 字形到音素模块的结果

我们对从CMUDict获得的数据训练一个字形到音素的模型。我们删除所有不以字母开头,包含数字或者有多个发音的单词,从原始的133854个字形音素序列对中留下124978个单词。

我们在单个TitanX Maxwell GPU上进行训练,每次迭代大约需要150毫秒。经过大约20000次迭代后,模型收敛到5.8%的音素错误率和28.7%的字错误率,这与之前的报告结果一致。与以前的工作不同,我们在解码期间不使用语言模型, 包括在我们的数据集中有多个发音的单词。

4.3 音素持续时间和基本频率模块结果

我们在单个TitanX Maxwell GPU上进行训练,每次迭代大约需要120毫秒。经过大约20000次迭代后,模型收敛到38毫秒(对于音素持续时间)和29.4Hz(对于基频)的平均绝对误差。

4.4 语音合成模块结果

我们将音频数据集中的话语分成一个块,每个块有四分之一的上下文,在开始时用四分之一秒的静音填充每个话语。我们过滤掉主要是沉默的块,最后总共有74348个块。

们训练了不同深度的模型,包括剩余层堆叠中的10,20,3040层。我们发现20层以下的模型会导致音质不佳。20层,30层和40层模型都产生高质量的可识别语音,但是40层模型比20层模型具有更低的噪声,可以用高品质的耳机进行检测。

以前的工作已经强调了在确定模型质量时接受场尺寸的重要性。事实上,20层模型只有40层模型的一半。然而,当以48kHz运行时,具有40层的模型只有83毫秒的接收场,但仍然产生高质量的音频。这表明20层模型的接受场是足够的,我们推测音频质量的差异是由于接受场大小以外的其他因素。

我们在8TitanX Maxwell GPU上训练,每个GPU有一个块,使用ring allreduce来平均在不同GPU上计算出的梯度。每次迭代大约需要450毫秒。我们的模型在大约300000次迭代之后收敛。我们发现单个1.25s块足以使GPU上的计算饱和,并且批处理不会提高训练效率。

与高维生成模型一样,模型损失与个体样本的感知质量有些不相关。虽然具有非常高的损耗声音模型明显嘈杂,模型优化低于一定的阈值没有损失指示其质量。另外,模型架构的变化(如深度和输出频率)可能会对模型损失产生重大影响,同时对音频质量的影响很小。

为了评估我们TTS管道各个阶段的感知质量,我们使用CrowdMOS工具包和方法,从Mechanical Turk获得了众多的平均评分(MOS)评级。为了分离音频预处理效果、WaveNet模型质量、音素持续时间和基频模型质量,我们给出了各种话语类型的MOS分数,包括WaveNet输入(持续时间和F0),从真实音频中提取而不是由其他模型合成的综合结果,结果如表1所示。我们有意将绝对真实样本包含在批评者评估的每批样本中,以突出人类言语中的三角洲,并允许评估者区分模型之间的细微差别; 这种方法的不足之处在于,由此产生的MOS分数将显着低于仅以合成音频样本呈现的评分者。

1 平均意见评分

类型

模型大小

MOS±CI

绝对真实声音(48kHz

4.75±0.12

绝对真实声音

4.45±0.16

绝对真实声音(扩展)

4.34±0.18

合成声音

l=40,   r=64, s=256

3.94±0.26

合成声音(48kHz

l=40,   r=64, s=256

3.84±0.24

合成声音(合成的F0)

l=40,   r=64, s=256

2.76±0.31

合成声音(持续时间和F0

l=40,   r=64, s=256

2.00±0.23

合成声音(2倍实时推理)

l=20   r=32, s=128

2.74±0.32

合成声音(1倍实时推理)

l=20   r=64, s=128

3.35±0.31

首先,当简单地将音频流从48kHz下采样到16kHz时,我们发现MOS的显着下降,尤其是与μ律压缩和量化相结合,这可能是因为48kHz采样被呈现给评估者作为基准一个5分和一个低质量噪声合成结果被表示为1。当将绝对真实持续时间和F0一起使用时,我们的模型得分很高,我们的模型的95%置信区间与地面真实样本的相交。然而,使用合成频率减小了MOS,进一步合成持续时间显着减小了它。我们得出结论:自然TTS发展的主要障碍在于持续时间和基频预测,而我们的系统在这方面并没有有意义的进展。最后,我们的最佳模型运行速度略低于实时(见表2),所以我们证实,合成质量可以通过获得比实时快12倍的模型的分数来调制模型大小进行快速推理。

我们还测试了WaveNet模型,这些模型是从原始的WaveNet出版物的全套特征进行训练的,但是发现在这些模型和模型之间没有感觉上的差异。

2 针对float32int16中不同模型的CPUGPU推理内核基准

模型

平台

数据类型

线程数

实时加速

l=20, r=32, s=128

CPU

float32

6

2.7

l=20, r=32, s=128

CPU

float32

2

2.05

l=20, r=64, s=128

CPU

int16

2

1.2

l=20, r=64, s=128

CPU

float32

6

1.11

l=20, r=64, s=128

CPU

float32

2

0.79

l=40, r=64, s=256

CPU

int16

2

0.67

l=40, r=64, s=256

CPU

float32

6

0.61

l=40, r=64, s=256

CPU

float32

2

0.35

l=20, r=32, s=128

GPU

float32

N/A

0.39

l=20, r=64, s=128

GPU

float32

N/A

0.29

l=40, r=32, s=128

GPU

float32

N/A

0.23

l=40, r=64, s=128

GPU

float32

N/A

0.17

5 结论

在这项工作中,我们通过建立一个完全的神经系统来证明当前的深度学习方法对于高质量的文本到语音引擎的所有组件是可行的。我们将推理优化为比实时更快的速度,表明这些技术可以用于以流媒体方式实时生成音频。 我们的系统可以在没有任何人员参与的情况下进行训练,大大简化了创建TTS系统的过程。

我们的工作打开了许多新的可能的探索方向。 通过仔细优化,GPU上的模型量化和CPU上的int8量化,以及其他体系结构的实验,可以进一步提高推理性能。 另一个自然的方向是消除阶段之间的分离,并将分割,持续时间预测和基频预测模型直接合并到音频合成模型中,从而将问题转化为完整的序列到序列模型,从而创建单个端到端模型, 结束了可训练的TTS系统,使我们能够在没有中间监督的情况下训练整个系统。 代替融合模型,通过更大的训练数据集或生成建模技术来改进持续时间和频率模型可能会对语音自然度产生影响。

给我留言

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: