雷锋网AI科技评论按:百度前段时间推出了语音合成应用 Deep Voice,雷锋网也于近日回顾了百度在语音识别及语音合成的研究历程《从SwiftScribe说起,回顾百度在语音技术的七年积累》,但对于不了解TTS的同学们来说,要理解 Deep Voice 同样困难。
而近日,百度首席科学家吴恩达在 Twitter 上转发了MIT Dhruv Parthasarathy 的一篇medium 文章,其详细阐述了Baidu Deep Voice 的具体原理及操作方法。吴恩达表示,“如果你是语音合成的新手,那么这篇文章便是 Deep Voice 优秀且可读性强的一个总结。感谢@dhruvp! ”雷锋网AI科技评论编译,未经许可不得转载,以下为原文内容:
我希望把 ML/AI 领域最新的重要文章做成一个系列,该领域的文章里有相当多非常直观的思路,希望这些直观的思路能在本文中有所展现。百度 Deep Voice 是一个应用深度学习把文本转换成语音的系统, 这篇文章是本系列的第一篇博文,也是分析 Deep Voice 文章的上篇。
百度 Deep Voice
首先贴上Deep Voice 的 Arxiv链接:https://arxiv.org/abs/1702.07825
最近,吴恩达所在的百度人工智能团队发布了一篇令人叹为观止的文章,文章介绍了一种基于深度学习把文本转换成语音的新系统。文章中百度 Deep Voice 生成的录音例子如下所示,让结果来说话(录音内容)
百度文本转换语音系统成果。录音来源:http://research.baidu.com/deep-voice-production-quality-text-speech-system-constructed-entirely-deep-neural-networks/
显而易见,与 MacOS 的 TTS (文本转换成语音)系统相比,百度 Deep Voice 生成的录音听起来更自然,更像人类朗读的声音。但以上结果应当注意到一个大前提——百度 Deep Voice 原型有一个先天优势,那就是它利用人类朗读的一个录音源件来进行训练,这给它添加了一点人类说话的韵味。除此之外,Deep Voice还可以访问频率和持续时间数据。
除了能输出高质量的语音,论文创新的几个关键点是:
1. Deep Voice 将深度学习应用于语音合成的全过程。
以前的 TTS 系统会在某些环节上采用深度学习,但在Deep Voice之前,没有团队采用全深度学习的框架。
2.需要提取的特征非常少,因此容易应用于不同的数据集。
传统语音合成需要进行大量的特征处理和特征构建,但百度通过使用深度学习避免了这些问题。这使得 Deep Voice 的应用范围更加广泛,使用起来也更加方便。论文中也提到,如果需要应用于新的数据集,与传统系统动辄几个星期的时间相比,Deep Voice 可以在几个小时内完成重新调试:
传统的 TTS 系统完成(重新训练)需数天到数周的时间进行调节,而对Deep Voice进行手动操作和训练模型所需的时间只要几个小时就足够。
3.与现有技术相比,这个系统非常高效,专为生产系统而设计。
相比于 DeepMind 关于人类音频合成的开创性论文中实现的 WaveNet ,现在这个系统的有效速度提升了400倍。
我们专注于创建一个能迅速实现产品化的系统,这需要我们的模型能运行实时推断。Deep Voice 可以在几分之一秒内合成音频,并在合成速度和音频质量之间提供可调和的权衡。相比之下, WaveNet 合成一秒钟的音频,系统需要跑好几分钟。
光说说这些创新点就足以令人感到兴奋不已了!但是它是如何工作的呢?这篇博文的剩余部分,将尝试深入研究 Deep Voice 的不同部分,以及分析它们是如何融合在一起的。在此之前,可能你需要先看看这个视频,了解一下基础知识:
曾在斯坦福大学与Andrew Ng 一起工作的 Adam Coates 是 Deep Voice 的作者之一, Coates 博士在百度发表了关于把深度学习应用到语音的演讲(从3:49处开始观看)。
做好了功课,现在是时候深入探究 Deep Voice 的工作原理了!这篇博客的其余部分将遵循以下结构:
1.首先,看看 Deep Voice 如何理解一个例句并将其转换为与人声相似的语音(这一步就是大家熟知的合成流程)。
2.然后将推理流程进一步拆解,了解每个部分的作用。
3.接下来,我们将介绍这些独立部分实际上是如何训练的,以及实际的培训数据和标签。
4.最后,在下一篇博文中,我们将深究用于实现这些不同组件的深度学习架构。
现在让我们立足高点,看看 Deep Voice 如何识别一个简单的句子,并将其转换为我们听得见的音频。
我们即将探究的流程具有以下结构:
Deep Voice 的推理线路。来源:https://arxiv.org/pdf/1702.07825.pdf
为了理解这些组件是什么,以及它们如何组合在一起,我们一起逐步细究合成的具体过程。我们来看看 Deep Voice 是如何处理下面这个句子的:
It was early spring.
以英语为代表的语言不是语音语言(phonetic)。
(雷锋网AI科技评论按:语音语言指的是单词拼写与读音一致的语言,比如拉丁语就是一种典型的语音语言,即单词中没有不发音的字母,每个字母都有固定的发音。 )
例如以下单词(参考于linguisticslearner),都带后缀“ough”:
1.thoug (和 go 里面的 o 类似 )
2.through (和 too 里面的 oo 类似)
3.cough (和 offer 里面的 off 类似 )
4.rough (和 suffer 里面的的 uff 类似)
注意,即使它们有相同的拼写,但它们的发音却完全不同。如果我们的 TTS 系统使用拼写作为其主要输入,即使有相同的后缀,在接受为什么"thoug"和"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 将具有以下输入和输出。
· Input - "It was earky spring"
· Output - [IH1, T, ., W, AA1, Z, ., ER1, L, IY0, ., S, P, R, IH1, NG,. ]
在下一篇博文中我们将介绍如何训练这样的模型。
现在有了音素后,我们需要估计在说话时,这些音素的发音时间。这也是一个有趣的问题,因为音素应该基于上下文来决定它们或长或短的持续时间。拿下面围绕音素“AH N”的单词举例:
· Unforgettable
· Fun
相比第二个单词,“AH N”显然需要在第一个单词里发更长的发音时间,我们可以训练系统做到这一点。能够理解每个音素,并预测它们的发音时长(以秒为单位)是关键。
在这一步我们的例句会变成以下形式:
· Input - [IH1, T, ., W, AA1, Z, ., ER1, L, IY0, ., S, P, R, IH1, NG,.]
· Output - [IH1 (0.1s), T(0.05s),. (0.01s),...]
基本频率(蓝线)是声带发出浊音音素期间产生的最低频率(将其视为波形的形状)。我们的目标是预测每个音素的基频。
为了让发音尽可能地接近人声,我们还想要预测出每个音素的音调和语调。这一点从多方面考量,对以汉语为代表的语言尤为重要。因为这些语言中,相同的声音,读出不同的音调和重音具有完全不同的含义。预测每个音素的基频有助于我们发好每一个音素,因为频率会告诉系统,什么音素该发什么音高和什么音调。
此外,一些音素并不完全都发浊音,这意味着发这些音不需要每次都震动声带。
例如,拿发音“ssss”和“zzzz”做例子,注意到前者是清音 (unvoiced),发音时声带没有振动,而后者是浊音 (voiced) ,发音时声带振动了。
我们的基本频率预测也将考虑到这一点,预测出何时应当发清音,何时应该发浊音。
在这一步我们的例句会变成以下形式:
· Input - [IH1, T, ., W, AA1, Z, ., ER1, L, IY0, ., S, P, ., R, Ih1, NG,.]
· Output - [IH1(140hz),T(142hz),. (Not voiced),...]
在最后一步,我们将音素、持续时间和基频 (F0 profile) 合并,生成一个真正的音频。
生成语音的最后一步是,合并音素、持续时间和频率,输出声音。Deep Voice 是基于 DeepMind 的 WaveNet 基础之上的改进版本,成功地实现了这一步。为了理解WaveNet的基础架构,强烈建议阅读他们的原创博客文章。
基于每个输入的贡献, DeepMind 的原始 WaveNet 可以把众多不同输入扩大指数倍。注意上面列出的指数树结构。
资源:https://deepmind.com/blog/wavenet-generative-model-raw-audio/
WaveNet 生成原始波形,允许生成所有类型的声音,不同的口音、情绪、呼吸和人类语音的其他基本部分都能包含在内,这样的声音和人类的声音区别就非常小了。此外, WaveNet 甚至能在这一步之上生成音乐。
在发布的文章中,百度团队通过优化程序的执行能力,特别是优化执行生成高频输入的能力来改进 WaveNet 。因此, WaveNet 需要几分钟来生成一秒钟的新音频,百度修改后的 WaveNet 可能只需要几分之一秒完成同样的任务,如 Deep Voice 的作者所述:
Deep Voice 可以在几分之一秒内合成音频,并在合成速度和音频质量之间提供可调谐的权衡。相比之下,以前的 WaveNe 合成一秒钟的音频需要几分钟的运行时间。
下面是 Deep Voice 管道最后一步的输入和输出!
·Input - [IH1(140hz,0.5s), T(142hz, 0.1s),. (Not voiced, 0.2s), W(140hz, 0.3s), ...]
·Output - see bolow. 录音
文字转语音结果。录音来源:http://research.baidu.com/deep-voice-production-quality-text-speech-system-constructed-entirely-deep-neural-networks/
三、概要
以上就是探究的结果了!通过这三个步骤,我们已经看到了 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), . (Not voiced, 0.2s), W (140hz, 0.3s),…]
3.合并音素、持续时间和频率,输出该文本的声音。
· [IH1 (140hz, 0.5s), T (142hz, 0.1s), . (Not voiced, 0.2s), W (140hz, 0.3s),…] - > Audio
但是我们该如何实际训练 Deep Voice 以便能够执行上述这些步骤呢? Deep Voice 如何利用深度学习实现这个目标?
在下一篇博文中,我们将介绍 Deep Voice 训练的方方面面,并展示更多底层神经网络背后的奥妙,详情请点击以下链接 Baidu Deep Voice part2 - training
有兴趣了解更多关于深度学习的知识,或者工作在深度学习领域?发送电子邮件到 founders@getathelas.com 加入 Athelas !我们一直在寻找充满激情和好奇心的人:https://athelas.com/jobs/
更多机器学习文章请点击以下链接:
Baidu Deep Voice part2 - training
Write an AI to win at Pong from scratch with Reinforcement Learning
更多资讯请关注雷锋网。
via athelas 雷锋网编译