本文首发于:行者AI

TTS是一种将文本文字转变成人类语言信号的一种技术。TTS技术优劣的评判标准是生成的语音信号是否正确、清晰、自然。传统的TTS技术包括拼接法和参数法,但是这两种方法生成的语音信号不自然。端到端的TTS技术能够获得相对比较自然的合成效果,但是同样会出现生成效果不稳定、文字重复或者遗漏等缺点。Expressive TTS是目前语音合成领域中比较活跃的方向,它和单纯TTS的区别是,它更关注合成声音的风格、情感、韵律等等。普通的端到端TTS技术很难精确控制合成结果的韵律、停顿、节奏。

DurIAN: Duration Informed Attention Network For Multimodal Synthesis是腾讯AI Lab于2019年发布的一篇论文。不同于普通的端到端语音合成模型,使用attention机制来控制合成结果的alignment,这篇论文的主要思路是抛弃attention结构,使用一个单独的模型来预测alignment,这样方便在实际使用该模型进行语音合成任务时,用户可以比较方便的输入韵律参数从而控制生成结果。

这里简单介绍下Attention以及Alignment的概念。

Attention机制在TTS框架中的作用是模仿人类发出声音时的机制,即将注意力关注于我们发声时对应的上下文。同样的,Attention模型中,当我们发出当前词语时,我们会寻找源语句中相对应的几个词语,并结合之前的已经发声的部分作出相应的发声,如下图所示,当我们发出“知”这个音时,只需将注意力放在源句中“知”的部分,当发出“力”字时,只需将注意力集中在"是力量“这几个字。

Alignment是对齐的意思,在训练TTS任务的时候,模型需要知道怎么将输入文本与输出频谱进行对齐,常见的方法包括使用Attention机制或者训练专门的模型来进行对齐。

笔者之前一段时间的工作内容是歌唱合成,而歌唱合成的主要目标是:生成节奏与音高满足条件的歌声。本文的主要内容是简单介绍DurIAN论文的核心观点,以及阅读上述论文之后对歌唱合成工作的一些启发。本文将从以下几个方面进行解读:

  • 常见语音合成技术简介
  • DurIAN基本概念
  • DurIAN核心结构
  • 对之后工作的启发

1. 常见语音合成技术简介

常见的语音合成技术包含:

  • 基于波形拼接技术的语音合成
  • 统计参数语音合成
  • 端到端语音合成

基于波形拼接的语音合成技术是指在进行语音合成之前, 首先将相应的语音片段储存在计算机中,合成语音时根据特定 的准则选择相应的语音片段,并使用拼接算法将选择出的语音 片段在时域上进行拼接,合成最终的语音。

统计参数语音合成需要一个声码器来将语音信号转化为 代表语音特性的短时频域特征,然后使用统计模型来学习文本 输入与语音特征之间的关系。

端到端合成系统直接输入文本或者注音字符,系统直接输出音频波形。

与传统的语音合成技术相比,端到端语音合成技术有以下优势:

  • 使用编码器替代人工设计的语义特征。
  • 使用自回归模型减轻了参数式语音合成过度平滑的问题。
  • 使用wavenet等声码器替代传统声码器。
  • 引入了注意力集制。

常见的端到端语音合成模型由一个编码器,一个注意力模块,一个解码器组成,注意力模块负责将编码器的输出与解码器的输出做对齐。

如下图就是一个常见的Tacotron模型的结构图:

但是这样的attention模块可能会遇到一个问题,如果attention模块得不到较好的训练,或者训练数据不是很多的情况下,attention模块的输出矩阵可能就会使得,解码器在解码的时候出现重复或者遗漏的情况。

2. DurIAN基本概念

DurIAN模型是一种多模态的合成框架,它可以合成非常自然的语音,同时它还能合成说话人的面部表情。

DurIAN模型结合了传统参数式语音合成技术以及端到端语音合成技术,从而该模型有自然性以及鲁棒性的优势。

DurIAN模型的核心思想是:使用类似参数式语音合成技术的对齐模块,替换了端到端模型中的注意力模块,从而解决上述问题。

DurIAN模型的主要贡献有:

  • 使用对齐模块替换注意力模块。
  • 使用skip encoder架构同时编码音素序列以及中文韵律信息。
  • 支持细粒度的不同style的语音合成任务。
  • 使用并行waveRNN模型替换源waveRNN模型,提升了合成速度。

