【语音识别】基于GMM-HMM的语音识别系统

基于GMM-HMM的语音识别系统
终极目的:让机器“听懂” 。
• 对齐:“音频wav” 和“文本txt”的对应关系
• 训练:已知对齐(wav及其txt),迭代计算模型参数。
• 解码:根据训练得到的模型参数,从wav推出txt。
流程

核心:训练和解码

目录:

  1. 基于孤立词的GMM-HMM语音识别系统
    a. 训练(前向后向训练/Viterbi训练)
    b. 解码
  2. 基于单音素的GMM-HMM语音识别系统
    a. 音素/词典
    b. 训练
    c. 解码
  3. 基于三音素的GMM-HMM语音识别系统
    a. 三音素
    b. 决策树
    c. 训练
    d. 解码
  4. 基于GMM-HMM语音识别系统流程

1.基于孤立词的GMM-HMM语音识别系统
孤立词GMM-HMM

建模
建立特征向量与模型之间的关系
Xtest测试特征,Pw(X)是词w的概率模型,vocab是词表(在该示例中即0~9 10个数字)
表达式1

这里的意思就是我们首先要对每个词建模,在他们落在每个词上面的概率,最后选择最大概率那个作为答案。

语音识别中的GMM(对角的GMM,协方差为对角阵,MFCC特征)。语音识别中的HMM,采用3状态,左右模型的HMM:
孤立词拓扑图

·为什么采用3状态?这是前人大量实验给出的经验值;
左右模型的HMM:对于每个状态,它只能跳转到自身或者下一个状态。类似于人的发音过程,连续不可逆
对于每个状态有一个GMM模型,对于每个词有一个HMM模型,当一段语音输入后,根据Viterbi算法得到一个序列在GMM-HMM上的概率,然后通过Viterbi回溯得到每帧属于HMM的哪个状态(对齐)。
GMM-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算法(可以回溯到最优的状态序列)

如果是有两个数字识别:
其拓扑图为:
1-2识别拓扑图

状态转移图为:
1-2识别状态转移图

可以看出直接通过viterbi算法找到最佳路径即可

如果是连续数字识别呢?
加上一个循环即可。在识别完一个词,可以加入下一个词的识别。与此同时,还可以采用并行的办法提高效率,因为是并行的,在某个时刻,可能同时会有多个词达到结束状态,分别对应着一段路径,然后又要同时进行下一个词的识别,那么为了避免多余的计算,采用和Viterbi一样的思路,只选取最大概率的路径,扔掉其他。

孤立词系统的缺点
1.建模单元数,计算量和词典大小成正比
2.词的状态数对每个词应该不同,长词状态更多
3.不在词典中的情况
4.词不是最小的单位,音素才是

从而采用3音素建模:
3音素建模拓扑图

训练流程变成:
3音素训练流程

问题:如果一句话中包含多个单词?
这个采用和上述相同的方法,加入循环结构,当到达结束状态时进行下一个词的识别。

基于三音素的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
表达式2

似然:
似然

分成两类:
注:left与right,对应问题的Y与N
分两类

似然增益:
似然增益

最优问题q*:
最优问题q*

决策树的构建流程:
1.初始状态(单因素系统对齐,一个根节点)
2.选择一个节点,从问题集中选择似然增益最大的问题作为该节点问题,建立该节点左右子节点,并将该节点一分为二
3.重复2,直至满足一定的终止条件。

基于GMM-HMM语音识别系统流程
• 数据准备:音素列表、词典、训练数据(音频/文本)
• 特征提取:MFCC特征
• 单音素GMM-HMM:Viterbi训练(获取输入与最佳状态的对齐)
• 三音素GMM-HMM:决策树和三音素,Viterbi训练
• 解码

作业是来自哥伦比亚大学的语音识别课程,不过有点难,后续会把我的作业链接发在评论区。
感谢收看,记得点赞~

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值