全方面了解s系统知识 s系统的五个主要组成部分( 二 )


比如:我们想要合成「你真好看」这句话,我们就会从数据库里去寻找「你、真、好、看」这四个字的音频片段,然后把这四个片段拼接起来 。
图表 4 使用拼接法合成「你真好看」
当然,实际的拼接并没有这么简单,首先要选择拼接单元的粒度,选好粒度还需要设计拼接代价函数等 。
参数生成法和波形拼接法的原理很不相同,使用参数生成法的系统直接使用数学的方法,先从音频里总结出音频最明显的特征,然后使用学习算法来学习一个如何把前端语言学规格书映射到这些音频特征的转换器 。
一但我们有了这个从语言学规格书到音频特征的转换器,在同样合成「你真好看」这四个字的时候,我们先使用这个转换器转换出音频特征,然后用另一个组件,把这些音频特征还原成我们可以听到的声音 。在专业领域里,这个转换器叫「声学模型」,把声音特征转化为声音的组件叫「声码器」 。
为啥你的 AI 语音助手说话不像人?
如果简单的给这个问题一个答案的话,主要有两个方面的原因:
1.你的 AI 会犯错 。为了合成出声音,AI 需要做一连串的决定,一但这些决定出错,就会导致最终合成出来的声音有问题,有强烈的机械感,听着不自然 。TTS 的前端系统和后端系统都有犯错的可能 。
2.使用 AI 合成声音时,工程师对这个问题过度简化,导致没有准确的刻画声音生成的过程 。这种简化一方面是来自于我们人类自己对语言,和人类语音生成的认识还不足够;另外一方面也来自于商用语音合成系统在运转的时候要对成本控制进行考量 。
下面我们具体来聊聊造成 AI 语音助手说话不自然的前端错误和后端错误问题 。
前端错误
前端系统,做为一个语言学家,是整个TTS系统里最复杂的部分 。为了从纯文本生成出最后的「语言学规格书」,这个语言学家做的事情要比我们想像的多得多 。
图表 5 典型的前端处理流程
一个典型的前端处理流程是:
文本结构分析:我们给系统输入一个文本,系统要先判断这个文本是什么语言,只有知道是什么语言才知道接下来如何处理 。然后把文本划分成一个一个的句子 。这些句子再送给后面的模块处理 。文本正则:在中文场景下,文本正则的目的是把那些不是汉字的标点或者数字转化为汉字 。比如「这个操作666啊」,系统需要把「666」转化为「六六六」 。文本转音素:也就是把文本转化为拼音,由于中文中多音字的存在,所以我们不能直接通过像查新华字典一样的方法去找一个字的读音,必须通过其他辅助信息和一些算法来正确的决策到底要怎么读 。这些辅助信息就包括了分词和每个词的词性 。韵律预测:用于决定读一句话时的节奏,也就是抑扬顿挫 。但是一般的简化的系统都只是预测句子中的停顿信息 。也就是一个字读完后是否需要停顿,停顿多久的决策 。
从上面四个步骤可以看出,任何步骤都是有可能出错的,一但出错,生成的语言学规格书就会错,导致后端合成的声音也会错 。一个TTS系统,典型的前端错误有以下几种类型:
1、文本正则错误
由于我们的书写形式和朗读形式是不一样的,所以在前端非常早期的阶段,需要把书写形式转化为我们实际朗读的形式 。这个过程在专业领域里叫「文本正则」 。比如我们前面说到的「666」
要转为「六六六」 。我们非常容易感受到 TTS 系统中文本正则的错误 。比如下面这句:
我花了 666 块住进了一个房号是 666 的房间 。
666对比朗读.wav0:04来自深圳湾
我们知道前面的「666」应该读成「六百六十六」,后面的「666」应该要读「六六六」 。但是TTS系统却很容易搞错 。