INTRODUCTION

Deep Voice3是由百度提出的一个全新的全卷积TTS架构。百度的主要工作分为如下五个方面:

  1. 提出了一个全卷积的 character-to-spectrogram 架构,它能并行计算,并且比使用循环单元的架构快
  2. Deep Voice3训练非常快,并且可以扩展到LibriSpeech语音数据集,该数据集包含来自2484个说话人的820小时音频数据
  3. 可以产生单调的注意力行为 (monotonic attention behavior),避免了seq2seq语音合成中常见的错误
  4. 比较了几种波形合成方法的质量,包括WORLD、Griffin-Lim以及WaveNet
  5. 描述了Deep Voice3推理内核的实现,它可以在单个GPU上提供高达每天一千万次推理

ARCHITECTURE

Deep Voice3能够将各种文本特征(如字符、音素、重音)转换为各种声码器参数,如梅尔谱、线性对数谱、基频、频谱包络等。这些声码器参数可用作波形合成模型的输入

Deep Voice3架构包括3个组件:

  • 编码器:完全由卷积构成,用于提取文本特征
  • 解码器:也是完全由卷积构成,利用**多跳卷积注意力机制 (multi-hop convolutional attention mechanism) **将提取的文本特征,以一种自回归的方式解码成低维的音频特征
  • 转换器:同样是完全由卷积构成,它从解码器隐藏状态预测最终声码器的参数(取决于声码器选择)。与解码器不同,转换器是非因果的,因此它可以依赖未来的上下文信息

优化的目标是解码器转换器损失的线性组合。作者将解码器和转换器分开并应用于多任务训练,因为这样可以使得实践中注意力更好的学习。具体来说的话,梅尔谱预测的损失指导了注意力机制的训练,因为注意力的训练利用了梅尔谱预测以及声码器参数预测的梯度

TEXT PREPROCESSING

  1. 字母全部转大写
  2. 删除所有标点符号
  3. 每句话的结尾由且仅由句号或问号组成
  4. 使用特殊的分隔符替换单词之间的空格,这些分隔符表示说话人在单词之间停顿的时长。共有四种特殊的分隔符,它们表示的含义分别是:含糊不清的单词、标准发音和空格字符、单词之间的短时停顿、单词之间的长时停顿。例如句子"Either way, you should shoot very slowly," 在way后带有长时停顿,在shoot后带有短时停顿,可以写成"Either way%you should shoot/very slowly%." 其中%表示长时停顿,/表示短时停顿。停顿时长可以通过手工标记或文本音频对齐器

CONVOLUTION BLOCKS

该卷积块包含一个一维卷积滤波器,一个门控可学习的非线性单元,一个残差连接,以及一个缩放因子0.5\sqrt{0.5}0.5

。为了引入说话人的相关特征,在经过softsign激活函数之后,将说话人特征作为偏置添加到卷积滤波器的输出。卷积块中使用标准正态分布初始化卷积滤波器的权重

Softsign函数:
y=F(x)=x1+∣x∣.y=F(x)=\frac{x}{1+|x|}. y=F(x)=1+xx.

ENCODER

编码器网络首先从文本编码开始,将字符或音素转换为可训练的向量表示heh_ehe。然后将heh_ehe送入全连接层以投影到目标维度。PreNet得到的输出再送入一系列卷积块,以提取时间相关的文本信息。最后,它们被投影回Text Embedding维度以创建注意力键向量hkh_khk。从注意力键向量和文本嵌入计算注意力值向量hv=0.5(hk+he)h_v=\sqrt{0.5}(h_k+h_e)hv=0.5

(hk+he),以联合考虑heh_ehe中的局部信息和hkh_khk中的长时上下文信息。键向量hkh_khk被各个注意力块用来计算注意力权重,而最终的上下文向量被计算为值向量hvh_vhv的加权平均

DECODER

解码器以自回归的模式预测接下来的r (r>1) 帧梅尔谱。由于不能利用后面时刻的数据,所以解码器采用的是causal convolution或者也叫做masked convolution

梅尔谱数据先经过PreNet,然后通过casual convolution层将其变为query矩阵。再与Encoder的输出的Key和Value矩阵进行attention运算。如此积累多层,最后经过全连接层预测接下来的r帧梅尔谱,并且还会预测是否该停止预测(类似于Tacotron2)。损失函数是L1 Loss及交叉熵

ATTENTION BLOCK

Attention模块就是大家熟知的传统点积计算方法,先用query矩阵与key矩阵计算attention权重,然后再对value矩阵加权求和,得到context向量。此外,attention block还引入了位置编码hp(i)h_p(i)hp(i)帮助文本和频谱进行对齐
hp(i)=sin(wsi/10000k/d),i=0,2,4,...hp(i)=cos(wsi/10000k/d),i=1,3,5,...h_p(i)=sin(w_si/10000^{k/d})\ ,i=0,2,4,...\\ h_p(i)=cos(w_si/10000^{k/d})\ ,i=1,3,5,... hp(i)=sin(wsi/10000k/d),i=0,2,4,...hp(i)=cos(wsi/10000k/d),i=1,3,5,...
其中,iii是时间步索引,kkk是位置编码中的通道索引,ddd是位置编码中所有通道的数量,wsw_sws是编码的位置率。位置率决定了注意力分布中线的平均斜率,大致对应于语速。对于单说话人,query中的wsw_sws被固定为1,key中的wsw_sws被固定为输入时间步与输出时间步之比;对于多说话人,wsw_sws通过每个说话人嵌入进行计算(下图左边)

详细流程如下图所示

