【论文翻译】Deep Voice 3:通过卷积序列学习来扩展语音合成

Deep Voice 3 引入了全卷积序列到序列式模型来进行语音合成,这种新架构在语音训练速度上有了数量级的提升,经过800 多个小时的语音数据学习,它可以合成 2400 多钟不同的语音结果。Deep Voice 3的意义在于探索语音合成模型训练的数据容量上限。

原论文链接: Deep Voice 3: Scaling Text-to-Speech with Convolutional Sequence Learning

摘要

       我们提出Deep Voice 3,一种全卷积的基于注意力的神经文本到语音(TTS)系统。Deep Voice 3在自然性方面与最先进的神经语音合成系统相匹敌,同时训练速度提高了一个数量级。我们将Deep Voice 3扩展到语音合成中前所未有的数据集大小,使用超过2000个说话人的800多小时的音频进行训练。此外,我们确定基于注意力的语音合成网络的常见错误模式,演示如何减轻它们,并比较几种不同的波形合成方法。我们还描述了如何在单个GPU服务器上将推理量扩展到每天一千万次查询。

1. 介绍

       文本到语音(TTS)系统将书面语言转换为人类语音。 TTS系统用于各种应用,例如人机接口,视障人士的可访问性,媒体和娱乐。传统的TTS系统基于复杂的多级手工设计的流水线(Taylor, 2009)。通常,这些系统首先将文本转换为紧凑的音频表征,然后使用称为声码器的音频波形合成方法将该表征转换为音频。

       最近关于神经TTS的研究已经展示了令人印象深刻的结果,产生的流水线具有更简单的特征,更少的组件和更高质量的合成语音。关于TTS的最佳神经网络架构还没有达成共识。然而,序列到序列模型(Wang et al., 2017; Sotelo et al., 2017; Arık et al., 2017)已展示出有前途的结果。

       在本文中,我们提出了一种新颖的,完全卷积的语音合成架构,将其扩展到非常大的音频数据集,并解决了在尝试部署基于注意力的TTS系统时出现的几个实际问题。

  1. 我们提出了一种完全卷积的字符到频谱图架构,它能够实现完全并行计算,并且相比使用循环单元的相似架构(例如, Wang et al., 2017)训练快一个数量级。

  2. 我们展示了我们的架构能够快速训练并扩展到LibriSpeech语音识别数据集(Panayotov et al., 2015),该数据集包含来自2484个说话人的820小时音频数据。

  3. 我们证明我们可以产生单调的注意力行为,避免通常影响序列到序列模型的错误模式。

  4. 我们比较了几种波形合成方法的质量,包括WORLD(Morise et al., 2016),Griffin-Lim (Griffin & Lim, 1984),以及WaveNet (Oord et al., 2016)。

  5. 我们描述了Deep Voice 3的推理内核的实现,它可以在一个单GPU服务器上提供高达每天一千万次查询。

