百度Deep Voice详解分析:快速理解语音合成流程(Part I)

更多深度文章,请关注:https://yq.aliyun.com/cloud

作者介绍


Dhruv Parthasarathy:MIT毕业,曾经就职于Udacity,带领人工智能、自动驾驶、深度学习以及机器学习项目;目前就职于Athelas,研发副总裁。

领英:http://cn.linkedin.com/in/dhruv-parthasarathy

Twitter: https://twitter.com/dhruvp

博客:https://blog.athelas.com/@dhruvp

Medium:https://medium.com/@dhruvp4

本文介绍一篇关于Deep Voice的论文,Deep Voice是应用深度学习将文本转换语音的系统。

论文的Arxiv 链接:https : //arxiv.org/abs/1702.07825

    这篇论文是由Andrew Ng的AI团队发表,遗憾的是Andrew Ng于2017年3月22日宣布离职,并开启他人工智能事业的新篇章,正可谓“东山再起竟有时,人生何处不相逢”,相信Andrew Ng在AI领域会有更多的贡献,感谢Andrew Ng对中国人工智能的发展做出的贡献并祝福他。

言归正传,这篇论文介绍了一个新的深度学习系统,该系统用于将文本转换为语音。论文能够生产的例子如下(可以去链接听取录音内容)。

 

   与MacOS的TTS(文本转换成语音)系统相比,该技术的结果显得更加自然和拟人化。但以上结果有一个需要重点注意的地方—— Deep Voice有机会使用人讲话的录音来训练模型,这使得它说的像人一样。此外,Deep Voice也可以访问频繁和持续时间数据。但是,除了输出的质量语音之外,论文还有几个关键的方法在语音领域中脱颖而出:
1. Deep Voice对所有文字到语音管道的全过程中都使用了深度学习。

先前TTS(文本到语音)系统在不同组件使用了深度学习,但在Deep Voice之前,没有团队对整个系统采用深度学习。

2.需要非常少的特征工程,因此易于应用于不同的数据集。

与传统管道相比,通过使用深度学习能够避免大量的特征处理,这使得深度语音更加适用于不同的问题领域。另外比传统的TTS系统的训练周期更短,大大缩减了模型的训练时间,从之前的几周时间下降到几个小时即可完成训练。

3. 比目前最优的系统快很多,被设计用于生产系统。

   本文的作者声称Deep Voice有效地实现了比Deep Mind的WaveNet快400倍的速度。他们特别写道:

作者专注于创建一个生产就绪系统,这需要设计的模型能实时运行推理。Deep Voice可以在几分之一秒内合成音频,并在合成速度和音频质量之间提供可调谐的权衡。相比之下,WaveNet需要几分钟的运行时间来合成一秒钟的音频。
背景材料

这些创新点有没有让你兴奋?接下来一起深入分析Deep Voice的不同部分,以及它们之间是如何组合吧。在此之前需要了解一些有用的预备知识:

亚当·考茨(Adam Coates)的演讲(从3:49观看,需翻墙)。Coates博士是Deep Voice的作者之一,之前与Stanford的Andrew Ng合作。看完背景材料后就该深入了解Deep Voice如何工作了!博客的剩余部分将遵循以下结构:

1. 首先,来看一下Deep Voice如何处理一个例句,并将其转化为与人声相似的语音。这被称为合成流程。

2. 然后,将合成流程分解成更小的部分,并了解每个部分的作用。

3. 之后,将介绍如何实际训练这些单独的部分以及实际的训练数据和标签。

4. 最后,在另一篇博文中,将研究用于实现这些不同组件的Deep Learning体系架构。

合成流程 - 将新文本转换为语音

现在来看看Deep Voice如何处理一个简单的句子,并将其转换为音频。流程将具有以下架构:

为了了解这些内容是什么,以及它们如何组合在一起,我们逐步了解这个具体过程。例子短语:

it is early spring

步骤1:将语素(文本)转换为音素
语言是特殊的,例如英语,因为它们不是音形状=一致。例如,下面所有的词都使用后缀“ough”:

1. thought(如go中的o)

2. through(如too中的oo)

3. cough(如offer中的off) 

4. rough(如suffer中的uff)

   可以看到,即使它们具有相同的拼写,发音却完全不一样。如果TTS系统使用拼写作为主要输入,那么即使它们具有相同的后缀,也不可避免地会遇到试图调和“though”和“rough”应该如此发音的问题。因此需要使用略微不同的表达方式来展示有关发音的更多信息这正是音素所在的原因

人发出的声音是由不同的音素单位组成,将它们结合在一起后就可以重新创建几乎所有单词的发音。以下是分为音素
CMU的音素字典)的几个例子:

  • White Room- [W,AY1,T,.,R,UW1,M,.]
  • Crossroads - [K,R,AO1,S,R,OW2,D,Z,.]

