-
Notifications
You must be signed in to change notification settings - Fork 31
Description
学过概率论的同学都知道,概率分布有离散的,也有连续的,连续的概率分布有平均分布,也有正态分布,其中正态分布N(xi | μ,σ)又称为高斯分布,这个公式表示在高斯分布均值是μ,方差是σ的情况下,取得数值xi的概率密度。
利用高斯分布,我们可以很好地拟合生活中遇到的数据,然而,对于一个事物,往往一个数据是无法准确说明的,比如我们描述一个人,就需要提供身高,体重,年龄等数据。我们描述一段语音,则常用一种叫做MFCC的特征提取方法来提取语音段的特征,这个特征值是一个39维的向量。对于一个语音段,我们按一定的准则将其分割成前后有部分重叠的(部分重叠是为了考虑首尾数据,这个分割通常称为加窗)数据帧,那么对于一段较短的语音(如啊a哦o额e),就用四帧(经验值)39维的MFCC数据来刻画并建模,在此后我们利用概率的方法求输入MFCC帧序列与模型的匹配度实现语音识别。
对于一段语音,同个人说几次,每次的数据都是有细微差别的,趋近一个高维的高斯分布。那么我们如何利用高斯分布来拟合高维向量的分布呢?我们更改高斯分布的公式N(xi |μ,∑),后文都指的是这个公式。与一维相比,其中xi换成了向量xi,μ换成了均值向量μ,σ换成了协方差矩阵∑。对于一个多维的向量,引入公式来计算其概率,这里用到了线性代数的矩阵运算。
实际情况中,我们为了识别多个人的说话需要对以上的高斯模型加以扩展。由于每个人说话都是一个高斯分布,因此我们为了刻画一个音的模型,我们需要把多个高斯分布合并成一个概率密度函数。在实际操作中,为每个人都生成一个高斯分布并不实际,因此我们可以大致分成3~5个高斯分布,例如分成男人,女人和小孩三个类别,各自有高斯分布,然后合并成对同个音的混合高斯模型。合并高斯分布,我们采用加权求和的方法,,其中P(Ni)是取第Ni个高斯分布的权重,来将多个高斯分布合并成一个。这样一来,对于同一段语音数据,我们就能用一个多峰的概率密度函数来匹配不同人群的语音特征,达到比对所有人的数据取均值得到的高斯分布更好的拟合效果。
如图,多峰的混合高斯分布(本图取自网络)
引入混合高斯模型以后,我们可以求得一个特征向量属于该模型的概率,从而得之语音数据的匹配程度。为了确定模型各项的参数,我们需要利用EM算法来训练数据,这里不再介绍。