基于GMM-HMM的语音识别系统
终极目的:让机器“听懂” 。
• 对齐:“音频wav” 和“文本txt”的对应关系
• 训练:已知对齐(wav及其txt),迭代计算模型参数。
• 解码:根据训练得到的模型参数,从wav推出txt。
核心:训练和解码
目录:
建模
建立特征向量与模型之间的关系
Xtest测试特征,Pw(X)是词w的概率模型,vocab是词表(在该示例中即0~9 10个数字)
这里的意思就是我们首先要对每个词建模,在他们落在每个词上面的概率,最后选择最大概率那个作为答案。
语音识别中的GMM(对角的GMM,协方差为对角阵,MFCC特征)。语音识别中的HMM,采用3状态,左右模型的HMM:
·为什么采用3状态?这是前人大量实验给出的经验值;
左右模型的HMM:对于每个状态,它只能跳转到自身或者下一个状态。类似于人的发音过程,连续不可逆
对于每个状态有一个GMM模型,对于每个词有一个HMM模型,当一段语音输入后,根据Viterbi算法得到一个序列在GMM-HMM上的概率,然后通过Viterbi回溯得到每帧属于HMM的哪个状态(对齐)。
训练
从系统的角度思考
• 输入:词w和w所对应的训练数据
• 输出:词w的HMM-GMM模型,也就是其参数
关键点
• 任务:训练数据Xw1,Xw2,Xw3… 中训练Pw(X),估计HMM-GMM参数
• 准则:最大似然
• 方法:
• Viterbi学习(Viterbi训练)
• Baum-Welch学习(前向后向训练)
下面进行viterbi算法与EM算法的训练,那么我们就要对应找到初始状态,状态转移概率矩阵,观测概率矩阵。
初始状态:从左到右的HMM。
转移矩阵:跳回到自己或者跳向下一个参数
观测矩阵:混合系数、均值、方差
Viterbi算法
• E步(hard count)
Viterbi算法得到最优的状态序列(对齐 alignment),在t时刻处于状态上的概率(非0即1)
GMM模型中在t时刻处于状态第个GMM分量的概率(依然是soft count)
• M步(normalize)
更新转移参数、GMM参数(混合系数、均值、方差)
• 重复E/M
前向后向训练
• E步(soft count)
前向算法+后向算法,在时刻t处于状态i的概率
在时刻 t处于状态j且为GMM第k个分量的概率
• M步(normalize)
更新转移参数、GMM参数(混合系数、均值、方差)
• 重复E/M
这里可以去看我的前面那篇讲HMM的笔记
解码
• 从系统的角度思考
• 输入
各个词的HMM-GMM模型
未知的测试语音Xtest
• 输出:
Xtest是哪个词
• 关键点
概率问题对所有的w,如何 计算()
方法:
前向算法
Viterbi算法(可以回溯到最优的状态序列)
可以看出直接通过viterbi算法找到最佳路径即可
如果是连续数字识别呢?
加上一个循环即可。在识别完一个词,可以加入下一个词的识别。与此同时,还可以采用并行的办法提高效率,因为是并行的,在某个时刻,可能同时会有多个词达到结束状态,分别对应着一段路径,然后又要同时进行下一个词的识别,那么为了避免多余的计算,采用和Viterbi一样的思路,只选取最大概率的路径,扔掉其他。
孤立词系统的缺点
1.建模单元数,计算量和词典大小成正比
2.词的状态数对每个词应该不同,长词状态更多
3.不在词典中的情况
4.词不是最小的单位,音素才是
问题:如果一句话中包含多个单词?
这个采用和上述相同的方法,加入循环结构,当到达结束状态时进行下一个词的识别。
基于三音素的GMM-HMM语音识别系统
单音素的缺点:
1.建模单元少
2.音素的发音受上下文影响(协同发音)
解决方案:考虑音素的上下文(Context),一般的,考虑前一个/后一个,称之为三音素,表示为A-B+C
同时采用决策树的方法来优化存储结构,减少重复参数出现。
决策树长这样:
• 二叉树
• 每个非叶子结点上都会有一个问题
• 叶子结点是一个绑定三音素的集合
• 绑定的粒度为状态
A-B+C和A-B+D的第1个状态绑定在一起,并不代表其第2/3个状态也要在一起
也就是B的每个状态都有一颗小的决策树
问题集的构建:语言学家定义,Kaldi中通过自顶向下的聚类自动构建问题集。
它是一种基础状态的绑定,每一个叶子结点都绑定了一种状态
决策树的构建
即,最优问题。初始条件类似图中的根节点,“-zh+”,从问题集中选择合适的问题,分裂该节点,使相近的三音素分类到相同的节点上。假设根节点所有三音素对应的特征服从一个多元单高斯分布,可以计算出该单高斯分布的均值和方差,则可以计算出该节点任意一个特征在高斯上的似然。
数据:S=(x1,…,xm)∈(RN)m
模型:假设其服从单高斯分布,并且各维独立,也就是对角GMM
决策树的构建流程:
1.初始状态(单因素系统对齐,一个根节点)
2.选择一个节点,从问题集中选择似然增益最大的问题作为该节点问题,建立该节点左右子节点,并将该节点一分为二
3.重复2,直至满足一定的终止条件。
基于GMM-HMM语音识别系统流程
• 数据准备:音素列表、词典、训练数据(音频/文本)
• 特征提取:MFCC特征
• 单音素GMM-HMM:Viterbi训练(获取输入与最佳状态的对齐)
• 三音素GMM-HMM:决策树和三音素,Viterbi训练
• 解码
作业是来自哥伦比亚大学的语音识别课程,不过有点难,后续会把我的作业链接发在评论区。
感谢收看,记得点赞~