语音合成之Char2Wav模型和SampleRNN模型

Submitted by chenrouyu on Mon, 05/07/2018 - 10:39
2

Char2Wav模型

合成式(Concatenative TTS),这种方法需要大量的剪辑音频组成的数据库,然后根据文本内容从数据库中挑选相应的音频片段,把它们拼到一起播放即可。相信大家坐过火车,火车站的语音播报基本上都是这种简单粗暴的拼凑式语音,小编每次听到那种语音播报都觉得十分刺耳,为原本无聊的候车时光增添了更多无聊。这种方法有很多缺点,自然度差是其一,另外一个缺点是需要预先找到足够多的音频片段,不然文本中如果出现数据库中没有的字词就无法工作了。

参数式(Parametric TTS),这种方法是根据语音的基本参数来合成语音,一个参数式语音合成系统通常包含两个阶段:首先是从文本中提取语言特征,例如音节、停顿时间等,然后提取能够代表音频的特征,如倒谱、频谱、基频等。将这些语言特征和音频特征作为Vocoder的输入,然后即可产生对应文本的音频。这种方法所需要的工作量以及数据库数量相比于合成式都要少,但是,这些特征都是人为手动提取的,是基于我们人类对音频的理解,这些手动提取的特征不一定就完全适合语音合成。既然这样,为什么不把深度学习这种自动提取特征的方法引入呢?于是,深度学习就逐渐被应用到语音合成之中。

Char2Wav模型是由Bengio组提出来的一种基于深度学习的端对端语音合成模型,Char2Wav由两部分构成,分别是reader和neural vocoder,其中reader是一个基于注意力机制的seq2seq模型,编码器是一个双向的循环神经网络(BiRNN),使用文本或者音节作为输入,解码器是一个基于注意力机制的RNN,输出声学特征。neural vocoder是一个基于SampleRNN的条件抽样过程,可以直接输出音频的波形表示。不同于传统的语音合成模型,Char2Wav直接将文本作为输入就可以输出音频,Char2Wav的模型结构如下图所示。

1

在reader部分,作者借鉴了Chorowski提出的ARSG模型,ARSG模型基于序列X来生成序列Y,而这里的序列X就是文本或音节序列,序列Y则是声学特征序列。在ARSG的第i步,基于h生成y的步骤如下公式所示:

2

在neural vocoder部分,作者采用了SampleRNN来获取高质量的音频输出,SampleRNN是一个由启发性的带有不同时钟频率的循环层构成的自回归生成模型,其结构如下图所示,这种具有启发性的结构使得捕捉长程音频之间的关联性变得更加容易,作者使用了SampleRNN的条件概率版本,即把从reader输出的每一帧的声学特征附加到SampleRNN中top tier的相应状态,这样就可以根据过去的音频样本以及声学特征来一起生成新的音频样本。

在训练的时候,作者首先分别对reader和neural vocoder分别进行了预训练,将归一化之后的WORLD声学特征作为reader的目标序列和neural vocoder的输入,最后将reader和neural vocoder一起做端对端训练。

 

SampleRNN模型

与wavenet类似,SampleRNN同样也是基于条件概率抽样得到音频采样点的数据,如下条件概率公式所示,每个采样点的数据是由之前所有采样点数据作为条件概率抽样生成。由于语音合成的工作难点是处理长期时序关联性,因为即使只有两秒的采样频率为16kHz的音频,也要处理32000个采样点,对于更长的音频,采样点则更多,之前我们在语言建模中输入到LSTM的采样时刻到几十个已经很多了,现在要处理的是几万甚至几十万个点,难度相当大,这就是为什么语音合成的流畅度不够好的原因,时序建模的跨度非常大。

3

SampleRNN是一个具有启发性结构的RNN,其将不同的层归到”tiers”,每一个tier是一个循环神经网络,它的作用类似于seq2seq中的编码器,对所有输入进行编码得到一个编码后的特征向量。tier处理的时间窗大小可以人为设定,不同的tier操作着不同的时间尺度。tiers形成了启发性的结构,这意味着它可以通过多层连接实现对长程时序关系的建模。由下图可以看到,图中一共有三个tier,最下面一个tier接受最后4个样本以及中间tier的输出作为输入,中间的tier一方面为下面的tier提供输入,同时自身也接受最后4个样本以及最上面的tier的输出作为输入,最上层的tier一方面为中间层的tier提供输入,另一方面则接受最后16个样本作为输入。由此可以看出,SampleRNN是由启发性RNN和MLP构成,只有最底层的tier处理的是单个样本,越上层计算量越小,因此整体计算量较小,而wavenet则是每一层都处理的是样本级别。

4

除此之外,SampleRNN的抽样过程、数据离散算法都与wavenet类似,此处不再充分说明。

SampleRNN可以较好地处理语音合成这样非常长程的问题,那么将其应用到其他比较复杂的时序建模问题应该也是可行的。