Deep Voice 3 中文翻译

渣翻见谅,先贴原文连接https://arxiv.org/abs/1710.07654

摘要

我们现在的deepvoice3,是一个基于注意力机制的全卷积神经元TTS系统。它匹配最先进的神经元自然语音合成系统并且训练更快。我们用前所未有的TTS训练集,在超过800小时的音频2000多个人上训练deepvoice3。另外的,我们识别了基于注意力机制的语音合成网络的常见问题,证明了怎么去减轻他们,并且比较了一些不同的语音合成方法。我们还描述了如何在一个GPU服务器上对每天一千万个查询的推理进行衡量。

1. 引言

TTS系统转换文字到人类语音,TTS系统被用于各种各样的应用,比如人类技术借口,视觉障碍认识的可及,媒体与娱乐。传统TTS基于复杂的多阶段工程流水线。通常,这些系统首先将文本转换为压缩的音频特征,然后使用称为声码器(vocoder)的音频波形合成方法将该特征转换为音频。

最近关于神经TTS的研究已经取得了令人印象深刻的结果,产生了具有更简单的特征、更少的组件和更高质量的合成语音的流水线。关于TTS的最优神经网络结构还没有达成共识。然而,序列到序列模型已经显现出有希望的结果。

在文本中,我们提出了一个新颖的,全卷积结构的语音合成,扩展到非常大的数据集,并且演示了部署一个基于注意力机制的TTS系统时出现的几个现实问题。具体来说,我们做了以下贡献:

1.我们提出了一个全卷积的字符到声谱的结构,它使完全并行计算成为可能,并且比相似的循环神经元结构快几个数量级。

2.我们展示了我们的结构可以在包含了820小时的音频和2484个人的 LibriSpeech ASR数据集上训练得很快。

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

4.我们对比了几个声波合成方法的质量,包括WORLD,Griffin-Lim和WaveNet。

5.我们描述了一个用于DEEP VOICE 3的推理核心的实现,它可以在一个GPU服务器上每天提供多达一千万个查询。

2. 相关工作

我们的工作建立在最先进的神经元语音合成和注意力机制的sequence-to-sequence学习之上。

最近一些作品解决了神经元网络语音合成的问题,包括Deep Voice 1,Deep Voice 2,Tacotron,Char2Wav,VoiceLoop,SampleRNN和WaveNet。Deep Voice 1 & 2保持了传统的tts流水线结构,分离的字型和音素的转换,持续时间和频率的预测,和声波的合成。对比Deep Voice 1 & 2,Deep Voice 3使用了一个基于注意力机制的sequence-to-sequence模型,使用更紧凑的体系结构。相似与Deep Voice 3, Tacotron和Char2Wav提出了用于TTS的sequence-to-sequence神经元网络。Tacotron是一个神经元文本到声谱转化模型,使用了Griffin-Lim做声谱到声波的合成。Char2Wav预测了全局声码器的参数,并且在全局参数之上,使用了一个样本RNN做声波生成。对比Char2Wav和Tacotron, Deep Voice 3为了加快训练,没有使用循环神经网络。Deep Voice 3使基于注意力机制的TTS系统在生产环境上可行,它避免了一些通常的注意力机制带来的问题来使系统的正确率不会降低。最后,WaveNet和SampleRNN是神经声码器的声波合成系统。在文献上也有很多高质量的手工工程声码器可以被替代,像STRAIGHT和WORLD。Deep Voice 3没有添加新的声码器,但是可以在稍作修改后,与其他不同的波形合成方法集成。

自动语音识别(ASR)数据集通常比传送的TTS文集大很多,但往往不那么干净,因为他们通常包含多重的扩音器和背景噪声,虽然先前的方法已经将TTS使用与ASR数据集,但是,Deep Voice 3是我们所知的最好的,第一个扩展到上千个说话的人的独立TTS系统。

