首页
学习
活动
专区
工具
TVP
发布

基于Tacotron模型的语音合成实践

‍参考论文:《Storytime - End to end neural networks for audiobooks》

语音合成的目标是使得计算机能够发出跟人一样自然流畅且带有感情的声音,斯坦福的学者尝试基于Tacotron实现了一个StoryTime模型,该模型依赖于一个编码器、解码器、以及注意力机制来模拟生成人类水平的频谱,期望它可以替代成为说书的。

在谷歌发布Tacotron模型之前,wavenet也是完全用神经网络来合成语音的模型,它采用自回归的方法生成了让人印象深刻的音频,不过正是由于其自回归的方法需要依赖于过去生成的所有样本来生成新的样本,因此其生成的速度十分缓慢,但是它可以捕捉不同说话人的特征,并且可以在他们之间随意切换。

后来百度研究院发布了Deep Voice语音合成系统,不同于wavenet一体式的做法,DeepVoice的做法是将传统的基于参数合成系统的各个组件均替换成了神经网络,并且让每个模块各自进行训练,该方法的缺点就是需要对每个模块进行精细调参,这样会出现错误累积的问题。

而Tacotron是一个完全端对端的语音合成模型(除了最后一步神经网络没有直接生成波形信号之外),它不需要额外的音素信息或语言模型,而是直接可以将文本转化成语音,这也是本文StoryTime所采取的模型。

1. 预处理阶段

首先要处理的就是收集音频语料以及所对应的文本标签,这里作者下载的是哈利波特的听书音频,以及对应的文本材料。接下来要做的就是对这个音频进行分割以及赋予每个小音频正确的文本标签。对于文本其实比较好处理,因为章节之间的格式很明显,很容易可以使用正则表达式来得到想要的分割。

对于音频的分割就麻烦一些,因为目标是得到音频与文字之间的大致对齐。由于章节与章节之间一般情况下都会出现大约3秒钟的停顿,所以作者首先基于停顿大于3秒钟进行分割,默认会得到不同的章节,然后有些章节与章节之间的停顿小于3秒,所以按上面方法分割的文件中会有包含了多个章节的情况,而这个又是无法自动分割的,因为容易与句子之间的停顿混淆。无奈之下,作者最终采用了声学软件Audible来手动对它们进行进一步的划分,最终将划分后的片段放入开源的对齐软件Gentle中,就可以得到样本对。整个流程如下图所示。

2.模型细节

这里采用的就是谷歌发布的Tacotron模型,如下图所示,总的来说由五个部分构成,分别是文本编码器、音频特征编码器、注意力、解码器、合成器。下面我将逐一介绍每个部分。

首先,对于文本编码器部分,将词向量作为两个带ReLU激活函数的全连接层的输入,并在这里采取了50%的dropout以提高模型的泛化能力,这一部分是对输入的预训练,论文中称之为prenet。prenet的输出作为CBHG网络的输入,其中CBHG网络是由Convolutional Bank+Highway Network+GRU组成。这里作者使用了16层一维卷积网络,因为输入是单词的embedding矩阵,一维卷积纵向作用到矩阵上面,16层卷积网络分别拥有大小从1到16的不同的卷积核,通过这种不同大小卷积核的方式来提高模型泛化能力,并且每一层卷积都可以认为是一个起到k-gram的作用。然后经过池化层和highway network以得到更高维的特征,并输入到双向GRU网络中得到序列层面特征,并将从prenet出来的输出与这里进行连接,构成一个residual connection,最终得到的输出就是作为注意力模型的上下文特征。

另一个模块就是注意力和RNN解码器,注意到对于每一帧频谱的输入,解码器输出的是r帧频谱,这种做法可以加速执行时间,不过给训练和生成的实现方法上带来了差异。在训练过程中,当预测了r帧梅尔频谱以后,第r个时间点的频谱标签将作为模型的输入,模型基于这个预测下一批r帧梅尔频谱;在生成阶段,除了一开始模型使用0填充的帧作为输入以外,后面的时刻将会使用前一时刻输出的r帧中的最后一帧梅尔频谱作为输入。如下图所示,解码器和注意力层中所用的均为GRU,注意力层是一个带有Bahdanau注意力机制的GRU,解码RNN由两个带有residual connection的GRU层构成,解码器自始至终都是每步产生r帧输出,最终解码器的输出作为CBHG网络的输入。这种解码器只需要执行T/r步,假设T为输入的总帧数。

对于解码器的CBHG网络,与前面编码器CBHG唯一的不同之处在于这里使用的k是8而不是16,这是因为在这里数据的维度有所降低,经过卷积层得到输出维度为80,刚好就是梅尔频谱特征的维度。最后经过highway network和双向GRU即可得到频谱图,利用griffin lim算法即可将该频谱图转化成音频。至于griffin lim算法的转化效果,不是特别理想,因为即使是将一段清晰的音频,提取其频谱特征,通过griffin lim算法转化出来的音频相比于原始音频还是多了一些噪音。

总结一下,这是一篇实践性的文章,在谷歌的Tacotron论文发布以后,利用自己的数据来一步步调参优化进而搭建一个自己的语音合成系统。

深度学习每日摘要|坚持技术,追求原创

微信ID:deeplearningdigest

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181225G1G63300?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

相关快讯

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券