现在你可以通过深度学习用别人的声音来说话了

 

语音合成(Text-to-speech,TTS)是指文本到音频的人工转换,也可以说给定一段文字去生成对应的人类读音。人类通过阅读来完成这项任务,而一个好的TTS系统是让计算机自动完成这项任务。

在打造这样一个系统时,一个非常有趣的地方是为生成的音频选择哪个声音,是男人还是女人的声音?声音是大还是小?

在使用深度学习创建TTS时,这有一个限制,你必须收集文本-音频的数据集,而录制演讲的演讲者可能是固定的——因为你不可能有无限多个演讲者!

所以,如果你想为自己或他人的声音创建音频,唯一的方法就是收集一个全新的数据集。

来自谷歌名为 Voice Cloning 的人工智能研究使计算机可以用任何类型声音发出声音。
 

Voice Cloning是怎样工作的

很明显,为了让电脑能够使用任何类型声音发出声音,它需要理解两件事:它读的是什么以及它是如何读的。

因此,谷歌研究人员设计的语音克隆系统有两个输入:我们想要读取的文本和我们想要用来阅读文本的语音样本。

例如,如果我们想让蝙蝠侠读“我爱披萨”这句话,那么我们会给系统两样东西:“我爱披萨”的文本和一小段蝙蝠侠的声音样本,这样它就知道蝙蝠侠的声音应该是什么样的。而电脑的输出应该是蝙蝠侠说“我爱披萨”的声音音频!

从技术角度来看,系统分为3个顺序组件:

  1. 给定我们希望使用的声音的一个小音频样本,将语音波形编码为一个固定的维向量表示

  2. 给定一段文本,也把它编码成向量表示。将语音和文本这两个向量结合起来,将它们解码成声谱图

  3. 使用声码器将声谱图转换成我们可以听到的音频波形。

现在你可以通过深度学习用别人的声音来说话了

系统的简化版本

在文章中,我们对这三个部分分别进行了训练。

在过去几年中,语音合成系统在深度学习社区中得到了很多研究关注。事实上,有很多基于深度学习针对语音合成的解决方案都非常有效。

这里的关键是,系统能够将编码器从语音中学到的“知识”应用到文本中。

在分别编码后,将语音和文本组合在一个公共的嵌入空间中,然后进行解码,生成最终的输出波形。
 

克隆声音的相关实现代码

多亏了人工智能社区中开放源码思想的美妙之处,在这里有一个公开可用的语音克隆实现!你可以按照下面的介绍这样来使用它。

  1. 首先克隆仓库:

git clone https://github.com/CorentinJ/Real-Time-Voice-Cloning.git

  1. 安装必要的库并确保使用的是Python 3的版本:

pip3 install -r requirements.txt

  1. 在README文件中,你还可以找到下载预训练模型和数据集的链接,并尝试一些示例。

  2. 最后,你可以运行以下命令打开GUI:

python demo_toolbox.py -d <datasets_root>

下面是我这边运行操作的一个截图:

现在你可以通过深度学习用别人的声音来说话了

正如你所看到的,右上角的输入框中是我想让电脑阅读的文字:“Did you know that the Toronto Raptors are Basketball champions? Basketball is a great sport.”

你可以点击每个部分下面的 “Random” 按钮来随机化语音输入,然后点击 “Load” 将语音输入加载到系统中。

Dataset 从你选择的语音样本中选择数据集,Speaker 选择说话的人,Utterance 选择输入语音所说的短语。如果想听输入的语音是怎样的,只需点击 “Play” 按钮。

一旦你点击 “Synthesize and vocode” 按钮,算法就会运行。一旦运行结束,你将听到扬声器以某个声音朗读你的输入文本。

你甚至可以录制你自己的声音作为输入,只需要点击 “Record one” 按钮。相信我,这会非常有趣!
 

更进一步

如果你想了解更多关于这个算法的工作原理,你可以阅读谷歌的官方NIPS论文。这里(https://google.github.io/tacotron/publications/speaker_adaptation/)还有一些音频样本结果。

论文链接:

https://arxiv.org/pdf/1806.04558.pdf
 

 

欢迎关注磐创博客资源汇总站:
http://docs.panchuang.net/

欢迎关注PyTorch官方中文教程站:
http://pytorch.panchuang.net/