这里,想要写一些关于HTS语音合成系统的东西。其实也就是想说说HTS语音合成系统是个啥玩意,它的基本思想和基本流程是什么?而不是用一个什么简图了事的那种。
总的来说,HTS语音合成系统,和HTK语音识别系统思想和流程基本相同,为什么这么说?那么我们就从流程上来说一条条分析。
1. 训练模型。两者都需要对语音基本单元(音素,半音节,音节)进行训练HMM模型。且训练模型使用的参数也是那些语音的acoustic参数,如MFCC, LSF, F0等。
2. 模型细化。 以音素模型为例,一般我们喜欢用di-phone 或 tri-phone来表征上下文相关的模型。但是这意味着对训练数据量的需求就更大,这时,我们一般需要做一些特殊处理,如状态绑定,对那些数据稀疏的状态,将他绑定在其他和它相似的状态上。对HTS, 可能采用基本分类树的方法来克服数据稀疏的问题。
3. 解码过程。在解码阶段,HTS语音合成和HTK语音识别刚好是一对可逆的过程。 在HTK语音识别中,给定的是每个音素的HMM模型和观察序列(如MFCC, F0序列,从输入语音中提取出来的),要求的是这些观察序列属于哪个模型。 而在HTS语音合成中,给定的是每个音素的HMM模型,以及由这些模型解码的结果(即输入的文本信息,经过处理后的音素序列),要求的是观察序列(这里得到的观察序列是指每一帧的MFCC,F0等特征)。
至此,HTK语音识别的过程就完成了。但是,HTS语音合成系统还有一个过程,那就是语音合成器。
所谓语音合成器,就是给定MFCC和F0特征,产生实际的语音数据。
这里,我们一般根据人的发音方式,即根据假设人的发生是通过一个声波(由声带振动产生), 经过声带共振(相当于一个滤波器),然后到达口鼻辐射出去。 这里,这个声波的产生过程是,对于浊音,用一个周期脉冲(其频率就是前面得到的F0)代替,对于清音,则用一个高斯白噪声代替。 而声带共振调制过程,这个滤波器的主要参数就是前面得到的MFCC参数。最后,经过一个辐射模型就可以得到所要的合成语音了。
可见,HTS语音合成的方法是严重的依赖于HTK的。所以,欲练此功,必先学习HTK。 此外,如果你已经掌握了HTK,那么,我觉得在这整个过程中,还有几个问题需要注意及好好解决。
(1) 对基频F0的建模。 因为对于清音部分,是没有基频的,且即使对于元音,基频也是一个一维的特征。所以,在HTS中,一般采用多空间概率分布HMM模型来对他建模。具体可以参考文献:
K.Tokuda, T.Masuko, N.Miyazaki, and T.Kobayashi, "Hidden Markov Models based on Multi-Space probability distribution for pitch pattern modeling." ICASSP 99, U.S.A.
(2)如果训练数据不足的话,这不易采用tri-phone的上下文相关模型。当然,数据越丰富越多,上下文信息定义的越多,每个音素的上下文相关模型就越多,系统就越准确。 在数据不足的情况下,可以参考HTS的基于决策树的方法来建立模型。 但是,如果是用决策树的方法,照本人经验,效果不是很好。所以在这放方面,要非常注意。
(3)就是合成的时候,合成参数产生的方法。因为这部分是HTK中没有的,所以没有任何参考的地方。至于合成器,这个就大同小异了,没什么花头。
就这些吧,如有不对或者要补充的,请不吝赐教
评论