在翻译场景中,源语言句子和目标语言句子中词的对应顺序并不是严格单调的,而在语音合成中,语音是按照文本顺序读出来的,所以对齐关系会更严格

CONVERTER

转换器网络将解码器的最后隐藏层的输出作为输入,转换器包含若干非因果卷积块,然后预测下游声码器的参数。与解码器不同,转换器是非因果和非自回归的,因此它可以使用解码器的未来信息进行预测。转换器有很多种,可以使用Griffin-fim或者wavenet等,当然,采用wavenet的效果会好一些。整个模型框架如下

RESULTS

Deep Voice3模型由于采用全卷积而非GRU来提取文本及频谱特征,可以大幅提高训练时GPU的利用率,相同的batch size下,速度是Tacotron的10倍。并且达到收敛所需的步数也只是Tacotron的1/4。在加入monotonic attention后,合成语音的自然语也有所提高

REFERENCE

  • 神经网络语音合成模型介绍-DeepVoice3
  • Deep Voice 3:通过卷积序列学习来扩展语音合成
  • Deep Voice3论文

百度语音合成模型Deep Voice3相关推荐

  1. Android 百度语音合成 (含离线、在线、API合成方式,详细步骤+源码)

    百度语音合成 声明 前言 正文 一.创建项目 二.离线语音合成 1. 配置AndroidManifest.xml 2. 配置SDK 3. 离线SDK初始化 4. 导包 5. 运行 三.在线语音合成 - ...

  2. 百度语音系统Deep Voice新突破 可在几秒内克隆你的声音

    文章来源:ATYUN AI平台 百度的AI研究部门近日宣布,其文本到语音(TTS)系统"Deep Voice"已经学会了如何使用仅三秒钟的语音样本数据来模仿人类的声音. 这项技术被 ...

  3. Android 开发 框架系列 百度语音合成

    Android 开发 框架系列 百度语音合成 官方文档:http://ai.baidu.com/docs#/TTS-Android-SDK/6d5d6899 官方百度语音合成控制台:https://c ...

  4. 百度语音合成(Android简单实现)

    1 简介 百度开发文档 https://ai.baidu.com/docs#/TTS-Android-SDK/top 本文实现了1种离线语言合成和多种在线语音合成. 百度语音合成需要经过以下几个步骤, ...

  5. 神经网络语音合成模型介绍

    最近一段时间主要做语音合成相关项目,学习了几种端到端神经网络语音合成模型,在这里做一个简要介绍.主要内容如下: -语音合成简介 -线性谱与梅尔谱 - Tacotron - Deepvoice 3 - ...

  6. Python 技术篇-百度语音合成API接口调用演示

    百度语音合成api文档 现在演示的是调用百度语音合成,然后再转化为本地 mp3 的内容. 重要:tok 参数的获取请看上一篇文章: Python 技术篇-百度语音API鉴权认证获取Access Tok ...

  7. Python制作专属有声小说(调用百度语音合成接口)

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:merlin& 这一次的目标是使用百度云的人工智能接口,实现 ...

  8. 百度语音合成 java 教程_调用百度语音合成接口

    首先在百度云要先创建应用,获取apiKey . secretKey. 百度云账号的用户id php 调用接口: //百度语音合成 public function voice_st(){ $text = ...

  9. 百度语音合成 java 教程_【百度语音合成】JavaAPI方式语音合成示例

    package com.xs.audio.tns; import java.net.URLEncoder; import com.xs.common.APIContants; import com.x ...

最新文章

  1. 程序员到了35 岁就要被裁员?
  2. 鸟哥Linux私房菜基础学习篇 第二部分 Linux 文件、目录与磁盘格式_Linux文件权限与 目录配置_Linux文件与目录管理...
  3. [Cocos2d-x For WP8]Menu菜单
  4. 三星电子推出X-net架构用于语音通话
  5. java log4j logback jcl_内部分享:如何解决Java日志框架冲突问题。
  6. variable not availabe in Chrome debugger
  7. 搭建java_搭建JAVA环境
  8. python 相关性检验怎么计算p值_不会Python进行时间序列预测?不要紧,大神来教你...
  9. 单人存档_电子发票归档怎么保存稳当?电子发票存档你都会了吗?
  10. 注册表修改大全(浏览文章时可以使用CTRL+F查找)
  11. 发送邮件的python脚本
  12. C#基础知识五之abstract virtual关键字
  13. Vitamio 3.0 新手教程
  14. 圆孔夫琅禾费衍射MATLAB程序,模拟夫琅禾费衍射的matlab源代码
  15. 产品经理原型工具选择:墨刀和axure的区别?
  16. PS创意合成苹果橘子
  17. 计算机错误代码0X000000be,win7电脑出现蓝屏错误0x000000BE的解决方法
  18. java计算抛物线的标准方程_抛物线方程公式大全_抛物线的四种标准方程_抛物线公式_抛物线方程及图像_高中数学知识点总结网...
  19. 外盘资管分仓软件(如智星、金管家、信管家等)和内盘(融行等)分仓软件的区别?
  20. H5+CSS3实现官网首页--视频全屏背景

热门文章

  1. Bing翻译实例(microsoft translator API)
  2. java 通过SSL/TLS加密https建立连接
  3. hosts文件修改后域名无法访问
  4. vmware 14 安装centOS 7时,出现Network boot from Intel E1000
  5. android setting之Settings.system设置
  6. 安心做技术研究的技术的少,为了名气,改写文章如此泛滥!
  7. php单链表检测有没有环,PHP找出链表中环入口节点步骤详解
  8. Web 应用程序防火墙 (WAF)
  9. Revit一款主要用于进行建筑信息建模的软件
  10. Rust结伴学习 — 前言