姓名:王蔼伶 学号:19020100281 学院:电子工程学院
转自:https://blog.csdn.net/quheDiegooo/article/details/56286891
【嵌牛导读】HMM模型
【嵌牛鼻子】HMM的构建
【嵌牛提问】如何进行嵌入式训练?
【嵌牛正文】
本章主要讲解HMM训练过程,首先HMM模型如下:
Q =q1q2...qN 状态集合(subphone集合)
A =a01a02...an1...ann 状态(subphone)转移矩阵,Q和A构成了发音字典
B=bi(ot) 观测似然,也叫作发射概率 ,表述为:每个subphone状态i产生倒谱特征Ot的概率
最简单的方式是给定手工标注的孤立词和对应的音频文件,计算每个子音素(subphone)对应的标注来计算矩阵B,然而实际中却无法做到,因为每个subphone对应的Ot是很难用手工去标注的。(用手工去在一断连续的音频上标注一个子因素是不可行的)因此,训练每个phone的HMM是嵌入在整个句子中进行的,音素的分割和对其是在训练过程中自动进行的,所以整个这个训练过程叫做嵌入式训练(embedded training )
数据准备:在训练过程前,需要准备wav音频文件,对应的标注文本,还有发音字典,基于句子的HMM构建如下:
接下来就是训练状态转移矩阵A和似然估计矩阵B了,
用ξj(t) 表示:在t时刻,状态i生成观测序列O的概率。
在初始阶段,我们需要对ai j和bj(ot) 一个初始的估计 ,最简单的做法叫做flat start,
在flat start中,状态转移矩阵中,状态的自环和跳转到下一个状态(subphone)的概率相同,为0.5,高斯的均值方差取全局训练数据的均值和方差。现在有了基础的HMM-GMM参数了,接下来就要在整个训练集合上跑Balum-Welch算法,每次迭代,都要修改HMM参数,直到系统趋于一致不变。首先在给定初始的矩阵A和B的情况下,计算前向-后向概率,然后,用前向-后向概率重新估算新的矩阵A和矩阵B,具体推导会在下一篇文章《HMM基础-HMM训练-前向后向算法》章节详细讨论。同时用EM算法来更新多元高斯模型的均值和方差。
综上所述,标准的嵌入式训练过程如下所述:
给定训练音频文件,标注文件,发音字典情况下
1)如上图所述,对每个句子,构建一个句子的HMM模型。
2)初始化状态转移中的非零元素(自环为0.75,和跳转到下一个状态的为0.25)
3)初始化发射概率矩阵每个高斯的均值方差为所以训练集合的全局均值和方差。
4)EM迭代多次,用Viterbi来计算ξj(t) (在t时刻,状态i生成观测序列O的概率),
为计算ξj(t) ,要累计所有可能的路径,这样计算太慢了,一个更高效的算法是Viterbi 算法,
在训练算法中,不再是用前向-后向算法累计所有的路径来计算ξj(t),而是通过重复的跑Viterbi路径(最大概率路径)
来接近估测这个值。
用Viterbi来训练数据过程,也叫作强制Viterbi对齐,或强制对齐过程
在Viterbi对齐过程中,因为已经知道观察序列对应的词序列,所以合适的设置aij ,就可以强制Viterbi算法来通过某个指定的词。
Viterbi对齐其实是Viterbi解码的一个简化版,因为,Viterbi强制对齐过程中只需要找到观测值Ot对应正确的状态(或subphone)序列,而不需要找到正确的词序列。训练结果就是Viterbi强制对齐:即,对应观测序列O的,一条最优状态序列。
接下来,我们可以用对齐的HMM状态到累计counts,从而重新估计HMM参数。
Viterbi对齐中重新训练高斯模型参数的公式如下所示:
高斯混合模型的计算参加上一篇文章。
以上就是嵌入式训练过程。
————————————————
版权声明:本文为CSDN博主「quheDiegooo」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/quheDiegooo/article/details/56286891