开始之前,我们先来听一段英语音频。
So, one of the more common topics that comes up in world history, because it’s had a pretty dramatic effect on how different societies evolve over long periods of time, is cultural diffusion.
Now…cultural diffusion is generally defined as the transmission of culture from one society to another. And by culture, we mean anything from artistic styles to, um… you know, technology, science. So, we use “culture” very broadly. A common means of this process taking place is trade, traveling merchants, or trading hubs, places where people from various areas all come together and ideas get exchanged.
Let’s start with the example of the transmission of a number system, a system that used the number zero, from South Asia into Western Europe. OK, so before this cultural diffusion happened, the dominant number system in Western Europe was the Roman numeral system. The Roman numeral system developed primarily as a means of record keeping, as a way to keep track of commercial transactions, um, taxes, census records, things of that sort. As a consequence, this system started with the number one.
备考过托福的小伙伴可能会记得这几段内容,因为这是TPO的一个社会科学类听力材料。不过,如果你有关注过YouTube上的科技类频道,你可能会觉得这个声音似曾相似。这个在讲文化传播内容的人,怎么听起来这么像那个做产品评测的Uncle Lew?
没错,你没听错,这是Lewis George Hilsenteger的声音。他是YouTube上的著名科技博主,其创立的频道Unbox Therapy,粉丝数量达到了惊人的1560万。一个做产品开箱的科技博主怎么会讲社会科学的内容呢?实际上,这一切都是使用微软Azure自定义语音(Custom Voice)生成出来的。借助Custom Voice,你可以创建独一无二的语音模型,并将文字转换成语音输出。不管你是想生成自己的声音,还是想让自己喜爱的主播为你朗读任何内容,只要提供一定量的声音数据,Custom Voice都能帮你做到。下面,我们就来看看具体要怎么做吧!
创建语音资源和项目
在进行这一步之前,要有一个有效的Azure订阅。如果还没有Azure账号,可以前往azure.com进行注册,首次注册还能获得200美元的试用额度呢。
之后,前往语音服务门户,点击Create new创建一个语音资源。在弹出的对话框中填入资源名称、Azure订阅、地区和定价层。创建完成后,点击Go to Studio进入对应的资源工作区。
接下来,我们要做的是自定义语音,所以选择Custom Voice。
之后,我们便进入了自定义语音的工作区。在这里,点击New Project创建一个新项目。在弹出的对话框中输入项目名称、描述、性别和语言。注意,在创建了项目之后,是不能修改性别和语言的,因此,建议为每个人创建独立的项目。创建完成后,点击项目即可进入。
准备数据
数据是关键的一环,数据的数量和质量决定了模型的效果。目前,自定义语音允许使用三种数据类型,分别是短音频+脚本、长音频+脚本和仅音频。其中,后两项还处于beta测试阶段,并且只能提供给S0定价层用户使用。
鉴于YouTube视频没有提供视频字幕,我采用了“仅音频”方案。利用一些第三方工具,可以直接将YouTube视频转换成mp3文件下载,这样就能得到丰富的声音数据了。本文使用的是Lew Later频道的视频素材。注意,mp3的比特率必须在256kbps以上。如果上传wav文件,采样率必须在16kHz以上。
使用“仅音频”选项,Azure其实是使用了语音转文本服务,将语音转录成对应的文本,并将音频分段。如果音频时间很长,这个过程可能会产生很高的费用。因此,也可以考虑手动转录,采用短音频+脚本的方式来准备数据。采用这种方式时,每个语音文件必须具有唯一的文件名,并使用wav格式,采样率在16kHz以上。在脚本文件中,每一行包含了音频文件名和对应的文本内容,文件名和文本用制表符(\t)分隔。下面是示例:
1 | 0000000001[tab] This is the waistline, and it's falling. |
上传数据
在项目界面,点击Upload data上传语音数据。首先,选择数据类型,然后输入数据的名称和描述。
之后,选择文件进行上传。如果选择了前两种数据类型,则要提供音频的.zip压缩包和.txt脚本文件。如果选择了“仅音频”,则只需上传音频的.zip压缩包。
确保数据符合要求的格式,最后点击Upload进行上传。上传开始后,不要关闭或者刷新页面,直到页面提示上传完成。目前,语音服务门户没有提供上传进度信息,这一点还有待改进。
数据上传完成后,点击数据条目,可以看到数据的分析信息,例如音频时长、发音准确度和音频信噪比。这有助于我们了解和改善音频的质量。
点击Download,可以下载音频文件、对应的转录文本和详细的分析报告。
训练模型
切换到Training标签,点击Train model来新建一个模型,然后输入模型的名称和描述。
接下来,选择要用于训练的数据。可以选择一个或多个数据集进行训练。不过,如果所选的数据集包含重复的音频文件名,重复的音频将会被排除掉。
接下来,选择训练方式。目前,自定义语音提供了两种训练方法,一种是统计参数合成方法,另一种是拼接合成方法。只有当数据集包含的语句超过6000句时,才能够使用拼接合成方法。这个是由技术特性决定的。统计参数合成方法是在一个标准语音的基础上,通过调整模型的参数来拟合目标声音的统计特征,从而合成出相似的声音。拼接合成方法是直接采用原有声音样本中的细小片段,拼接串联形成合成的声音。因此,拼接合成方法需要更多的训练数据,能产生更自然和更清晰的结果。
为了能够使用拼接合成方法,我从Lew Later频道中选择了24个视频,提取了6068句语音。之后,分别使用两种不同的方法进行训练。在选择好数据集和训练方法后,点击Train即可开始训练。训练的时间和数据量呈正相关关系,训练6068句大约花了一天的时间。
测试和分析
在花了几天时间完成全部训练之后,终于到了有趣的测试环节。切换到Testing,点击Add test,然后选择要测试的模型。
之后,输入要测试的文本,就可以进行测试。
首先,我们来听一下默认测试文本的效果。
Hi, this is my custom voice.
统计参数合成
拼接合成
虽然这两段音频都很短,但是我们已经能够听出一些区别了。使用统计参数合成得到的语音比较模糊,语调起伏较小;使用拼接合成得到的语音则比较清晰,语调较为丰富。不过,两段音频都非常像Lewis本人的声音。
下面,不妨找一段训练集中存在的内容,来跟合成的音频做一个比较。
If you want the unboxing video of every single version of the current pixel 4 including all the colors, go check out the video on Unbox Therapy.
原音频
统计参数合成
拼接合成
跟之前一样,统计参数合成得到的音频较为模糊,语调平淡,而拼接合成得到的音频则比较清晰和抑扬顿挫。但是,从这里能听出拼接合成的一个缺点,就是音频会在局部出现不平滑的现象,两个音节之间跳跃很大,这是因为声音是由许许多多细小的样本片段组合而成的。
下面,从测试集中选择一句话来比较一下。
New York pressuring Tesla to open up the Supercharger Network.
原音频
统计参数合成
拼接合成
在这个测试中,第三个音频的拼接痕迹就非常严重了,而第二个音频还能保持不错的流畅度。当语句中出现一些比较少见的单词时,例如Tesla、Supercharger时,训练集中可能没有与这些单词直接对应的音频,所以一个单词需要由很多部分拼接合成出来,导致了音频的拼接感严重。统计参数合成方法由于是拟合声音,所以不会出现这种情况。
最后,让我们用一句他本人可能没有说过的话来进行测试。看过苹果WWDC19的同学可能会记得,苹果用了一句非常长的话来演示Siri的声音效果。我们不妨就用这句话来测试吧!
Absolute zero is the lowest limit of the thermodynamic temperature scale, a state at which the enthalpy and entropy of a cooled ideal gas reach their minimum value, taken as zero kelvin.
统计参数合成
拼接合成
经过上面的测试,可以看到,两种合成方法其实各有其优缺点。具体使用哪种方法,要视具体的训练数据、测试数据和使用场景而定。例如,如果训练数据比较少,对结果的清晰度要求不高,则可以使用统计参数合成方法;如果训练数据较多,测试数据包含了很多在训练数据中出现过的内容,则可以使用拼接合成方法。
经过了以上的训练和测试,我们已经获得了一个非常好的自定义语音模型。只要输入任何你想要聆听的内容,你的私人主播就会为你朗读!文章开头的托福听力就是使用这个拼接合成模型生成的!
除了在门户里进行测试,我们还可以将训练好的语音模型部署到终结点上,通过API进行访问。部署页面提供了简单的检查按钮和示例代码。不过,我们目前不能将模型保存到本地,或者转发给他人,导致服务还欠缺一些灵活性和通用性。
中文怎么样
试过了英文,当然还要尝试一下中文自定义语音的效果。这里,我使用了微软智慧云拓展总监兼客服兼非著名主播Grace Peng的声音进行训练,语句大约是1200句,使用了统计参数合成训练方法。下面先来看看默认测试语音。
你好,这是我的自定义语音。
和英文相比,合成出来的中文感觉偏生硬一些。使用同样数量的语句训练的英语语音模型,音调会更加自然一点。
和Grace的声音比较起来会怎么样呢?下面来听听。
上云这件事我们其实已经谈了很多年,大家都知道云计算是非常有好处的,可以解决很多问题。可是,从开始到现在,一直都没人能完全发自内心的说,上云这件事情绝对没有问题!我们都知道,想要踏踏实实的认可一件事,你必须得先解开心里的结,对于上云,这个结便是“安全”。
Grace
合成
能听出来,合成的声音和真实的声音差距还是挺大的。一方面,这可能是训练集太小导致的,另一方面,语音合成技术在英语上确实会成熟一些,合成的效果也好一些。微软的Custom Voice在中文上的表现还有提高的空间。
影响合成效果的因素
有许多因素会影响最终结果的质量。下面来简单看看数据质量和数据数量会对结果产生什么影响。
下面这个数据集包含699个语句,但是信噪比比较低,大部分都低于20。让我们来听听训练的结果是怎么样的。
可以听出来,这个合成音频带有明显的噪音。如果训练数据的质量较差,会严重降低合成结果的质量。
数据数量对结果的影响大吗?下面来听听300句和1200句的效果。
300句
1200句
两者的清晰度听起来差不多,不过1200句的训练结果会有更明显的音调。也就是说,数据量更大,模型能够学习到更多语音的特征,因此能够生成更相似的结果。
题外话
写到这里,小编突发奇想,小冰不是都能唱歌唱京剧了么,用Custom Voice是不是能训练出来一个会唱歌的语音模型呢。抱着试一试的心态,我从A-Lin的歌曲中截取了100个背景音乐较小的句段,训练语音模型。然而,训练的结果是这样子的🤦。看来说话的音调和唱歌的音调学习起来完全不是一回事啊。
忘记了拥抱,忘记了微笑,忘记我们曾经是那么那么样的好。
A-Lin版
合成版(慎点)
时值国庆70周年,让我们用Grace迷人的声音朗诵一段《我和我的祖国》,结束今天的文章,共祝祖国生日快乐!
我和我的祖国,一刻也不能分割。无论我走到哪里,都流出一首赞歌。我歌唱每一座高山,我歌唱每一条河。袅袅炊烟,小小村落,路上一道辙。