Sequence-to-sequence模型编码了一个可变长度的输入到隐藏状态中,然后用解码器去处理并生成一个目标序列。注意力机制使解码器可以在生成目标序列时自适应的关注编码器的隐藏状态中不同的位置。基于注意力机制的sequence-to-sequence模型非常广泛的用于机器翻译,语音识别和文本摘要。最近的有关Deep Voice 3的注意力机制上的优化包括在训练时强制单调注意力,完全注意力的非循环结构和卷积的sequence-to-sequence模型。Deep Voice 3证明了TTS训练中单调注意的效果,TTS是单调性的一个全新领域。另外,我们证明了在推理中使用一个简单的强制单调,一个标准的注意力机制可以工作的更好。Deep Voice 3建立了一个卷积sequence-to-sequence结构,引入了一个位置编码,增强速率的调整去解释输入和输出领域上的不匹配(这句不太好翻译,原文:Deep Voice 3 also builds upon the convolutional sequence-to-sequence architecture from Gehring et al. (2017) by introducing a positional encoding similar to that used in Vaswani et al. (2017), augmented with a rate adjustment to account for the mismatch between input and output domain lengths.)

3. 模型结构

在这一节中,我们介绍了我们的全卷积的sequence-to-sequence TTS结构。我们的结构有能力转换一个文本特征到各种声码器参数,比如梅尔频谱,线性标度对数幅谱,基频,谱包络和非周期性参数。这些声码器参数可以被用作声波合成模型的输入。

图1:Deep Voice 3使用残差卷积层把text编码为每个时间点的key的value向量给基于注意力机制的解码器使用。解码器使用它们去预测对应输出音频的梅尔标度对数幅谱。(淡蓝色点状箭头描绘了推理过程中的自回归过程)将解码器的隐藏状态馈送给转换网络去预测声波合成所使用的声码器参数。更多细节详见附录A。

Deep Voice 3的结构由三部分组成:

编码器:一个全卷积的编码器,它将文本特征转化为内部的学习表示。

解码器:一个全卷积的因果解码器,使用了注意力机制的带洞卷积,以一个自回归的方法将学习表示解码为低维的音频表示(梅尔标度谱)

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

要优化的总体目标函数是来自解码器(第3.5节)和转换器(第3.7节)的损失的线性组合。我们分别的将解码器和转换器用于多任务的训练,因为它在实践中可以使注意力的训练更加容易。具体来说,对梅尔谱图预测的损失可以训练注意力机制,因为注意力机制不仅和声码器参数预测相关,还和梅尔谱图的梯度预测相关。

在多人的回话场景中,训练的说话人的嵌入,在编码器,解码器和转换器中都会使用。然后,我们详细的描述了每一个组件和数据预处理。模型的超参数可在附录C的表4中得到。

3.1 文本预处理

文本预处理是良好性能的关键。直接使用原始文本(具有间隔和标点的字符)在许多话语中能产生可以接受的表现。然而,一些话中的稀有词汇会产生许多错发音,或者可能跳过和重复单词。我们通过一下方式对文本进行正则化来减轻这些问题:

1. 我们将所有文本中的字母变成大写

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

3. 我们用句号或问好结束每一句话

4. 我们用特殊的分隔符替代单词当中的空格,它代表了说话人在单词中间停顿是时长。我们使用了4中不同的分隔符:

(i)粘在一起的词

(ii)标准的发音和字符间隔

(iii)在单词中间的短停顿

(iv)单词中间的长停顿

For example,
the sentence “Either way, you should shoot very slowly,” with a long pause after “way”
and a short pause after “shoot”, would be written as “Either way%you should shoot/very
slowly%.” with % representing a long pause and / representing a short pause for encoding
convenience.

3.2 字符和音素的联合表示

有效的TTS系统需要拥有一个修改发音来改正通常错误(通常涉及适当的名词、外来词和特定领域的术语)的方法。通常的方法是维护一个字典将卷积块转化为语音表达。

我们的模型可以直接将字符(带有标点和间隔)转换为声学特征,学习隐含的字素到音素的模型,这种隐式转换在模型产生错误使很难改正,因此,除了字符模型,我们同样训练了一个只有音素的模型和混个字符音素模型以供选择。他们在只有字符的模型上相同,除了编码器有时候接受音素和重音嵌入而不是字符嵌入。

