实验报告-基于GMM-HMM的语音识别.docx
《实验报告-基于GMM-HMM的语音识别.docx》由会员分享,可在线阅读,更多相关《实验报告-基于GMM-HMM的语音识别.docx(13页珍藏版)》请在冰豆网上搜索。
![实验报告-基于GMM-HMM的语音识别.docx](https://file1.bdocx.com/fileroot1/2023-1/13/d360af4c-697b-459a-b5d9-e2a6abb27565/d360af4c-697b-459a-b5d9-e2a6abb275651.gif)
多媒体技术实验报告
——基于GMM-HMM的语音识别
姓名:
学号:
5 月24 日
目录
目录 2
马尔科夫初步概念理解 3
两个重要的图 3
问题:
马尔科夫的开始状态如何确定?
4
马尔科夫的三种问题,以及解法 4
解码 4
解法一:
最大似然路径 4
已知A.B,根据骰子掷出的结果,求出掷出这个结果的概率(模
型检验) 6
解法一:
穷举 6
解法二:
前向算法 6
知道骰子状态有几种,不知道A,知道B,观察到很多次投骰子
的结果(可见状态链),我想反推出A。
6
HMM算法使用条件 6
隐性状态必须能够大概被估计。
7
EM算法GMM(高斯混合模型)。
7
单高斯分布模型GSM 8
样本分类已知情况下的GMM 9
样本分类未知情况下的GMM 10
HMM-GMM模型在语音识别中的应用 12
语言识别的过程 12
其中HMM与GMM的作用 12
实验结果 13
代码阅读以及注释 13
实验结果对比 13
与DTW结果对比 14
马尔科夫初步概念理解
两个重要的图
(二)问题:
马尔科夫的开始状态如何确定?
二、马尔科夫的三种问题,以与解法
(一)解码,
A,B〔隐含状态的数量以与转换概率以与B〕,根据掷骰子掷出的结果〔可见状态链〕,想知道每次掷出来的都是哪种骰子〔隐含状态链〕
解法一:
最大似然路径
Ø根本思想:
求一串骰子序列,这串骰子序列产生观测结果的概率最大
Ø算法:
穷举
解法二 :
Viterbialgorithm,求出每次掷出的骰子分别是某种骰子的概率
Ø根本思想:
Ø算法:
类似于动态规划;:
(二)A,B,根据骰子掷出的结果,求出掷出这个结果的概率〔模型检验〕
解法一:
穷举
Ø思想:
穷举所有骰子序列〔〕,计算每个骰子序列对应的概率,然后把这些概率相加
Ø算法:
呵呵
解法二:
前向算法
Ø根本思想:
结果递推,有点像动态规划,就是一步一步往后算,通过前向算法,算出概率加和,其中要用到A和B
(三)知道骰子状态有几种,不知道A,知道B,观察到很屡次投骰子的结果〔可见状态链〕,我想反推出A。
三、HMM算法使用条件
但是使用HMM进展建模的问题,必须满足以下条件,
(一)隐性状态的转移必须满足马尔可夫性。
(状态转移的马尔可夫性:
一个状态只与前一个状态有关)
(二)隐性状态必须能够大概被估计。
在满足条件的情况下,确定问题中的隐性状态是什么,隐性状态的表现可能又有哪些.
HMM适用于的问题在于,真正的状态(隐态)难以被估计,而状态与状态之间又存在联系。
四、EM算法GMM〔高斯混合模型〕。
聚类的方法有很多种,k-means要数最简单的一种聚类方法了,其大致思想就是把数据分为多个堆,每个堆就是一类。
每个堆都有一个聚类中心〔学习的结果就是获得这k个聚类中心〕,这个中心就是这个类中所有数据的均值,而这个堆中所有的点到该类的聚类中心都小于到其他类的聚类中心〔分类的过程就是将未知数据对这k个聚类中心进展比拟的过程,离谁近就是谁〕。
其实k-means算的上最直观、最方便理解的一种聚类方式了,原那么就是把最像的数据分在一起,而“像〞这个定义由我们来完成,比如说欧式距离的最小,等等。
想对k-means的具体算法过程了解的话,请看这里。
而在这篇博文里,我要介绍的是另外一种比拟流行的聚类方法----GMM〔GaussianMixtureModel〕。
GMM和k-means其实是十分相似的,区别仅仅在于对GMM来说,我们引入了概率。
说到这里,我想先补充一点东西。
统计学习的模型有两种,一种是概率模型,一种是非概率模型。
所谓概率模型,就是指我们要学习的模型的形式是P(Y|X),这样在分类的过程中,我们通过未知数据X可以获得Y取值的一个概率分布,也就是训练后模型得到的输出不是一个具体的值,而是一系列值的概率〔对应于分类问题来说,就是对应于各个不同的类的概率〕,然后我们可以选取概率最大的那个类作为判决对象〔算软分类softassignment〕。
而非概率模型,就是指我们学习的模型是一个决策函数Y=f(X),输入数据X是多少就可以投影得到唯一的一个Y,就是判决结果〔算硬分类hardassignment〕。
回到GMM,学习的过程就是训练出几个概率分布,所谓混合高斯模型就是指对样本的概率密度分布进展估计,而估计的模型是几个高斯模型加权之和〔具体是几个要在模型训练前建立好〕。
每个高斯模型就代表了一个类〔一个Cluster〕。
对样本中的数据分别在几个高斯模型上投影,就会分别得到在各个类上的概率。
然后我们可以选取概率最大的类所为判决结果。
得到概率有什么好处呢?
我们知道人很聪明,就是在于我们会用各种不同的模型对观察到的事物和现象做判决和分析。
当你在路上发现一条狗的时候,你可能光看外形好似邻居家的狗,又更像一点点女朋友家的狗,你很难判断,所以从外形上看,用软分类的方法,是女朋友家的狗概率51%,是邻居家的狗的概率是49%,属于一个易混淆的区域,这时你可以再用其它方法进展区分到底是谁家的狗。
而如果是硬分类的话,你所判断的就是女朋友家的狗,没有“多像〞这个概念,所以不方便多模型的融合。
(一)单高斯分布模型GSM
多维变量X服从高斯分布时,它的概率密度函数PDF为:
x是维度为d的列向量,u是模型期望,Σ是模型方差。
在实际应用中u通常用样本均值来代替,Σ通常用样本方差来代替。
很容易判断一个样x本是否属于类别C。
因为每个类别都有自己的u和Σ,把x代入〔1〕式,当概率大于一定阈值时我们就认为x属于C类。
从几何上讲,单高斯分布模型在二维空间应该近似于椭圆,在三维空间上近似于椭球。
遗憾的是在很多分类问题中,属于同一类别的样本点并不满足“椭圆〞分布的特性。
这就引入了高斯混合模型。
(二)高斯混合模型GMM
GMM认为数据是从几个GSM中生成出来的,混合高斯模型的定义为:
其中K为模型的个数,πk为第k个高斯的权重,那么为第k个高斯的概率密度函数,其均值为μk,方差为σk。
我们对此概率密度的估计就是要求πk、μk和σk各个变量。
当求出的表达式后,求和式的各项的结果就分别代表样本x属于各个类的概率。
K需要事先确定好,就像K-means中的K一样。
πk是权值因子,表示在所有样本中,k类占的权重。
其中的任意一个高斯分布N(x;uk,Σk)叫作这个模型的一个component。
这里有个问题,为什么我们要假设数据是由假设干个高斯分布组合而成的,而不假设是其他分布呢?
实际上不管是什么分布,只K取得足够大,这个## MixtureModel就会变得足够复杂,就可以用来逼近任意连续的概率密度分布。
只是因为高斯函数具有良好的计算性能,所GMM被广泛地应用。
GMM是一种聚类算法,每个component就是一个聚类中心。
即在只有样本点,不知道样本分类〔含有隐含变量〕的情况下,计算出模型参数〔π,u和Σ〕----这显然可以用EM算法来求解。
再用训练好的模型去差异样本所属的分类,方法是:
step1随机选择K个component中的一个〔被选中的概率是πk〕;step2把样本代入刚选好的component,判断是否属于这个类别,如果不属于那么回到step1。
(三)样本分类情况下的GMM
当每个样本所属分类时,GMM的参数非常好确定,直接利用MaximumLikelihood。
设样本容量为N,属于K个分类的样本数量分别是N1,N2,...,Nk,属于第k个分类的样本集合是L(k)。
(四)样本分类未知情况下的GMM
在做参数估计的时候,常采用的方法是最大似然。
最大似然法就是使样本点在估计的概率密度函数上的概率值最大。
由于概率值一般都很小,N很大的时候这个连乘的结果非常小,容易造成浮点数下溢。
所以我们通常取log,将目标改写成:
也就是最大化log-likelyhoodfunction,完整形式那么为:
一般用来做参数估计的时候,我们都是通过对待求变量进展求导来求极值,在上式中,log函数中又有求和,你想用求导的方法算的话方程组将会非常复杂,所以我们不好考虑用该方法求解〔没有闭合解〕。
可以采用的求解方法是EM算法——将求解分为两步:
第一步是假设我们知道各个高斯模型的参数〔可以初始化一个,或者基于上一步迭代结果〕,去估计每个高斯模型的权值;第二步是基于估计的权值,回过头再去确定高斯模型的参数。
重复这两个步骤,直到波动很小,近似达到极值〔注意这里是个极值不是最值,EM算法会陷入局部最优〕。
具体表达如下:
1、对于第i个样本xi来说,它由第k个model生成的概率为:
在这一步,我们假设高斯模型的参数和是的〔由上一步迭代而来或由初始值决定〕。
〔Estep〕
〔Mstep〕
3、重复上述两步骤直到算法收敛〔这个算法一定是收敛的,至于具体的证明请回溯到EM算法中去,而我也没有具体关注,以后补上〕。
五、HMM-GMM模型在语音识别中的应用
(一)语言识别的过程
语音识别问题就是将一段语音信号转换为文字序列的过程. 在个问题里面
隐性状态就是:
语音信号对应的文字序列
而显性的状态就是:
语音信号.
HMM模型的学习(Learning):
语音识别的模型学习和上文过观察骰子序列建立起一个最有可能的模型不同. 语音识别的HMM模型学习有两个步骤:
1. 统计文字的发音概率,建立隐性表现概率矩阵B
2. 统计字词之间的转换概率(这个步骤并不需要考虑到语音,可以直接统计字词之间的转移概率即可)
语音模型的估计(Evaluation):
计算"是十四〞,"四十四"等等的概率,比拟得出最有可能出现的文字序列.
(二)其中HMM与GMM的作用
其中HMM模型如同一根线,从前向后,模拟了人类的发音过程,将其分化为各个状态。
而GMM如同线上的一颗颗珠子,以概率的形式描述了每个状态容
参考文献:
blogs./zhangchaoyang/articles/2624882.html
六、实验结果
(一)代码阅读以与注释
请参见.m文件,作业中提交的.m文件都是经过阅读注释的。
(二)实验结果比照
由于跑着实在太费机子了,期间还跑停机两次,于是实验结果不多
HMM1
3
6
89.09
96.36
97.27
HMM2
3
8
93.81
98.71
98.83
HMM3
3
9
94.25
98.87
99.16
发射数为七的数据因为掉电没有了。
但是可以清楚的看到随着发射数的增加,识别率明显增加,但是增加的值越来越下,识别率增长的速率随发射数和迭代数的增加而增加
而根据“过拟合〞原理,如果发射数持续递增,识别率会在到达某个顶点之后下降。
(三)与DTW结果比照
总体上来说HMM的性能要比DTW好很多,在模型方面HMM采用了GMM模型,那么可识别围比DTW更好;HMM把孤立语音分为几个不同的状态同一训练,这就与DTW分不同模版匹配差不多,但是HMM明显更方便。
在识别方面DTW用的是动态规划,需要反向搜索过程,在维特比算法不需要,它相当于动态规划的剪枝算法,所以更为迅速。
HMM更像是一个学习的过程,一个k-means的监视性分类器,分类出多个状态〔GMM高斯模型〕而非一个供识别的模版。
而DTW比起HMM显得较为生硬些。