0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于Tacotron实现StoryTime模型

wpl4_DeepLearni 来源:工程师曾玲 2018-12-30 08:59 次阅读

语音合成的目标是使得计算机能够发出跟人一样自然流畅且带有感情的声音,斯坦福的学者尝试基于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论文发布以后,利用自己的数据来一步步调参优化进而搭建一个自己的语音合成系统。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编码器
    +关注

    关注

    45

    文章

    3595

    浏览量

    134160
  • 谷歌
    +关注

    关注

    27

    文章

    6142

    浏览量

    105102

原文标题:基于Tacotron模型的语音合成实践

文章出处:【微信号:DeepLearningDigest,微信公众号:深度学习每日摘要】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    一个基于Tensorflow框架的开源Tacotron实现

    Tacotron语音合成系统打破了各个传统组件之间的壁垒,使得可以从配对的数据集上,完全随机从头开始训练。本文是来自喜马拉雅FM音视频工程师马力的投稿,他手把手式的介绍了Tacotron的使用方法,帮助你快速上手。
    的头像 发表于 04-10 08:47 1.3w次阅读

    matlab的模型变换、模型简化、模型实现以及模型特性命令

    matlab的模型变换、模型简化、模型实现以及模型特性命令模型变换 C2d 变连续系统为离散系统
    发表于 09-22 15:58

    从Matlab_Simulink_模型到代码实现 matlab

    从Matlab_Simulink_模型到代码实现 matlab
    发表于 10-04 08:36

    使用全卷积网络模型实现图像分割

    OpenCv-C++-深度神经网络(DNN)模块-使用FCN模型实现图像分割
    发表于 05-28 07:33

    请问如何实现滑动导航模型SwipeView?

    如何实现滑动导航模型SwipeView
    发表于 11-23 06:56

    如何实现嵌入式CISI模型机系统的设计?

    如何实现嵌入式CISI模型机系统的设计?
    发表于 12-24 07:01

    K210是否可以将模型分层实现

    请问各位 是否可以将模型分层实现实现的思路大概如何。是先训练好模型,分层转换为kmodel,依次实现各层kmodel,还是导出整体kmod
    发表于 09-15 06:17

    基于模型的DDS芯片设计与实现

    基于模型的DDS芯片设计与实现  0 引言   1971 年,美国学者J.Tierncy.C.M.Rader 和B. Gold 应用全数字技术,从相位概念出 发给出了直接合成波形的
    发表于 01-20 11:23 1393次阅读
    基于<b class='flag-5'>模型</b>的DDS芯片设计与<b class='flag-5'>实现</b>

    基于C++的modbus通讯协议模型实现

    基于C++的modbus通讯协议模型实现,很好的资料,快来下载学习吧。
    发表于 03-21 17:27 55次下载

    苹果推出tvOS应用“iBooks StoryTime

    iBooks StoryTime通过结合大声朗读(Read-Aloud)功能及图形和动画等,从听觉和视觉上帮助提高孩子们的阅读理解能力。 另外,与第四代Apple TV相结合后, 这款应用为家长和他们的孩子提供了一种独特的互动阅读体验。
    发表于 11-11 09:51 1291次阅读

    基于模型的SDR开发设计与实现

    促使下一代通信无线电的一个新设计方法的产生。该方法基于更高层次抽象描述,采用基于模型的设计思想,其核心为基于与实现无关的模型(IIM)和特定实现
    发表于 11-22 01:04 1717次阅读

    基于模型的设计的IIM 和ISM实现

    要求。这种认识促使下一代通信无线电的一个新设计方法的产生。该方法基于更高层次抽象描述,采用 基于模型的设计 思想,其核心为基于 与实现无关的模型 (IIM) 和 特定实现
    发表于 12-12 20:58 1472次阅读

    整体thread模型的设计与实现

    SPDK Thread 模型是SPDK诞生以来十分重要的模块,它的设计确保了spdk应用的无锁化编程模型,本文基于spdk最新的release 19.07版本介绍了整体thread模型的设计与
    的头像 发表于 03-29 14:39 2093次阅读
    整体thread<b class='flag-5'>模型</b>的设计与<b class='flag-5'>实现</b>

    利用NVIDIA Volta将文本实时生成自然语音

    在训练了 Tacotron 2 和 WaveGlow 模型,或者下载了各自模型的预先训练的检查点之后,您可以执行以文本为输入的推理,并生成一个音频文件。
    的头像 发表于 04-07 10:08 1294次阅读

    Storytime CMS系统和博客引擎

    ./oschina_soft/storytime.zip
    发表于 06-09 10:47 1次下载
    <b class='flag-5'>Storytime</b> CMS系统和博客引擎