一个只有音素的模型需要一个将词转化为音素表达的预处理步骤(通过使用外部音素字典或单独训练的字形到音素模型),混合音素字符模型除了在音素词典中的词之外需要相同的预处理步骤。这些在词典之外中的词以字符输入,并且被允许使用隐式学习到的字素转音素模型。当使用字符音素混合模型时,在每轮训练过程中每一个词会有固定的几率被转换为它的音素表达。我们发现这会提高发音和准确率并且减少注意力错误,尤其是当推广到比训练集更长的句子中时。更重要的是,支持音素表达的模型允许使用音素字典纠正错发音,这是一个生产系统的重要需求属性。

3.3 用于序列处理的卷积块

图2:一个卷积块包含了带有门控线性单元的1-D卷积和残差连接。这里的 c 指代了输入的维度。大小为 2 * c 的卷积输出被分成了大小相等的两部分:门控向量和输入向量。

通过提供足够大的接收字段,堆叠的卷积层可以利用序列中长期的上下文信息并且不会在计算中引入任何的顺序依赖。我们使用了在图2中描绘的卷积块作为主要的时序处理单元去编码文本和音频的隐藏表示。这个卷积块包含了一个1-D的卷积核,一个门控线性单元作为非线性学习,一个对输入的残差连接,和一个 \sqrt{0.5} 的换算系数。这个门控的线性单元为梯度流提供了线性路径,它会减轻堆叠卷积块的梯度消失问题,并且保持非线性。为了引入说话人元素,在卷积输出上,softsign函数之后加入了一个说话人的嵌入作为偏置。我们使用softsign函数因为它限制了输出的范围,同时也避免了指数为基础的非线性有时表现出的饱和问题。(这句翻译有点渣,贴上原文:We use the softsign nonlinearity because it limits the range of the output while also avoiding the saturation problem that exponentialbased nonlinearities sometimes exhibit.)我们在整个网络中用零均值和单位激活方差初始化卷积核的权值。这个卷积在结构中可以是非因果的(例如编码器)或者因果的(例如解码器)。为了保证序列的长度,输入数据在因果卷积的左边被填充了 k - 1 个 0 的时间点,在非因果卷积的左右各填充了 ( k - 1 ) / 2 个 0 的时间点,其中 k 是奇数卷积核宽度,在卷积正则化之前会引入 Dropout 层。

3.4 Encoder

编码网络(在图1中描绘的)以一个嵌入层开始,将字符或者音素转换成可训练的向量表达 h_{e} 。嵌入的 h_{e} 首先通过全连接层来从嵌入维度转化为目标维度,然后,他们通过一系列在3.3中描述的卷积块来处理,以提取文本信息的时间依赖性。最后,他们被投影到嵌入维度,来创建注意力的 key 向量 h_{k} 。注意力的 value 向量从注意力 key 向量和文本嵌入中计算 : 

                                                                  h_{v} = \sqrt{0.5} * (h_{k} + h_{e})

来共同考虑局部的信息 h_{e} 和长期上下文信息 h_{k} 。 key 向量 h_{k} 被每个注意力块使用来计算注意力权重,而最终的上下文向量由 value 向量 h_{v} 的加权平均计算 (见 3.6)

3.5 Decoder

解码器(在图1中描绘的)通过由过去的音频帧来预测未来的一组音频帧 r ,以这种方式来实现自回归的音频生成。因为解码器是自回归的,所以它必须使用因果卷积块。 我们选择梅尔对数幅谱作为紧凑的音频帧表示。我们根据经验观察发现,一起解码多个帧 (例如  r > 1)能产生更好的音频质量。解码器由多个带有ReLU去线性化的全连接层开始来处理输入的梅尔谱图(在图1中表示为 "PreNet")。然后,它跟随着一系列的因果卷积和attention,这些卷积块生成了用于关注编码器隐藏状态的变量 queries 。最后,一个全连接层输出了下一组音频帧 r 和一个二元"最终帧"预测(用来指示这句话的最后一帧是否被合成)。Dropout用在每一个attention之前的全连接层之前,除了第一个。对梅尔谱图计算 L1 损失,并使用最终帧预测来计算二进制交叉熵损失。

3.6 Attention Block

图3:位置编码被添加到 query 和 value 中,并且对应了各自的 w_{query} 和 w_{value} 。通过将一个较大的负值掩码添加到logit中,可以在推理中实现强迫单调性。 在训练中,注意力权重偶会被dropout。