2. 相关工作

       我们的工作建立在神经语音合成和基于注意力的序列到序列学习的最新技术基础之上。

       最近的一些工作使用神经网络来解决合成语音的问题,包括Deep Voice 1 (Arık et al., 2017), Deep Voice 2 (Arık et al., 2017),Tacotron (Wang et al., 2017), Char2Wav (Sotelo et al., 2017),VoiceLoop (Taigman et al., 2017),SampleRNN (Mehri et al., 2017),以及WaveNet (Oord et al., 2016)。Deep Voice 1和2保留了TTS流水线的传统结构,将字形到音素转换,时长和频率预测以及波形合成分开。与Deep Voice 1和2相反,Deep Voice 3采用基于注意力的序列到序列模型,产生更紧凑的架构。与Deep Voice 3类似,Tacotron和Char2Wav提出了神经TTS的序列到序列模型。Tacotron是一种神经的文本到频谱图转换模型,与Griffin-Lim一起用于频谱图到波形的合成。Char2Wav预测WORLD声码器(Morise et al., 2016)的参数,并使用以WORLD参数为条件的SampleRNN进行波形生成。与Char2Wav和Tacotron相反,Deep Voice 3避免了循环神经网络(RNN)以加速训练(RNN在训练期间引入了限制模型并行性的序列依赖性)。Deep Voice 3使得基于注意力的TTS对于TTS生产系统是可行的,通过避免常见的注意力错误而在准确性方面没有妥协。最后,WaveNet和SampleRNN是用于波形合成的神经声码器模型。在文献中还有许多高质量的手工设计声码器的替代品,例如STRAIGHT (Kawahara et al., 1999),Vocaine (Agiomyrgiannakis, 2015),以及WORLD (Morise et al., 2016)。Deep Voice 3没有添加新颖的声码器,但有可能通过略微修改架构,与不同的波形合成方法集成。

       自动语音识别(ASR)数据集通常比传统的TTS语料库大得多,但往往不太干净,因为它们通常涉及多个麦克风和背景噪声。虽然先前的工作已将TTS方法应用于ASR数据集(Yamagishi et al., 2010),据我们所知,Deep Voice 3是第一个使用单一模型扩展到数千个说话人的TTS系统。

       序列到序列模型(Sutskever et al., 2014; Cho et al., 2014)将可变长度输入编码成隐藏状态,然后由解码器处理以产生目标序列。注意力机制允许解码器在生成目标序列时自适应地选择编码器隐藏状态以聚焦(Bahdanau et al., 2015)。基于注意力的序列到序列模型广泛应用于机器翻译(Bahdanau et al., 2015),语音识别(Chorowski et al., 2015),和文本摘要(Rush et al., 2015)。最近与Deep Voice 3相关的注意力机制的改进包括在训练期间强制单调注意力(Raffel et al., 2017),完全注意力的非循环架构(Vaswani et al., 2017),和卷积序列到序列模型(Gehring et al., 2017)。Deep Voice 3展示了在TTS训练期间单调注意力的效用,这是一个预期单调性的新领域。另外,我们展示了,通过简单的探索,只在推理阶段强制单调性,标准的注意力机制可以同样好甚至更好。Deep Voice 3还通过引入类似于Vaswani et al. (2017)使用的位置编码,建立在Gehring et al. (2017)的卷积序列到序列架构之上,并增加速率调整,以解决输入和输出域长度之间的不匹配问题。

3. 模型架构

【论文翻译】Deep Voice 3:通过卷积序列学习来扩展语音合成_第1张图片

       在本节中,我们将介绍用于TTS的完全卷积序列到序列架构(见图1)。我们的架构能够将各种文本特征(例如字符,音素,重音)转换为各种声码器参数,如梅尔频谱图,线性对数幅度谱图,基频,频谱包络和非周期性参数。这些声码器参数可用作音频波形合成模型的输入。

       Deep Voice 3架构包含3个组件:

  • 编码器:一个完全卷积编码器,将文本功能转换为内部学习表征。

  • 解码器:一种完全卷积的因果解码器,它利用多跳卷积注意力机制将学习的表征以自回归方式解码成低维音频表征(梅尔谱图)。

  • 转换器:一个完全卷积的后处理网络,它从解码器隐藏状态预测最终的声码器参数(取决于声码器选择)。与解码器不同,转换器是非因果的,因此可以依赖于未来的上下文信息。

       要优化的总体目标函数是来自解码器(3.5节)和转换器(3.7节)的损失的线性组合。我们将解码器和转换器分开并应用多任务训练,因为它使得注意力学习在实践中更容易。具体而言,梅尔谱图预测的损失指导了注意力机制的训练,因为注意力的训练利用了梅尔谱图预测以及声码器参数预测的梯度。

       在多说话人场景中,如Arık et al. (2017)所述的可训练的说话人嵌入用于编码器,解码器和转换器。接下来,我们将详细描述每一个组件和数据预处理。模型超参数在附录C的表4中。

