当前位置:网站首页>【语音识别】基于GMM-HMM的语音识别系统
【语音识别】基于GMM-HMM的语音识别系统
2022-07-30 12:08:00 【Algorismus】
基于GMM-HMM的语音识别系统
终极目的:让机器“听懂” 。
• 对齐:“音频wav” 和“文本txt”的对应关系
• 训练:已知对齐(wav及其txt),迭代计算模型参数。
• 解码:根据训练得到的模型参数,从wav推出txt。
核心:训练和解码
目录:
- 基于孤立词的GMM-HMM语音识别系统
a. 训练(前向后向训练/Viterbi训练)
b. 解码 - 基于单音素的GMM-HMM语音识别系统
a. 音素/词典
b. 训练
c. 解码 - 基于三音素的GMM-HMM语音识别系统
a. 三音素
b. 决策树
c. 训练
d. 解码 - 基于GMM-HMM语音识别系统流程
1.基于孤立词的GMM-HMM语音识别系统
建模
建立特征向量与模型之间的关系
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.词不是最小的单位,音素才是
从而采用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
似然:
分成两类:
注:left与right,对应问题的Y与N
似然增益:
最优问题q*:
决策树的构建流程:
1.初始状态(单因素系统对齐,一个根节点)
2.选择一个节点,从问题集中选择似然增益最大的问题作为该节点问题,建立该节点左右子节点,并将该节点一分为二
3.重复2,直至满足一定的终止条件。
基于GMM-HMM语音识别系统流程
• 数据准备:音素列表、词典、训练数据(音频/文本)
• 特征提取:MFCC特征
• 单音素GMM-HMM:Viterbi训练(获取输入与最佳状态的对齐)
• 三音素GMM-HMM:决策树和三音素,Viterbi训练
• 解码
作业是来自哥伦比亚大学的语音识别课程,不过有点难,后续会把我的作业链接发在评论区。
感谢收看,记得点赞~
边栏推荐
- Bagging-Blending Multi-Model Fusion Short-Term Electricity Load Forecasting Based on Weighted Grey Correlation Projection
- 看了这些6G原型样机,我想一觉睡到2030年
- New:WebKitX ActiveX :::Crack
- Homework 7.29 correlation function directory and file attributes related functions
- ModelCoder状态机:对柴油机工况判断策略进行建模
- Based on MySQL database, Redis cache, MQ message middleware, ES high availability scheme of search engine parsing
- 别被隐私计算表象骗了 | 量子位智库报告(附下载)
- 最基础01/完全背包
- saltstack学习1入门基础
- Niuke-TOP101-BM42
猜你喜欢
随机推荐
SQL 根据时间范围查询数据
概率论得学习整理--番外3:二项式定理和 二项式系数
Interviewer: Redis bloom filter and the cuckoo in the filter, how much do you know?
概率论的学习整理--番外2:和二项式,组合相关的杨辉三角
解码Redis最易被忽视的CPU和内存占用高问题
Rust 从入门到精通02-安装
TensorFlow custom training function
看了这些6G原型样机,我想一觉睡到2030年
Based on the analysis of the acoustic channel cable tunnel positioning technology
Based on MySQL database, Redis cache, MQ message middleware, ES high availability scheme of search engine parsing
什么是私有云?您应该知道的 6 个优势
PanGu-Coder: 函数级的代码生成模型
刷屏了!!!
微信视频号视频如何下载提取?视频号直播回放如何下载?方法很简单!
New:WebKitX ActiveX :::Crack
LeetCode_236_Last Common Ancestor of a Binary Tree
int a=8,a=a++,a? int b=8,b=b+1,b?
saltstack学习1入门基础
打破原则引入SQL,MongoDB到底想要干啥???
[BJDCTF2020]Cookie is so stable-1|SSTI注入