3. DurIAN核心结构

DurIAN模型图如下图所示:

DurIAN架构的输入是文本序列,输出是梅尔频谱图。DurIAN的架构如上图所示,其中包括:

  • 编码器,对文本信息以及韵律信息进行编码。对应的是上图左侧部分,其输入是音素序列以及停顿等控制音素,输出是编码好的序列。
  • 时长预测模型,该模型负责预测每个音素的发音长度。这个模型对应上图中间部分,该模型的输入是音素序列,输出是每个音素的发声时长。
  • 对齐模型,该模型的作用是将输入的文本序列以及输出的梅尔频谱图进行对齐。这个模型对应的是上图的中间部分。
  • 自回归解码器网络生成模型的中间输出。这部分对应上图右侧的解码器,输出向量是Post-net的输入向量。
  • Post-net用来将中间输出转换成目标输出(适配不同的声码器,或者将输出转换成人脸模型数据等)

编码器的输入是文本韵律符号序列X1:NX_{1:N}X1:N​,输出是隐状态序列h1:N′h_{1:N'}h1:N′​,

h1:N′=skip_encoder(X1:N)(3.1)h_{1:N'} = skip\_encoder(X_{1:N})\tag{3.1}h1:N′​=skip_encoder(X1:N​)(3.1)

其中NNN是包括输入文本和韵律的序列的长度,N′N^{'}N′是不包含韵律信息的输入文本的长度。

时长预测模型的作用是预测每个音素的发声时长,输入是音素序列以及对应时长,输出是每个音速实际发声的时长帧数信息。

对齐模型负责将encoderencoderencoder输出的隐变量按照时长预测模型输出的帧数信息进行扩充,获得与梅尔频谱帧数一致的序列信息,

e1:T=state_expand(h1:N′,d1:N′)(3.2)e_{1:T} = state\_expand(h_{1:N'},d_{1:N'}) \tag{3.2}e1:T​=state_expand(h1:N′​,d1:N′​)(3.2)

其中T表示输出的梅尔频谱的帧数。此处帧数扩充的方法是简单的将隐向量根据时长预测模型的输出复制。

处理过后的向量将被输送到解码器中进行自回归的方式解码,
y1:T′=decoder(e1:T)(3.3)y'_{1:T} = decoder(e_{1:T})\tag{3.3}y1:T′​=decoder(e1:T​)(3.3)

解码器的输出最后经过post-net网络得到最终输出
r1:T=post_net(y1:T′)(3.4)r_{1:T} = post\_net(y'_{1:T})\tag{3.4}r1:T​=post_net(y1:T′​)(3.4)

整个网络的loss:

L=∑n=1T∣y−y′∣+∑n=1T∣y−(y′+r)∣(3.5)L = \sum\limits_{n=1}^{T}{|y - y'|} + \sum\limits_{n=1}^{T}{|y - (y' + r)|}\tag{3.5}L=n=1∑T​∣y−y′∣+n=1∑T​∣y−(y′+r)∣(3.5)

4. 对之后工作的启发

这篇论文的优势在于DurIAN模型实现了一个能够同时控制韵律以及发音时长的TTS系统。

之前一段时间,行者团队对歌唱合成进行了研究,歌唱合成也可以认为是一个需要同时控制发声时刻以及发声时长的TTS系统(同时要考虑音高曲线)。之前的思路是使用类似WaveNet的模型进行语音合成,并不是端到端的合成,最后的合成效果并不如人意。歌唱合成任务与这个任务有很多相似的地方,可以进行借鉴,从而提升合成效果。


PS:更多技术干货,快关注【公众号 | xingzhe_ai】,与行者一起讨论吧!

DurIAN模型介绍相关推荐

  1. 自然语言处理中N-Gram模型介绍

    转载一下,这文章写的真好! 自然语言处理中N-Gram模型介绍 - 知乎 容易看懂,. 也是解决了,好奇为什么不用3. 因为,如果使用3的话.那么数量就会大的吓人!

  2. 高速串行总线的设计基础(一)同步时序模型介绍

    文章目录 前言 芯片间通信的时序模型 系统同步 源同步 自同步 并串转换 串并转换 时钟/数据恢复 参考文章 前言 高速信号设计涉及到方方面面的知识积累,也许TOC你认为即使没有掌握甚至没有听过一些高 ...

  3. 数据库系统概念总结:第二章 关系模型介绍

    周末无事水文章,期末备考的总结资料 第二章 关系模型介绍 2.1 关系数据的结构 关系数据库由表(table)组成,每个表有唯一的名字.一般来说,表中一行代表了一组值之间的一种联系 表中一行代表了一组 ...

  4. 5种网络IO模型介绍

    5种网络IO模型介绍 IO 模型分为以下几种: 阻塞IO 非阻塞IO 信号驱动IO IO多路复用 异步IO 前四个为同步IO 1 阻塞IO 一个IO操作需要两步: 等待数据和拷贝数据. blockin ...

  5. 经典Wide Deep模型介绍及tensorflow 2代码实现

    Wide & Deep模型介绍 目标: 内容: 一. 模型介绍 二. 推荐系统架构 三. Wide部分 四. Deep部分 五. Wide和Deep一起训练 六. 系统实现 (1)数据生成阶段 ...

  6. 学习笔记(36):Python网络编程并发编程-IO模型介绍

    立即学习:https://edu.csdn.net/course/play/24458/296460?utm_source=blogtoedu I/O模型介绍:I/O模型表示处于等待状态的模型,如套接 ...

  7. 乐玩自动化测试模块_自动化测试模型(一)自动化测试模型介绍

    一个自动化测试框架就是一个集成体系,在这一体系中包含测试功能的函数库,测试数据源,测试对象标准,以及各种可重用的模块.自动化测试在发展过程中经历了以下几个阶段,模块驱动测试,数据驱动测试及对象驱动测试 ...

  8. Qt样式表之一:Qt样式表和盒子模型介绍

    一.Qt样式表介绍 Qt样式表是一个可以自定义部件外观的十分强大的机制,可以用来美化部件.Qt样式表的概念.术语和语法都受到了HTML的层叠样式表(Cascading Style Sheets, CS ...

  9. 【转载】通过金矿模型介绍动态规划 (动态规划入门)

    先附上原文地址:http://www.cnblogs.com/sdjl/articles/1274312.html 通过金矿模型介绍动态规划 对于动态规划,每个刚接触的人都需要一段时间来理解,特别是第 ...

最新文章

  1. 非常好用的Python图像增强工具,适用多个框架
  2. Singleton Pattern
  3. Python中使用httpx模块详解
  4. pomelo mysql_pomelo连接mySQL
  5. 电脑添加打印机方法/步骤
  6. centos7安装便捷小工具命令
  7. 系列课程 ElasticSearch 之第 6 篇 —— 自定义扩展分词文件、文档映射
  8. 双目相机标定(MATLAB TOOLBOX_calib)
  9. VM-EXIT(EPT Violation)调用链
  10. 工行二维码支付时代来了
  11. Oracle Mutex实现机制
  12. warning和error的区别
  13. 基于51单片机的数字电压表(ADC0832)(Proteus仿真+程序)
  14. HTTP 错误 403 - 禁止访问
  15. python定时器教程_python定时器的实践
  16. Python学习笔记:7.5.8 Django快速建站 - Web开发实战 微信公众号开发3
  17. 如何查软件版本Linux,如何查看软件名称和版本号
  18. iOS开发 - 内购沙盒测试正常,因产品返回数为0被苹果审核多次拒绝 (In-app purchase products return 0)
  19. OrientDB通过控制台连接数据库
  20. python元组的创建 取值 排序 计数_NumPy能力大评估:这里有70道测试题

热门文章

  1. 中国互联网公司赚钱能力排行榜
  2. JAVA爬需要账号登录的网_如何用 Python 爬取需要登录的网站?
  3. Linux 永久修改主机名(转载)
  4. java里面com.是什么意思
  5. 每天过得很焦虑怎么办?尤其是职场焦虑。
  6. 【面试总结】JNI层MediaScanner的分析,挥泪整理面经
  7. python(14)--集合
  8. Subset sum problem
  9. outlook邮箱pc/mac客户端下载 含最新版
  10. 草料生成app自动下载的二维码