图4 :(a)为训练之前的注意力分布,(b)为训练之后但是没有强制约束,(c)在第三层和第一层使用了强制约束

我们使用了点积注意力机制(如图3所示)。注意力机制使用了 query 向量(解码器的隐藏状态)和编码器每个时间点的 key 向量来计算注意力权重,然后输出了一个上下文向量作为计算全局权重的 value 向量。我们引入了attention在时间上的单调性作为诱导偏置,并观察他的经验收益。因此,我们向 key 和 query 向量添加了位置编码。位置编码 h_{p} 从以下公式中选择:

h_{p}(i) = sin(w_{s}i/10000^{k/d})  在 i 为偶数时

h_{p} (i)= cos(w_{s}i/10000^{k/d})  在 i 为奇数时

其中 i 是时间戳的编号, k 是位置编码中的通道编号,d 是位置编码中的通道总数,w_{s} 是编码的 position rate 。position rate 决定了注意力分布线的平均斜率,大体上对应与语音的速度。对于单个说话人,w_{s} 被设置为 query 中的一个,并且固定与输入时长与输出时长的时间比率(在整个数据集上计算)。对多人会话的数据集,w_{s} 使用每一个说话人嵌入的 key 和 value 向量计算(如图3所示),在正弦余弦函数生成正交基时,该初始化产生一个对角线形式的注意力分布,我们初始化了全连接层的权重被用来计算隐藏attention向量对 key 和 value 的映射。位置编码被用在所有的attention块上,一个全连接层被用于上下文向量来生成attention块的输出。总之,位置编码提高了卷积注意力机制。

生产质量的TTS系统对注意力错误的容忍度极低。因此,除了位置编码,我们考虑额外的策略来消除重复或者跳过单词的情况。一种方法是用经典的注意力机制代替拉菲尔等人引入的单调注意机制,利用期望的训练逼近soft-monotonic注意的hard-monotonic随机译码。尽管改进的单调性,这种策略可能会产生更分散的注意力分布。在某些情况下,同时出现了几个字符,无法获得高质量的语音。我们提出了另一种注意力权重策略,它只适用于单调推理,保持训练过程没有任何限制。替代在所有input上计算softmax,我们在间隔为8的时间窗口上采用了softmax。最初的权重设为0,然后计算当前窗口中最高权重的序号,这种策略也在图4所示的推理中实施单调的注意,并且产生优异的语音质量。

3.7 Converter

转换器将解码器的最后一个隐藏层作为输入,使用了多个非因果卷积块,然后预测提供给下游声码器的参数。不像解码器,转换器是非卷积并且非自回归的,所以可以使用解码器中未来的上下文去预测自己的输出。

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

略过声码器和result

5 Conclusion

我们介绍了Deep Voice 3,一个具有位置增强注意力机制的基于全卷积sequence-to-sequence声学模型的神经元TTS系统。我们描述了sequence-to-sequence语音生成模型中常见的错误,然后表明了我们用Deep Voice 3成功的避免了这些错误。我们的模型不能直接生成声波,但可以适用于Griffin-Lim,WaveNet和WORLD做音频合成。我们还证明了我们的结构在多人会话语音合成中表现良好,通过增强讲话人的嵌入。最后,我们描述了Deep Voice 3生产系统的特点,包括文本规范化和特征表现,并通过广泛的MOS评价展示最先进的质量。未来的工作将涉及改进隐式学习的字形到音素模型,与神经声码器联合训练,以及对更干净和更大的数据集进行训练,以模拟人类声音和来自成千上万个扬声器的口音的完全可变性。

附录A Deep Voice 3 的详细结构

图6:Deep Voice 3使用了深度残差卷积网络,把文本和音素转换为每个时间点的 key 和 value向量,将它们交给注意力机制的解码器。解码器使用他们去预测对应输出音频的梅尔对数幅谱,(浅蓝色虚线箭头描绘了推断过程中的自回归合成过程)将解码器的隐藏状态馈送到转换器网络,以生成最后声码器的参数,最终生成波形。权重归一化(Salima&KimMA,2016)被应用到模型中的所有卷积滤波器和全连接层权重矩阵。

猜你喜欢

转载自blog.csdn.net/qq_37175369/article/details/81476473