音素旁边的数字1,2等代表发音压力的位置,此外句号表示发音中的停顿。所以,Deep Voice的第一步用一个简单的音素字典将每一句话简单的转换成它的音位的表示。
我们的句子
对于第一步而言,Deep Voice将具有以下输入和输出。

  • 输入 - “It was early spring”
  • 输出 - [IH1,T,...,W,AA1,Z ...,ER1,L,IY0,...,S,P,R,IH1,NG,.]

步骤2,第1部分:预测持续时间
有了音素后,需要估计的就是说话时应该保持这些音素的时间长短问题,另外音素应该是根据其上下文决定其持续长或短。围绕音素“AH N”进行以下实例:

  • Unforgettable
  • Fun

显然,在第一种情况下,“AH N”需要的时间比第二种情况更长,我们可以训练系统来做到这一点。

另外我们将会使用每个音素,并预测句子应该持有多长时间(秒)。
我们的句子

以下是我们这个例子中变成以下形式:

  • 输入 - [IH1,T,.,W,AA1,Z.,ER1,L,IY0,.,S,P,R,IH1,NG,.]
  • 输出 - [IH1((0.1s),T(0.05s),.(0.01s),...]

步骤2,第2部分:基频预测 

    之后还要预测每个音素的音调和语调,使其尽可能地听起来像人声。这在许多方面对于像汉语这样的语言尤其重要,其中相同的声音可以基于音调和口音具有着完全不同的含义(口音),大家都在生活中都遇到过口音闹出的笑话吧。预测每个音素的基频有助于做到这一点。频率告诉系统音素的准确发音及音调等。另外,一些音素根本不是有声音的,这意味着虽然它们被发音,但声带没有的任何振动,这类似于英语中的清辅音和浊辅音。本文的基频预测也将考虑到这一点,并预测什么时候是否应该发出声音。

我们的句子

以下是例句将变成以下形式:

  • 输入 - [IH1,T,.,W,AA1,Z.,ER1,L,IY0,.,S,P,R,IH1,NG,.]
  • 输出 - [IH1((140hz),T(142hz),.(不发音),...]

步骤3:音频合成

创建语音的最后一步是将音素、其持续时间和频率合在一起以输出声音。Deep Voice使用修改后DeepMind的WaveNet(需翻墙,见附件)的版本做到这点。强烈建议阅读原始博客(需翻墙,见附件)文章,了解WaveNet的基础架构。

WaveNet生成原始波形,允许生成所有类型的声音,包括不同口音、情绪、呼吸和人类言语的其他基本部分。此外,WaveNet甚至可以进一步生成音乐。

在论文中,该技术团队通过优化程序的执行能力(尤其是高频输入)来修改WaveNet。因此,如果WaveNet需要几分钟的时间才能生成新的音频,最终结果的WaveNet可能只需要几分之一秒的时间,即Deep Voice的作者所描述的那样:

 Deep Voice可以在几分之一秒内合成音频,并在合成速度和音频质量之间提供可调谐权衡。相比之下,以前的WaveNet需要几分钟的运行时间来合成一秒钟的音频。

我们的句子
以下是Deep Voice管道最后的输入和输出!

  • 输入 - [IH1(140hz,0.5s),T(142hz,0.1s),.(不发音0.2s),W(140hz,0.3s),..]
  • 输出 - 听录音


总结
通过这3个步骤,可以看到Deep Voice如何处理一个简单的文本以及转换后其音频的表现。以下是步骤的总结:
1. 将文本转换为音素。“It was early spring”

  • [IH1,T,.,W,AA1,Z.,ER1,L,IY0,.,S,P,R,IH1,NG,.]

2.预测每个音素的持续时间和频率。

  • [IH1,T,.,W,AA1,Z.,ER1,L,IY0,.,S,P,R,IH1,NG,.] -> [IH1(140hz,0.5s),T(142hz,0.1s),.(不发音0.2s),W(140hz,0.3s),..]

3.结合音素、持续时间和频率,输出表示文本的声波。

  • [IH1(140hz,0.5s),T(142hz,0.1s),.(不发音0.2s),W(140hz,0.3s),..]->音频

但是,如何实际训练Deep Voice能够执行上述步骤?Deep Voice如何利用深度学习来实现其目标? 

在下篇博客中,我们将介绍Deep Voice的每一部分是如何训练的和神经网络背后更直观的表示,有兴趣可以阅读第二部分

附件为原文的pdf、需翻墙文档的pdf

文章原标题《Deep Voice explained: Part 1 — the Inference Pipeline》,作者:Dhruv Parthasarathy,译者:海棠,审阅:tiamo_zn

文章为简译,更为详细的内容,请查看原文

 

时间: 2025-01-20 13:39:22

百度Deep Voice详解分析:快速理解语音合成流程(Part I)的相关文章

百度地图API详解之事件机制,function“闭包”解决for循环和监听器冲突的问题:

原文:百度地图API详解之事件机制,function"闭包"解决for循环和监听器冲突的问题:  百度地图API详解之事件机制 2011年07月26日 星期二 下午 04:06 和DOM编程里的事件模型一样,百度地图API也提供了类似的事件机制.本文介绍了事件监听的添加和移除方法,this指针和事件参数的使用以及绑定事件监听函数中涉及的闭包问题,最后分享了一个用来增强地图API事件机制的开源项目. 事件添加和移除 我们最简单的事件开始,下面的代码示例给map对象添加了click事件的监

百度 Deep Voice 实现文本到语音的实时转换;GTX 1080 TI 发布,性能超 Titan X | AI 开发者头条

▲ 内容预览: 百度实现文本到语音的实时转换 Facebook 发布支持 90 种语言的预训练词向量 英伟达发布 GTX 1080 TI 每日推荐阅读: 高手实战演练,十大机器学习时间序列预测难题 从零起步,基础机器学习模型和算法的 Python 代码实现 █ 百度 Deep Voice,实现文本到语音的实时转换 雷锋网消息,今日百度公开宣布了 Deep Voice,一个产品级的文本到语音转换( text-to-speech,TTS)系统. 该系统完全由深度神经网络搭建而成,最大的优势在于能够满

[推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆)

原文:[推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆) [推荐]ORACLE PL/SQL编程详解之三: PL/SQL流程控制语句(不给规则,不成方圆) --通过知识共享树立个人品牌. 继上五篇:    [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)    [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到)        [推荐]ORACLE PL/SQL编程之五:异常

Netty4详解一:理解Netty的设计理念NIO

一.初步了解Netty            Netty是一个NIO的编程框架,Netty是非常容易和快速开发出网络应用程序的,它提供了一种全新的形式来方便你编写网络应用:它提供了对一些对复杂问题的抽象,提供了一套非常容易使用的api来把我们的业务逻辑和纯粹处理网络的代码分离开来.因为Betty是基于NIO,因此它的整个API都是异步的.      Netty简化了基于TCP和UDP的编程,但是你仍可以用它的底层的API做一些底层处理,因为Netty提供了一系列高抽象的API.      Net

百度高管详解百度投资策略

作为中国移动互联网的行业巨头,百度在业务快速成长的同时,对互联网行业进行大举投资,这也使得外界对于百度的投资并购策略非常好奇,猜测不断.近日百度企业发展部总经理汤和松进行详解,称没有战略价值的纯财务投资项目百度原则上不投. 据了解,百度投资主要有两大目的,创造战略价值和财务回报.支持生态系统持续健康成长.为此,无法以互联网为载体实现快速扩张的业务,如房地产.能源.食品等传统行业百度不会投资,百度也不会主动以VC的角色寻找财务投资项目. 汤和松说,百度投资并购主要有两大标准,独立的财务前景和与百度

Tomcat 配置技巧精华详解分析

技巧|精华|详解 1.配置系统管理(Admin Web Application) 大多数商业化的J2EE服务器都提供一个功能强大的管理界面,且大都采用易于理解的Web应用界面.Tomcat按照自己的方式,同样提供一个成熟的管理工具,并且丝毫不逊于那些商业化的竞争对手.Tomcat的Admin Web Application最初在4.1版本时出现,当时的功能包括管理context.data source.user和group等.当然也可以管理像初始化参数,user.group.role的多种数据库

Linux精华 Tomcat服务器配置技巧详解分析

服务器|技巧|精华|详解 1.配置系统管理(Admin Web Application) 大多数商业化的J2EE服务器都提供一个功能强大的管理界面,且大都采用易于理解的Web应用界面.Tomcat按照自己的方式,同样提供一个成熟的管理工具,并且丝毫不逊于那些商业化的竞争对手.Tomcat的Admin Web Application最初在4.1版本时出现,当时的功能包括管理context.data source.user和group等.当然也可以管理像初始化参数,user.group.role的多

Android SwipeMenuListView框架详解分析_Android

周末 特地把Android SwipeMenuListView(滑动菜单)的知识资料整理一番,以下是整理内容: SwipeMenuListView(滑动菜单) A swipe menu for ListView.--一个非常好的滑动菜单开源项目. Demo  一.简介 看了挺长时间的自定义View和事件分发,想找一个项目练习下..正好印证自己所学. 在github上找到了这个项目:SwipeMenuListView这的真不错,对事件分发和自定义View都很有启发性,虽然还有点小瑕疵,后面说明.想

MVC系列(3) HttpRuntime详解分析(下)

文章内容 话说,经过各种各样复杂的我们不知道的内部处理,非托管代码正式开始调用ISPAIRuntime的 ProcessRequest方法了(ISPAIRuntime继承了IISPAIRuntime接口,该接口可以和COM进行交互,并且暴露了 ProcessRequest接口方法).至于为什么要调用这个方法,大叔也不太清楚,找不到微软相关的资料哦.但大叔确定该方法就是我们进入 HttpRuntime的正式大门,接着看吧. public int ProcessRequest(IntPtr ecb,