3.1 文本预处理

       文本预处理对于良好的性能至关重要。 提供原始文本(带空格和标点符号的字符)可以在许多话语中产生可接受的性能。然而,有些话语可能会误读罕见的词语,或者可能会产生跳过的单词和重复的单词。我们通过如下的输入文本规范化来缓解这些问题:

  1. 我们在输入文本中大写所有字符。

  2. 我们删除所有中间标点符号。

  3. 我们用句号或问号结束每一个话语。

  4. 我们用特殊的分隔符替换单词之间的空格,这些分隔符表示说话人在单词之间插入的停顿时长。我们使用四个不同的单词分隔符,表示(i)含糊不清的单词,(ii)标准发音和空格字符,(iii)单词之间的短时停顿,以及(iv)单词之间的长时停顿。例如句子“Either way, you should shoot very slowly,”在way后带有长时停顿,在shoot后带短时停顿,可以写成“Either way%you should shoot/very slowly%.”,%表示长时停顿,/表示短时停顿,以这种方式来实现编码的便利(停顿时长可以通过手工标记或通过文本音频对齐器,例如Gentle(Ochshorn & Hawkins, 2017)估计来获得。 我们的单说话人数据集是手工标记的,我们的多说话人数据集使用Gentle进行标注)。

3.2 字符和音素的联合表征

       部署的TTS系统(例如,Capes et al., 2017; Gonzalvo et al., 2016)应该包括修改发音以纠正常见错误的方法(通常涉及专有名词,外语词汇和特定领域的行话)。这样做的传统方法是维护一个字典以将单词映射到他们的注音表示。

       我们的模型可以直接将字符(包括标点符号和空格)转换为声学特征,从而学习隐式的字形到音素模型。当模型出错时,很难纠正这种隐式转换。因此,除了字符模型,我们还通过明确允许音素输入选项来训练仅音素模型和混合字符-音素模型。除了编码器的输入层有时接收音素和音素重音嵌入而不是字符嵌入之外,这些模型与仅字符模型相同。

       仅音素模型需要预处理步骤将单词转换为其音素表示(通过使用外部音素字典或单独训练的字形到音素模型,我们使用了CMUDict 0.6b)。混合字符-音素模型需要类似的预处理步骤,除了音素字典中没有的单词。这些未登录词作为字符输入,允许模型使用其隐式学习的字形到音素模型。在训练混合字符-音素模型时,每个单词在每次训练迭代时以一个固定的概率替换为其音素表示。我们发现这可以提高发音的准确性,并最大限度地减少注意力错误,特别是在泛化至比在训练期间看到的更长的话语时。更重要的是,支持音素表示的模型允许使用音素字典来纠正错误发音,这是部署系统的理想特征。

3.3 序列处理中的卷积块

【论文翻译】Deep Voice 3:通过卷积序列学习来扩展语音合成_第2张图片

       通过提供足够大的感受野,堆叠的卷积层可以利用序列中的长时上下文信息,而不会在计算中引入任何序列依赖性。我们使用图2中描绘的卷积块作为主要序列处理单元来编码文本和音频的隐藏表征。卷积块包含一个一维卷积滤波器,一个门控线性单元作为可学习的非线性(Dauphin et al., 2017),一个输入的残差连接,以及一个缩放因子 0.5 \sqrt {0.5} 0.5 (缩放因子确保我们在训练早期保留输入方差)。门控线性单元为梯度流提供线性路径,这减轻了堆叠卷积块的梯度消失问题,同时保持非线性。为了引入说话人相关的控制,在softsign激活函数之后,将说话人相关嵌入作为偏置添加到卷积滤波器输出。我们使用softsign非线性,因为它限制了输出的范围,同时也避免了基于指数的非线性有时表现出的饱和问题。我们在整个网络中使用零均值和单位方差激活初始化卷积滤波器权重。

       架构中的卷积可以是非因果的(例如,在编码器和转换器中)或因果的(例如,在解码器中)。为了保持序列长度,输入在左边以k-1个时间步的零进行补全用于因果卷积,并且在左边和右边分别以(k-1)/2个时间步的零进行补全用于非因果卷积,其中k是奇数的卷积滤波器宽度(我们限制奇数卷积宽度以简化卷积算法)。在卷积之前将dropout应用于输入以进行正则化。

3.4 编码器

       编码器网络(如图1所示)以嵌入层开始,嵌入层将字符或音素转换为可训练的向量表示, h e h_e he。嵌入 h e h_e he首先通过全连接层从嵌入维度投影到目标维度。然后,通过3.3节中描述的一系列卷积块对其进行处理,以提取时间相关的文本信息。最后,它们被投影回嵌入维度以创建注意力键向量 h k h_k hk。从注意力键向量和文本嵌入计算注意力值向量, h v = 0.5 ( h k + h e ) h_v=\sqrt{0.5}(h_k+h_e) hv=0.5 (hk+he),以联合考虑 h e h_e he中的局部信息和 h k h_k hk中的长时上下文信息。键向量 h k h_k hk被各个注意力块用来计算注意力权重,而最终的上下文向量被计算为值向量 h v h_v hv上的加权平均值(见3.6节)。

