这篇博客是关于声学模型的简单介绍。
声学模型的输入是由特征提取模块提取的特征(比如mfcc特征)。一般来说,这些特征是多维的向量,并且其取值可以是离散或连续的。
早期的声学模型常常采用矢量聚类(Vector Quantification)的方法,将信号直接映射到某个码本k,然后再计算某个模型j输出该码本的概率bj(k)。但是这一方法是比较粗糙的,其性能受到VQ算法的很大影响,如果VQ本身性能就很差,声学模型的估计就会很不准确。因此,对于连续取值的特征应当采用连续的概率分布。由于语音信号特征的分布并不能用简单的概率分布,例如高斯分布等来直接描述,故而常用混合高斯模型或混合拉普拉斯模型等方法对语音信号的分布进行拟合。在此,混合高斯分布可以表示为若干高斯分量Gi的加权组合。即:
从精确度上看,连续隐马模型要优于半连续隐马模型,而半连续隐马模型又优于离散隐马模型。从算法复杂度上来看则正好相反。
高斯混合模型(Gaussian Mixture Model, GMM)是语音信号处理中的一种常用的统计模型,该模型的一个基本理论前提是只要高斯混合的数目足够多,一个任意的分布就可以在任意的精度下用这些高斯混合的加权平均来逼近。一个包含M个分量的高斯混合分布的概率密度函数是M个高斯概率密度分布函数的加权组合,定义为:
在高斯混合模型中,每一个高斯概率密度函数分量 pi(x) 都可以由其权重 wi 、均值 μi 和协方差矩阵 Σi 来描述。这样,一个完整的M分量混合的高斯分布就可以由以下的三元组集合来表示:
对于一段给定的训练语音特征序列 O=O1,O2,⋯,OT ,GMM模型的似然度定义为:
在声学模型训练中常用GMM为状态输出概率建模,同时GMM也常用于其他声音分类任务中,例如声音分割与分类,说话人识别等。
由于语音的时序性,隐马模型的拓扑结构一般都取为自左向右的结构。一般每个状态都包括自环(self-loop)。是否允许跨状态跳转则没有一个定论。
状态个数的选择对于系统性能的影响是很大的。
声学模型的建模单元的选择需要考虑三方面的因素。其一是该单元的可训练性,亦即是否能够得到足够的语料对每个单元进行训练,以及训练所需要的时间长短是否可接受。其二是该单元的可推广性,当语音识别系统所针对的词汇集 W 发生变化时,原有建模单元是否能够不加修改的满足新的词汇集 W′ 。最后还需要考虑建模的精确性。
根据时间尺度的长短,建模单元可以选择为句子,短语,词,音节,音素乃至更小的半音素(维基百科里写的是音子)。一般可以认为有这样的原则, 时间尺度越短的建模单元,其可训练性及推广性就越强,而时间尺度越长的单元,其精确性就越强。同时,可以看出,句子、 短语、词三个概念是语言学上的概念,而音节、音素则是语音学上的概念,一般来说,如果声学模型所针对的应用环境不是确定词汇量的系统,那么采用语言学的概念的建模单元是不具备推广性的。
为了将协同发音现象(Coarticulation)融入建模中,上下文相关的建模单元(Context Dependent Modeling Units, CD uinits)是一个很好的选择。其思路是,对于某个音素ah,根据上下文的不同将其拆分成不同的建模单元。例如,用b-ah+d表示ah在b之后,d之前发音的具体实现。上下文的选择方法有很多,最常见的是三音子建模单元,也就是考虑左上文右下文各一个音素,加上中心音素形成三音素对。
上下文相关建模大大提高了建模的准确性,但是同时也使得模型数量急剧膨胀,使得模型的可训练性大大降低。为了解决这一 问题,就需要引入某些聚类算法来减少模型中需要训练的参数。
为了解决模型参数过多的问题,可以使用某些聚类方法来减小模型中的参数数量,提高模型的可训练性。聚类可以在模型层次,状态层次乃至混合高斯模型中每个混合的层次进行。可以将半连续隐马模型看作进行高斯混合进行聚类后的连续隐马模型。目前 应用最多的方法是对状态聚类的方法。其思路是,根据状态间混合高斯模型概率输出的相似性,将输出概率接近的状态聚合在 一起,以便训练更加充分。聚类的方法有基于规则的方法和数据驱动方法两类。
聚类后的状态被称为Senone,每个Senone都是完整独立的高斯混合模型,它也是解码过程中的最基本单元
传统上,参数估计使用的方法为Baum-Welch算法,属于最大似然准则下的EM算法。目前研究者提出了多种区分性训练方法(仍然属于产生式模型,但使用区分性准则)进行训练,取得了较好的效果。
参考维基百科-声学模型