deep voice 2是由百度官方推出的一款先进的语音系统,可以快速的模拟出你说话的声音,对所有文字到语音管道都进行了深度学习,所有模仿出来的声音相似度极高。小编还提供了详细的使用教程,需要的朋友可以下载!
软件功能
1. Deep Voice对所有文字到语音管道的全过程中都使用了深度学习。
先前TTS(文本到语音)系统在不同组件使用了深度学习,但在Deep Voice之前,没有团队对整个系统采用深度学习。
2.需要非常少的特征工程,因此易于应用于不同的数据集。
与传统管道相比,通过使用深度学习能够避免大量的特征处理,这使得深度语音更加适用于不同的问题领域。另外比传统的TTS系统的训练周期更短,大大缩减了模型的训练时间,从之前的几周时间下降到几个小时即可完成训练。
3. 比目前最优的系统快很多,被设计用于生产系统。
deep voice2使用教程
步骤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),…] -> 音频
那么,我们实际通过什么样的方式来训练这些步骤的模型,从而得到可靠的预测结果呢?
语音训练流程
-使用现有的数据训练Deep Voice
下面,我们将逐个讲解训练流程中的每个环节。
步骤一:训练语素—音素模型
语音合成的第一步就是使用语素—音素转换模型将文本转换成音素。
上一篇文章中我们就介绍了这个例子:
Input — “It was early spring” Output — [IH1, T, ., W, AA1, Z, ., ER1, L, IY0, ., S, P, R, IH1, NG, .]
在大多数情况下,我们可以使用音素字典直接将文本输入,并得到如上对应的音素结果。
但如果出现音素字典没有覆盖的词呢?这其实时常发生,就跟我们人类经常会增加新的词汇一样(比如,“谷歌”,“截屏”等等的)。那么,在遇到新词的时候,我们便需要一个回退机制来预测音素了。
Deep Voice使用神经网络来实现这个功能。准确来讲,它沿用过了Yao和Zweig在微软进行的Sequence to Sequence(Seq2Seq)的学习方法来进行文本对应的音素预测。
与其将这个原理用我自己的语言剖析深入,还是附上我觉得解释得比较好的视频和文章给大家来理解(视频地址)。
Quoc Le(Google Brain的深度学习研究院和Sequence to Sequenc分析模型的作者)在湾区深度学习学校关于Sequence to Sequenc分析模型的课程
《深度学习白皮书》中循环神经网络和LSTM的章节。
数据构成
那么,基于上述原理,训练使用的数据和标签是什么样子的呢?
Input(X-逐字的)
[“It”, “was”, “early”, “spring”]
标签(Y)
[[IH1, T, .], [W, AA1, Z, .], [ER1, L, IY0, .], [S, P, R, IH1, NG, .]]
通过查询标准音素字典(比如CMU这个,链接),我们可以得到与输入文本一一对应的标签。
步骤二:运行分割模型
在上一篇中,我们讲过,在语音合成的时候我们需要预测音素的持续时间和基频。而通过音素的音频剪辑,我们可以轻易地获取这两个数据。
Deep Voice运用了分割模型来获取每个音素的音频剪辑。
分割模型将每个音素发声的场景进行匹配,从而获取其对应的音频分割片段和其在音频中的发声位置。
如下图所示:
分割模型预测了音素在一组音频剪辑中的发声位置和时长
数据构成
分割模型真正有趣的部分在于其预测的不是每个独立音素的位置,而实际是预测了每组音素对的位置。此外,这种模式是无监督的,因为我们事实上无法知道语音片段中语素对应的真正位置的标签信息。分割模型通过CTC loss模型来训练,你可以通过链接,深入了解它的原理。
如下是数据的形式:
Input(X)
“It was early spring”的音频剪辑
对应的音素
[IH1, T, ., W, AA1, Z, ., ER1, L, IY0, ., S, P, R, IH1, NG, .]
Outputs(Y)
音素对和它们在音频中的起始时间
[(IH1, T, 0:00), (T, ., 0:01), (., W, 0:02), (W, AA1, 0:025), (NG, ., 0:035)]
为什么要去预测音素对而不是独立的每个音素呢?因为当我们对给定时间戳对应的某个音素进行预测时,在该音素发声的中间位置预测的概率是最大的。
对独立单个的音素而言,给定语音对应某个音素的概率在语音的发声正中最大;而对成对的音素而言,概率最大值出现在两个音素交界点上
对成对的音素来说,概率最大值出现在两个音素交界点上(见上图)。我们可以轻易的检测出两个音素发声的交界点,因此,使用音素对可以让我们更简单地进行定位。
步骤三:训练音素的持续时间和基频的预测模型
在语音合成步骤中,我们需要对音素的持续时间和基频进行预测。
根据步骤二,我们已经从分割模型中拿到了音素的持续时间和基频,现在我们可以通过模型训练来预测新音素的数据了。
分割模型输出是持续时间模型和基频率模型的标签
Deep Voice通过一组单一共同训练的模型输出这些数据。
如下是数据组成:
Input(X)
音素
[IH1, T, ., W, AA1, Z, ., ER1, L, IY0, ., S, P, R, IH1, NG, .]
标签(Y)
每个音素的持续时间和基频,通过分割模型获取
[(IH, 0.05s, 140 hz), (T, 0.07s, 141 hz), … ]
有了这些数据,我们就可以进行时间和Fo函数预测了。
步骤四:训练语音合成
最后,我们需要对语音合成流程中的实际生成语音的步骤进行训练。与Deep Mind中的WaveNet非常相似,这个模型具有如下的架构:
我们将会把真实的语音剪辑作为标签来进行训练
数据构成:
Input(X)
带有持续时间和基频信息的音素
[(HH, 0.05s, 140 hz), (EH, 0.07s, 141 hz), ... ]
标签(Y)
对应文本的真实语音剪辑
这样,我们就将语音合成的各个步骤过了一遍,由此便可以进行语音合成了
软件特色
北京时间5月26日早间消息,据美国科技媒体Engadget报道,百度的DeepVoice TTS系统取得了巨大进步,与人类的声音更为接近,甚至可以精准模仿不同地区的口音。
百度表示,Deep Voice 2可以“学习数百种不同的语音,从每个说话者那里吸收的数据不到半个小时,但却可以实现很高的音质。”
而上一代产品要达到类似的目的,每个声音需要接受20小时的训练。
在短短几个月的时间内,该系统便在效率上进一步超越谷歌WaveNet。
百度表示,与之前的TTS系统不同,Deep Voice 2可以完全凭借自己的能力找到进行训练的语音之间的共同特点,不需要接受任何事先指导。
“Deep Voice可以学习并完美模仿数百种语音。”该公司在博客中说。
百度还在一篇论文中总结道,该公司的神经网络只需要通过数百个不同的讲话者吸收很小的声音样本便可创作很好的语音效果。
由此看来,可能要不了多久就能听到数字语音助手用更加自然的语音与我们交流