3.5 解码器

       解码器(如图1所示)以过去音频帧为条件预测一组r个未来音频帧,以自回归方式生成音频。由于解码器是自回归的,因此必须使用因果卷积块。我们选择梅尔对数幅度谱图作为紧凑的低维音频帧表征。类似于Wang et al. (2017),我们凭经验观察到将多个帧一起解码(即r> 1)会产生更好的音频质量。

       解码器网络以多个带整流线性单元(ReLU)非线性激活函数的全连接层开始,以预处理输入的梅谱图(在图1中表示为PreNet)。然后,后接一系列因果卷积和注意力块。这些卷积块生成用于关注编码器隐藏状态的查询(参见第3.6节)。最后,一个全连接层输出下一组r个音频帧以及一个二值的“最终帧”预测(指示是否已合成话语的最后一帧)。dropout在注意力块之前的每个全连接层之前应用,除了第一个之外。使用输出梅谱图计算L1损失(我们选择L1损失,因为凭经验它会产生最佳结果。 诸如L2的其他损失可能受异常频谱特征困扰,其可能对应于非语音噪声),并使用最终帧预测计算二值交叉熵损失。

3.6 注意力块

【论文翻译】Deep Voice 3:通过卷积序列学习来扩展语音合成_第3张图片
【论文翻译】Deep Voice 3:通过卷积序列学习来扩展语音合成_第4张图片

       我们使用类似于Vaswani et al. (2017)的点乘注意力机制(如图3所示)。注意力机制使用查询向量(解码器的隐藏状态)和来自编码器的每时间步键向量来计算注意力权重,然后输出上下文向量,其计算为值向量的加权平均值。

       我们观察到引入归纳偏差的经验性好处,其中注意力随时间单调连续。因此,我们为键和查询向量均添加位置编码。这些位置编码 h p h_p hp被选为 h p ( i ) = s i n ( w s i / 1000 0 k / d ) h_p(i)=sin(w_si/10000^{k/d}) hp(i)=sin(wsi/10000k/d)(对于偶数i)或者 c o s ( w s i / 1000 0 k / d ) cos(w_si/10000^{k/d}) cos(wsi/10000k/d)(对于奇数i),其中i是时间步索引,k是位置编码中的通道索引,d是位置编码中所有通道的数量, w s w_s ws是编码的位置率。位置率决定了注意力分布中线的平均斜率,大致对应于语速。对于单个说话人, w s w_s ws对于查询设置为1,对于键被固定为输出时间步与输入时间步之比(在整个数据集中计算)。对于多说话人, w s w_s ws对于每个说话人,由说话人嵌入计算键和查询(如图3所示)。由于正弦和余弦函数形成标准正交基时,该初始化产生对角线形式的注意力分布(见图4(a))。我们将用于计算隐藏注意力向量的全连接层权重初始化为用于查询投影和键投影相同的值。位置编码用于所有的注意力块。我们使用Gehring et al. (2017)中的上下文归一化。一个全连接层用于上下文向量以产生注意力块的输出。总的来说,位置编码改善了卷积注意力机制。

       生产质量的TTS系统对注意力误差的容忍度非常低。因此,除了位置编码之外,我们还考虑了其他策略来消除重复或跳过单词的情况。一种方法是用Raffel et al. (2017)中引入的单调注意力机制替换规范的注意力机制,单调注意力机制通过期望训练,以软单调注意力近似硬单调随机解码(论文Raffel et al. (2017)还通过抽样提出了硬单调注意力处理,它旨在通过仅仅关注通过采样选择的状态来提高推理速度,从而避免对未来状态的计算。在我们的工作中,我们没有从这种加速中受益,并且我们在某些情况下观察到较差的注意力行为,例如: 卡在第一个或最后一个字符上)。尽管单调性有所改善,但这种策略可能会产生更加分散的注意力分布。在某些情况下,多个字符同时被关注,并且无法获得高质量的语音。我们将其归因于软对齐的非归一化注意力系数,可能导致来自编码器的弱信号。因此,我们提出了一种替代策略,即仅在推理时将注意力权重限制为单调,保持训练过程没有任何约束。我们不是在整个输入上计算softmax,而是仅在固定窗口上计算softmax,该窗口从上一个关注位置开始并前进几个时间步(我们在实验中使用的窗口长度为3)。初始位置设置为零,并且稍后计算为当前窗口内最高注意力权重的索引。该策略还在推理中强制单调注意力,如图4所示,并产生优异的语音质量。

