微软小冰版《野狼 Disco》 背后,语音合成技术走过了哪些路?

摘要

模型、数据,两条腿走路。

从 2014 年在微软(亚洲)互联网工程院诞生以来,微软小冰已经迭代了 5 年,目前是第七代产品。它在两年前发布了人类历史上第一本人工智能创作的诗集,在今年举办了人类史上的第一个 AI 画展。前不久,一首由微软小冰演唱的《野狼 Disco》也在音乐平台上线。

微软小冰是如何学会唱歌的呢?微软首席语音科学家栾剑在 WorkShop 活动上进行了分享。


为什么要让小冰学唱歌?

早在 2015 年的时候小冰就提出了语音聊天的功能,也就是除了文字回复以外,还能通过声音来回复。这个声音刚推出的时候,受到业界以及很多 C 端用户的关注和好评,因为这个声音在当时看起来非常生动活泼,而且符合小冰的人设,是一个精灵古怪的萌妹子。

后来通过一年多的时间,团队给这个声音加了很多技能,比如儿化音、中英文混杂的朗读、讲儿童故事、各种情感的表现。加了这些东西以后,在语音合成领域已经解决了一些大方面的问题,只是像分词、多音字、韵律上面,可能还有一些瑕疵。这方面需要语义理解,通过长时间的积累和技术的发酵,来一步步解决。

所以小冰团队就想寻找一个更有挑战性的课题,最终选择了唱歌。这主要有三个方面的原因:第一,唱歌的门槛比说话高。普通人都会说话,但并不是所有人都会唱歌,更不是所有人都能唱的好听,因为唱歌有三个要素,除了发音之外,还有其它要求,在技术上有难点。

第二,情感表达上更丰富激烈一些。古人说「幸甚至哉,歌以咏志」,人在特别高兴的时候就想唱歌,《诗经》说「心之忧矣,我歌且谣」,说明我们在悲伤的时候也喜欢唱歌。现在流行歌曲里面有很多情歌都是和失恋相关的,不管什么原因失恋,都能找到一首和你的心境很对应的情歌。除了高兴和悲伤之外,在一些比较重要、有纪念意义的场合,比如说建国 70 周年,大家都会被《我和我的祖国》这首歌单曲循环,歌曲是一种喜闻乐见的形式。

第三,它是一个很重要的娱乐形式,《快乐女生》、《我是歌手》、《中国好声音》类似的节目红遍大江南北,如果把唱歌做好,应该很有市场前景、很有发展方向。


唱歌三大要素:发音、节拍、旋律

所以小冰团队决定做唱歌。怎么做呢?首先要研究唱歌和说话有什么不同,因为唱歌的很多技术可以说是从语音合成沿袭而来,它有三大要素:第一,发音。因为唱歌不是哼歌,不是用「啊」或者「嗯」把这首歌哼出来就好,吐字发音一定要清晰,这个和说话是一样的。

第二,节拍,有一些通过节奏变化来表现艺术的形式,像说唱、像「一人我饮酒醉」这种形式,可能没有其它的旋律,主要是靠节拍的组合来表达,节拍是唱歌里面非常重要的要素。

第三,旋律,每个字的音高会不太一样,如果音高唱错、跑调,这首歌肯定就没法听了。所以,这三大要素构成了唱歌最基本的元素,当然这个上面可以叠加很多的技巧,比如颤音、气音之类的。


学习唱歌的方法

通过什么方式让机器能够知道怎么唱歌呢?第一,如果有人唱过这首歌,机器就可以学习这首歌应该是什么样子。第二,通过曲谱的方式,可以是简谱也可以是五线谱,下面都有歌词。一个简谱就涵盖了这三大要素,有歌词,歌词会有发音的元素,也会有节拍和音高。

对于人来说,第一种方式就是听一个原唱歌手是怎么唱的,这是一种比较简单或者广泛的学习方式,因为不是所有的人都有专门的技能可以去读谱,但是对机器来说相反,第二种输入方式可能是更加便捷、更加干净的一种输入。

如果从人的录音去学的话,它有时候会需要检测音高的曲线,需要检测每个字起始和结束的位置,还需要去判断每个发音,所以这中间都会有一些误差和错误存在,所以如果是有曲谱输入的话,接下来就会更简单一些。


通过单元拼接

传统唱歌合成的方式,主要有两大类。第一类是单元拼接,这种方式开始得比较早,在市场上面也有一些比较主流的工具是用这种方式在生成的。它的基本思想是先建一个单元库,这个单元的含义在普通话里面可以是声母和韵母,中文有 21 个声母,有 35 个韵母。

