单音素GMM-HMM模型的训练

举报
可爱又积极 发表于 2021/09/16 13:10:36 2021/09/16
【摘要】 模型的训练是输入特征到音素的状态的训练,即我们并不知道哪一帧输入特征对应哪个音素的哪一个状态。训练的目的就是找到帧对应状态的情况,并更新状态的gmm参数。把每一帧都归到某个状态上,本质上是进行聚类,是无监督训练。单音素GMM-HMM模型的训练通过Viterbi训练(嵌入式训练),把“S IH K S”对应的GMM模型嵌入到整段音频中去训练。训练步骤:步骤一:初始化对齐为什么要初始化对齐?为v...

模型的训练是输入特征到音素的状态的训练,即我们并不知道哪一帧输入特征对应哪个音素的哪一个状态。训练的目的就是找到帧对应状态的情况,并更新状态的gmm参数。把每一帧都归到某个状态上,本质上是进行聚类,是无监督训练。

单音素GMM-HMM模型的训练通过Viterbi训练(嵌入式训练),把“S IH K S”对应的GMM模型嵌入到整段音频中去训练。

训练步骤:

步骤一:初始化对齐

为什么要初始化对齐?

viterbi提供初始参数AB

一开始不知道一段语音的哪些帧对应哪些状态,我们就进行平均分配。比如两秒的“ six”语音一共80帧,分成四个因素“S IH K S”,每个音素分配到20帧,每个音素又有三个状态组成,每个状态分配6或者7帧。这样就初始化了每个状态对应的输入数据。

什么意思?

就是假设前0-20帧数据都是“S”这个音素的发音,20-40帧数据都是“IH”这个音素的发音,40-60帧是“K”这个音素的发音,60-80是“S”这个音素的发音。但这只是一个假设,事实到底如此我们还不知道。我们可以在这个初始对齐下进一步优化。

步骤二:初始化模型

HMM模型λ=(A,B,Π)。我们对初始对齐的模型进行countcount什么呢?

在初始化对齐后就可以count状态1->状态1的次数,状态1->状态2的次数,这就是转移次数,转移次数/总转移次数=转移概率。转移初始转移概率A(aij)就得出了。

Π就是[1,0,0,0...],一开始在状态一的概率是100%在语音识别应用中由于HMM是从左到右的模型,第一个必然是状态一,即P(q0=1)=1。所以没有pi这个参数了。

还有B(bj(ot))参数怎么办?

一个状态对应一个gmm模型,一个状态对应若干帧数据,也就是若干帧数据对应一个gmm模型。一开始我们不知道哪些帧对应哪个状态,所以gmm模型的输入数据就无从得知。现在初始化后,状态1对应前6帧数据,我们就拿这六帧数据来计算状态1gmm模型(单高斯,只有一个分量的gmm),得到初始均值和方差。

(完美的假想:假设我们初始化分配帧恰恰就是真实的样子,那么我们的gmm参数也是真实的样子,这个模型就已经训练好了。)

步骤三:重新对齐(viterbi硬对齐,Baum-welch软对齐)

假想想想就好了,现在得到的GMM-HMM模型就是个胚芽,还有待成长,懂事,这就需要重新对齐,向真实情况逼近的重新对齐。如何逼近真实情况?viterbi算法根据初始化模型λ=(A,B,Π)来计算。它记录每个时刻的每个可能状态的之前最优路径概率,同时记录最优路径的前一个状态,不断向后迭代,找出最后一个时间点的最大概率值对应的状态,如何向前回溯,得到最优路径。得到最优路径就得到最优的状态转移情况,哪些帧对应哪些状态就变了。转移概率A就变了。

哪些帧对应哪些状态变了导致状态对应的gmm参数自然就变了,也可以跟着更新均值 和方差,即发射概率B变了。(采用EM算法)

步骤四:迭代

新的A和新的B又可以进行下一次的Viterbi算法,寻找新的最优路径,得到新的对齐,新的对齐继续改变着参数AB。如此循环迭代直到收敛,则GMM-HMM模型训练完成。

灵魂的拷问:迭代何时是个头?

AI大语音:一般是设置固定轮数,也可以看一下对齐之后似然的变化,如果变化不大了,基本就是收敛了。)

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200