3.7 转换器

       转换器网络将来自解码器的最后隐藏层的激活作为输入,应用若干非因果卷积块,然后预测下游声码器的参数。与解码器不同,转换器是非因果和非自回归的,因此它可以使用解码器的未来上下文来预测其输出。

       转换器网络的损失函数取决于使用的声码器类型:

【论文翻译】Deep Voice 3:通过卷积序列学习来扩展语音合成_第5张图片
  1. Griffin-Lim声码器:Griffin-Lim算法通过迭代估计未知相位将频谱图转换为时域音频波形。我们发现在波形合成前,由锐化因子参数幂乘提升频谱图,有助于提高音频质量,如Wang et al. (2017)中所述。L1损失用于线性对数幅度谱的预测。

  2. WORLD声码器:WORLD声码器基于(Morise et al., 2016)。作为声码器参数,我们预测布尔值(当前帧是浊音还是清音),F0值(如果帧是浊音),频谱包络和非周期性参数。我们对浊音-清音预测使用交叉熵损失,对所有其他预测使用L1损失(见图5)。

  3. WaveNet声码器:我们单独训练一个WaveNet作为声码器,将梅尔对数幅度谱图作为声码器参数处理。这些声码器参数作为外部调节器输入到网络。 WaveNet使用真实标定的梅尔谱图和音频波形进行训练。除了调节器之外的架构类似于Arık et al. (2017)中描述的WaveNet。虽然Arık et al. (2017)中的WaveNet以线性对数幅度谱图为条件,我们观察到梅尔谱图有更好性能,梅尔谱图对应于更紧凑的音频表征。除了解码时的梅尔谱图上的L1损失之外,线性谱图上的L1损失也被应用于Griffin-Lim声码器。

4. 结果

       在本节中,我们将介绍几个不同的实验和指标来评估我们的语音合成系统。我们量化了系统的性能,并将其与其他最近发布的神经TTS系统进行了比较。

       数据:对于单说话人合成,我们使用了内部英语语音数据集,其中包含大约20小时的音频,采样率为48kHz。对于多说话人合成,我们使用了VCTK (Yamagishi et al., 2009)和LibriSpeech (Panayotov et al., 2015)数据集。VCTK数据集包含108个说话人的音频,总计约44小时时长。LibriSpeech数据集包含2484个说话人的音频,总计约820小时时长。VCTK的采样率是48kHz,LibriSpeech是16kHz。

       快速训练:我们将Deep Voice 3与Tacotron进行比较,Tacotron是一个近期发布的基于注意力的TTS系统。我们的系统在单说话人数据上,使用一个GPU平均训练迭代时间(batch大小为4)为0.06秒,而Tacotron为0.59秒,表示训练速度提高了十倍。此外,在我们的实验中,Deep Voice 3对于全部三个数据集,在大约500K次迭代后收敛,而Tacotron如Wang et al. (2017)中所述需要2M次迭代。这种显著的加速是由于Deep Voice 3的全卷积架构,它在训练期间利用了GPU的并行性。

【论文翻译】Deep Voice 3:通过卷积序列学习来扩展语音合成_第6张图片

       注意力错误模式:基于注意力的神经TTS系统可能会遇到几种错误模式,这些模式会降低合成质量 - 包括(i)重复的单词,(ii)错误发音,以及(iii)跳过的单词。(i)和(iii)的一个原因是基于注意力的模型没有强加单调连续机制。为了跟踪注意力错误的发生,我们构建了一个定制的100句测试集(见附录E),其中包括来自部署的TTS系统的特别具有挑战性的案例(例如,日期,首字母缩略词,URL,重复的单词,专有名词,外语词汇等)。表1中列出了注意力错误计数,表明具有字符和音素联合表征的模型,使用标准注意力机制训练但在推理中强制执行单调约束,在很大程度上优于其他方法。