如果不考虑声调的话,音节大概有 400 个左右,可以把这些单元分别找一个发音来录,比如说 a 这个发音,我可以录不同长度的 a,不同的音高,可以有高音的、中音的、低音的,通过这种方式去采集一个单元库。

有了这个单元库以后,就可以在合成一首歌的时候,根据这个发音,根据目标时长和目标音高,从单元库里面去挑选一个最符合要求的单元,然后通过信号处理的方法去修改,去修改它的时长、音高,使它能够完美匹配想要达到的效果,然后再把这些单元串起来,进行单元拼接,得到最后的音频。

这个方法最大的优点是简便易行,音质可以基本保留在采集声音时候的最佳音质,但是也有一定的问题。因为单元采集的过程是每个发音单独采集的,在一串语流里面,单独的发音和在一串语流里面连续的发音,它之间的差别还是挺大的,所以用这种方法生成出来的歌会比较生硬一些,唱的不是那么自然,每一个字都是一个字一个字在蹦的感觉。而且因为它完全是由单元拼接的,所以变化可能会相对少一些,字与字之间的过渡做的不是那么好。


通过参数合成

第二类是参数合成的方法。最早的参数合成就是隐马尔可夫模型,在语音行业里面已经用了很多年了。参数合成的方法就不是建一个单元库了,而是把所有录音的数据提取出声学参数,声学参数里面可能包括能量谱、时长、音高,然后去建一个模型,要合成的时候,就根据要的发音到模型里面预测,把这个声学参数预测出来,然后通过这个声学参数、声码器,把音频的波形重构出来。这种方式比较灵活,基本上是把一个东西全部打碎,之后再重新拼,力度会非常小,所以它的变化很丰富。甚至可以创造一个从来不存在的声音,可以得到一些在训练集里面根本没有出现过的东西。

但是它最大的缺陷就是声码器。既然把它变成了参数,然后参数再还原成声音,在这个过程中会有音质的损失,所以它最大的缺陷就是音质上会比第一个方法下降。

小冰一开始就是选择第二种方式,因为第二种方式前景更加广阔。最开始的模型是从乐谱里面把三大要素采集出来之后,分别对声谱参数、节奏序列、音高轨迹用三个模型分别建模。然后把预测出来的参数通过声码器生成波形,这个是用最早最简单的模块化方式来做的。但是还是有问题,同样一个发音,比如「啊」这个发音,在发特别长的「啊」和特别短的「啊」,它的音高属于高音还是低音,音色会有比较明显的区别。就像一个人的嗓子,可能唱高音的时候听起来的声线和唱低音的时候是有区别的,如果你用同样的方式,不管是什么样的音高,都用同样的方式合成,可能会有问题。

这个时候把节奏和音高的预测结果作为输入,传到声谱参数预测里,通过这种方式能够缓解一部分刚才说到的问题。既然这三个参数之间有很重要的耦合性,互相之间需要协调、同步预测,就干脆用一个模型,同时预测这三个参数。当然用一个模型预测这三种参数肯定有很大的困难。

在最新的模型里面会用到很复杂的结构,有卷积神经网络、attentions、其他的残差连接等。这也是因为神经网络发展到了今天,有很多模块可以使用,使得三个参数同时建模变成了可能。用这种方式生成出来的波形,它的自然度和流畅度会得到一个明显的提升。


数据也很重要

另外一部分就是关于数据。深度学习其实在上世纪 90 年代就火过一阵,但那个时候没有取得像今天这么大的成果。主要的原因有两个,一个是因为硬件技术在当时的算力还不够,现在有 GPU,而且 GPU 还在不断的升级,所以它的计算能力在提高。第二个是现在有大数据的支持,才能把深度学习做的这么好。

对唱歌这个任务来说,数据是比较困难的一点。因为相对于说话,清唱的数据是非常少的,绝大部分的数据是混杂的、伴奏的音轨。我们曾经和一个唱片公司进行合作,在他们的数据库里面大概经历了 10 年的积累,他们素材库里面的人声清唱的还是比较少的,绝大部分保留的都是成品歌曲。混合了各种音轨伴奏的东西,对传统的唱歌合成来说是比较困难的一件事情。

不管是人工智能创造,还是唱歌技术的提高,都需要两条腿走路。一边要不断提高模型,一边要不断挖据更多的数据。这两个东西如果能做的更好,质量就会不断得到提高。

最新文章

极客公园

用极客视角,追踪你不可错过的科技圈.

极客之选

新鲜、有趣的硬件产品,第一时间为你呈现。

张鹏科技商业观察

聊科技,谈商业。