一、音素(单音素)
音素(phone),是根据语音的自然属性划分出来的最小语音单位,依据音节里的发音动作来分析,一个动作构成一个音素。音素分为元音与辅音两大类。如汉语音节 ā(啊)只有一个音素,ài(爱)有两个音素,dāi(呆)有三个音素等。如“普通话”,由三个音节组成,可以分析成“p, u, t, o, ng, h, u, a”八个音素。
详细介绍:音素_百度百科
二、三音素
三音素,音素的一种,与单音素(如t, o, ng)不同,三音素表示为如 t-o+ng,即由三个单音素组成,与单音素o类似,但其考虑了上下文的关系,即,上文为t,下文为ng。
以“搜狗语音”为例:
拼音表示:sou1 gou3 yu3 yin1
单音素表示:s ou1 g ou3 y u3 y in1
三音素表示:sil-s+ou1 s-ou1+g ou1-g+ou3 g-ou3+y ou3-y+u3 y-u3+y u3-y+in1 y-in1+sil
1、为什么要用三音素建模
单音素建模没有考虑协同发音效应,也就是上下文音素会对当前的中心音素发音有影响,会产生协同变化,这与该音素的单独发音会有所不同(数据统计也就有所不同)。
考虑到这个影响,需要使用三音素建模,使得模型描述更加精准。并且在倒谱特征提取时,汉宁窗向左、向右包含了冗余的频谱,因此,用三音素代替单音素是合理的。
2、为什么需要状态绑定
原因:(1)单音素复制为三音素后,状态的个数成指数增加。如果进行精细建模,模型参数非常巨大。
(2)需要对三音素进行精细建模,则需要大量的数据,而实际上很难获得。
例子: 假设音素表有50个音素,则需要的三音素总个数有:50×50×50=125,000
假设3个状态,每个状态对应1个GMM,1个GMM用8个高斯(44个参数=8+(8+1)×8/2),则1个三音素对应132个参数
总的模型参数有:16500000,显然模型参数非常大。
另外,每个三音素的模型建立,如果要全覆盖,则需要很大的训练数据,一般很难覆盖到。所以,精细建模不太现实,需要状态绑定来减小参数。
3、通过聚类进行状态绑定
方法一:传统的三音素方法就是模型绑定,也就是归一化三音素,使用一个后验平滑的方法。尽管如此,基于模型的上下文绑定是受限的,因为上下文音素不能单独的对待。
方法二:当前中心音素,如果上下文的发音类型相似,则对当前音素的影响是相似的,则可以将这些数据聚为1类;具体要如何制定这些规则(决策树规则),靠语言发音学家的经验知识。(音素判别,再到状态绑定) 对于节点分裂,需要寻找最佳的问题,按照look like hood增加的原则。kaldi可以自动产生问题集,根据音素本身数据上的相似性,自动聚为一类,这不需要语言学知识。