【论文翻译】Deep Voice 3:通过卷积序列学习来扩展语音合成_第7张图片

       自然度:我们证明了波形合成方式的选择对自然度评级很重要,并将其与其他已发布的神经TTS系统进行比较。表2中的结果表明,神经声码器WaveNet取得了最高MOS3.78,其次分别是WORLD和Griffin-Lim的3.63和3.62。因此,我们表明最自然的波形合成可以用神经声码器完成,并且基础的频谱图逆变换技术可以与使用高质量的单说话人数据的先进声码器相匹敌。当WORLD声码器引入各种明显的人工痕迹时,WaveNet声码器听起来更自然。然而,较低的推理延迟可能使WORLD声码器更可取:经过精心设计的WaveNet实现以每CPU核心3倍实时速度运行(Arık et al., 2017),而WORLD以高达每CPU核心40倍实时速度运行(见下面的小节)。

【论文翻译】Deep Voice 3:通过卷积序列学习来扩展语音合成_第8张图片

       多说话人合成:为了证明我们的模型能够有效地处理多说话人语音合成,我们在VCTK和LibriSpeech数据集上训练我们的模型。对于LibriSpeech(一个语音识别数据集),我们应用了标准去噪的预处理步骤(使用SoX (Bagwell, 2017)),并将长话语按暂停位置切分成多个(由Gentle(Ochshorn & Hawkins, 2017)确定)。结果显示在表3中。我们故意在所评估的集合中包含真实标定样本,因为我们的北美众包评分者可能不熟悉数据集中的口音。我们使用WORLD声码器的模型在VCTK上取得了3.44的MOS,而Deep Voice 2则是3.69,这是使用WaveNet作为声码器并单独优化音素时长和基频预测模型的最先进的多说话人神经TTS系统。我们期望通过使用WaveNet来进一步改进多说话人合成,尽管它可能会大大减慢推理速度。与VCTK相比,LibriSpeech上的MOS较低,我们主要归因于训练数据集的较低质量,由于各种记录条件和明显的背景噪声(我们在LibriSpeech的108个说话人的子采样上(与VCTK相同)测试Deep Voice 3,并观察到生成的样本质量比VCTK差)。在文献中,Yamagishi et al. (2010)将参数TTS方法应用于具有数百个说话人的不同语音识别数据集时,也观察到更差的性能。最后,我们发现学习的说话人嵌入在一个有意义的潜在空间中(见附录D中的图7)。

       优化部署中的推理:为了以经济有效的方式部署神经TTS系统,系统必须能够在数量相当的硬件上处理与替代系统一样多的流量。为此,我们的目标是在具有20个CPU核心的单GPU服务器上实现每天1000万次查询或每秒116次查询(QPS)(查询被定义为合成一秒钟话语的音频)的吞吐量,我们发现其成本与商业部署的TTS系统相当。通过为Deep Voice 3架构实现自定义GPU内核以及跨CPU并行化WORLD合成,我们证明了我们的模型每天可以处理1000万个查询。我们在附录B中提供了有关实施的更多细节。

5. 结论

       我们介绍Deep Voice 3,一个神经文本到语音系统,它基于一种新的全卷积序列到序列声学模型,具有位置增强的注意力机制。我们描述了序列到序列语音合成模型中的常见错误模式,并表明我们使用Deep Voice 3成功地避免了这些常见错误模式。我们证明了我们的模型与波形合成方法无关,并使其适用于Griffin-Lim谱图逆变换,WaveNet和WORLD声码器合成。我们还演示了我们的架构能够通过可训练的说话人嵌入来增强,使其适用于多说话人语音合成,这是Deep Voice 2中描述的技术。最后,我们完整地描述了生产就绪的Deep Voice 3系统,包括文本归一化和性能特征,并通过广泛的MOS评估展示了最先进的质量。未来的工作将涉及改进隐式学习的字形到音素模型,与神经声码器联合训练,以及在更清晰和更大的数据集上进行训练,以扩展来建模数十万说话人的人类声音和口音的完整变化。

你可能感兴趣的:(语音合成,语音合成,卷积,序列到序列,attention,神经网络)