语音合成作为人机交互中必不可少的一个环节,随着计算机的运算和存储能力的迅猛发展,语音合成技术由早期的基于规则的参数合成,到基于小样本的拼接调整合成,并逐渐发展为现在比较流行的基于大语料库的拼接合成。与此同时,合成语音的自然度和音质都得到了明显的改善,在一定程度上达到了人们的应用需求,从而促进了其在实际系统中的应用。目前,语音合成技术已经在自动应答呼叫中心(包括金融、电信和政府等)、电话信息查询(包括天气、交通和旅游等)、汽车导航以及电子邮件阅读等方面得到广泛的应用,同时针对娱乐和教育方面的应用也正在开展。总而言之,语音合成技术正在影响着现代社会的方方面面。
1.语音合成方法简介
从整个语音合成研究的发展历史来看,早期的机械式语音合成器反应了人们对语音产生机理了解的比较粗略,现代语音合成的方法基本上都是采用一种语音模型来合成语音。总的说来,近期语音合成的方法可以归结为四种:1)物理机理语音合成;2)源-滤波器语音合成;3)基于单元挑选与波形拼接技术的语音合成;4)可训练的语音合成;其中现在大家常采用的合成方法为基于波形拼接技术的语音合成和可训练的语音合成两种。
本文涉及的内容为语音合成的后端,语音合成的前端也是文本处理的一部分,主要包括文本正则化、分词、词性标注、多音字消崎及韵律预测等,这里不做具体介绍。
1.1基于单元挑选与波形拼接技术的语音合成
原理就是根据输入文本分析得到的信息,从预先录制和标注好的语音库中挑选合适的单元,进行少量的调整(也可以不进行调整),然后拼接得到最终的合成语音,其中用来进行单元挑选的信息可以是前端分析得到的韵律文本,也可以是生成的声学参数(比如基频、时长和谱参数),或者两者兼有。由于最终合成语音中的单元都是直接从音库中复制过来的,其最大的优势就是在于保持了原始发音人的音质。
1.2可训练的语音合成
基本思想就是基于一套自动化的流程,根据输入的语音数据进行训练,并形成一个相应的合成系统。一般而言,训练是针对模型或者参数进行的。在语音信号处理中,最普遍有效的建模方法就是隐马尔可夫模型(HMM),它在语音识别中已经有非常成熟的应用,目前的可训练语音合成技术也都是基于HMM 进行参数建模
以上两个合成方法他们各有其优缺点,也在不同的应用场合起到非常重要的作用:
所以,在网络资源或者计算存储资源充足的情况下,为了追求更高的音质和更好的合成语音自然度,可以采用单元挑选与波形拼接的方法来搭建合成系统;而在资源受限的情况下一般会采用可训练的语音合成方法。
由于我们在语音助手中采用的主要是可训练的语音合成方法,所以下面简单介绍可训练语音合成方法的原理及流程。
2.可训练的语音合成
可训练的语音合成方法分为训练和合成两个阶段,在训练过程中,利用HMM 训练对基频、时长以及谱参数进行建模。在合成过程中,对输入文本进行属性分析,并利用训练后的模型进行参数预测,最后通过参数合成器合成出语音。
2.1数据准备
在训练模型之前,需要准备一个音库,这个音库包括两个部分:声学数据和标注数据吗,声学数据就是特定文本的录音数据,而标注数据就是这些声学数据对应的标注,如发音标注、停顿标注、句法标注等。
2.2模型训练
在准备好了数据之后,模型训练阶段首先将声学数据通过相关工具提取出对应的频谱和基频参数,除了定义一些 HMM 参数以及准备训练数据以外,模型训练前还有一个重要的工作就是对上下文属性集和用于决策树聚类的问题集进行设计,即根据先验知识来选择一些对声学参数(谱、基频和时长)有一定影响的上下文属性并设计相应的问题集,比如前后调、前后声韵母等。需要注意的是,这部分工作是与语种(或者发音风格)相关的。除此之外,整个建模训练和合成流程基本上与语种(或者发音风格)无关。
HMM训练过程就是传统的训练过程,方差下限估计-单音素模型训练-上下文相关模型训练-基于决策树的模型聚类-聚类后的模型重估-时长建模,模型训练阶段得到的结果包括谱、基频和时长的HMM及对应的决策树。
2.3后端合成
在合成过程中,首先是对输入文本进行分析,得到我们所需要的上下文属性,然后根据这些属性分别对时长、基频和谱参数的聚类决策树进行决策,并得到相应的模型序列,最后根据模型基于参数生成算法来生成基频和谱参数,并通过合成器合成出最终的语音。
2.4关键技术
可训练语音合成方法之所以能取得现在的效果,是因为有多项关键技术在建模、训练、合成以及应用各方面的支撑,这些关键技术包括:
1. 基于 STRAIGHT 的分析合成算法;
采用的是基于源-滤波器的思想,它估计谱参数时去除了时间周期的影响,使得频谱和基频可以单独建模,它可以估计出平滑可靠的基频参数,合成时,实现了基音同步叠加和最小相位冲击响应,实现对时长,基频和谱参数的调整。
2. 基于决策树的模型聚类算法用于提高模型的鲁棒性;
在进行单音素模型训练之后,为了提高建模精度,我们对模型进行上下文属性扩展和训练。由于对基频和谱参数采用统一建模的方法,则需要考虑的上下文属性较多,比如前后音素环境、前后声调、韵律位置信息等,从而导致上下文属性的组合数目成指数增长。在训练过程中,相对于巨大的上下文相关模型数而言,训练数据量是非常有限的,因此,在进行上下文相关HMM 训练时,绝大多数的上下文相关模型只有一到两个训练数据,从而产生模型对数据的过拟和现象。
为此,采用基于决策树的聚类算法,对上下文相关模型进行聚类,使得聚类后的模型有足够的训练数据。
3. 通过多空间概率分布 HMM(MSD-HMM)对基频进行建模;
对基频和谱参数采用统一的基于HMM 的建模方式。由于基频参数与谱参数有所不同,它在时间轴上是一个不连续的量,它在浊音段表现为一个一维的基频值,而在清音段则没有基频值(不是很严格的话,可以认为基频值为0),因此,传统的HMM 并不能直接对基频进行建模。
基本思想是,样本空间是由两个子空间构成,一个是清音空间,另外一个是浊音空间,浊音空间采用的是连续的HMM建模,清音空间则是一个均值和方差都为0的分布。
4. 结合参数的动态特性(一阶二阶差分)进行参数生成;
在语音合成时,如何根据决策得到的 HMM 序列来生成平滑的声学参数序列,这也是目前可训练语音合成框架下的关键技术之一,参数生成算法采用的是结合了动态特征的最大似然值的方法进行参数生成。
通过以上准备和流程,可以构建出一个基本的可训练语音合成系统。
3.语音助手中的语音合成
语音助手中的语音合成除了基本的可训练语音合成系统外,还有一套基于不定长单元的挑选与拼接实现(NUS),由于语音助手场景下,需要合成的文本经常是有固定的模式,为了追求极致的合成效果,我们把这些模式预先录制下来,这些预先录制的语音切分为一个一个的非定长单元,合成阶段,我们从这些非定长单元中挑选合适的单元,再辅以基本的合成模块,就可以实现一个更高质量的语音合成系统,所以我们在语音助手场景下采用的是基于可训练的语音合成方法+NUS来实现语音合成。
在语音助手的语音合成系统中,录制了如以下模式的一些文本:
“朝阳今天的温度是20摄氏度”
“正在为您呼叫张三”
“那你是打算从北京出发吗?”
“为您找到十一个车次,您是要选择第几个呢?”
假设需要合成的文本为“正在为您呼叫李四”,那么,我们可以从预先录制的语音中,先将“正在为您呼叫”这个单元取出来,然后“李四”这个单元(这种单元我们称之为槽)采用基本的可训练的语音合成方法将他合成出来,然后将两个单元拼接在一起就可以得到NUS的合成效果了。
语音助手的合成系统中,用于搭建基本合成系统的语料有数千句,其中大部分为纯中文语料,剩下的包括英文字母和英文句子、中英文混读句子等。而用于搭建NUS系统的语料则视场景和footprint的限制决定、不断扩充。
可以看出,基于NUS的语音合成效果远远好于基本的基于可训练的语音合成系统。
4.展望
通过对语音助手场景的尝试,我们将可训练语音合成与NUS结合起来搭建了一个特定场景的高质量的语音合成系统,只要录制的场景下的语料越多,我们就能获得接近于录音的合成效果,这给后面的其他业务探索开了一个好头。
后面,我们也会实现基于单元挑选与波形拼接的合成方法,搭建语音合成的云服务,以更好的服务集团的业务。