• AI大语音(五)——隐马尔科夫模型(HMM)


    ​点击上方“AI大道理”,选择“置顶”公众号

    重磅干货,细致入微AI大道理

     ——————

    1HMM基础

    一模型、两假设、三问题

    1)一个模型

    随机过程:是依赖于参数的一组随机变量的全体,参数通常是时间。随机变量是随机现象的数量表现,其取值随着偶然因素的影响而改变。

    例如,某商店在从时间t0到时间tK这段时间内接待顾客的人数,就是依赖于时间t的一组随机变量,即随机过程。

    马尔科夫过程:随机过程的一类,系统下一时刻的状态仅与单前状态有关。

    隐马尔科夫模型(HMM):用来描述一个含有未知参数的马尔科夫过程。

     隐马尔可夫模型是关于时间序列的概率模型,描述由一个隐藏的马尔可夫链随机生成不可观测的状态序列 (state sequence),再由各个状态生成一个 观测而产生观测序列 (observation sequence)的过程,序列的每一个位置又可以看作是一个时刻。

    2)两个基本假设

    齐次马尔可夫性假设:隐藏的马尔可夫链在时刻t的状态只和t-1的状态有关。

    观测独立性假设:观测只和当前时刻的状态有关。

    3)三大问题

    1) 概率计算问题。即给定模型λ=(A,B,Π)λ=(A,B,Π)和观测序列O={o1,o2,...oT}O={o1,o2,...oT},计算在模型λ下观测序列O出现的概率P(O|λ)。这个问题的求解需要用到前向算法、后向算法和直接计算法。

    2)解码问题。即给定模型λ=(A,B,Π)和观测序列O={o1,o2,...oT},求给定观测序列条件下,最可能出现的对应的状态序列,这个问题的求解需要用到基于动态规划的Viterbi算法。

    3)模学习问题。即给定观测序列O={o1,o2,...oT},估计模型λ=(A,B,Π)的参数,使该模型下观测序列的条件概率P(O|λ)最大。这个问题的求解需要用到基于EM算法的Baum-Welch算法。

    2 HMM的隐状态

    隐状态、箱子、第K个高斯

    隐藏状态是抽象出来的概念,由于语音信号在一个长时间断内是非平稳信号,而在一个较短的时间内则可近似看做平稳的(比如50毫秒)。平稳信号的特点在于信号的频谱分布是稳定的,不同时间段的频谱分布相似。隐马尔可夫模型将一小段频谱相似的连续信号归为一个隐状态。Viterbi算法对齐就是为了找到哪些帧归于哪个隐状态,隐马尔可夫模型的训练过程是最大化似然度,每一个状态产生的数据用一个概率分布表示。只有当相似的连续信号尽可能被归为同一个状态,似然度才能尽可能的大

    类比箱子和小球,手从哪个箱子拿的球不知道,只知道拿出来后看见的小球,问小球来自哪个箱子的可能。其中,箱子就是隐状态,小球就是可观测的。箱子中有不同小球的比例,或者分布,而HMM中也有隐状态对应到特征向量的概率分布。假如箱子中小球分布符合高斯分布,假设HMM中隐状态中特征符合高斯分布,GMM混合高斯模型就是在模拟这个分布,理解性的表达可以说模拟隐状态中可观测特征的比例。只不过一个箱子中三个小球比列为3:2:1,而HMM一个隐状态中有39种特征,也是有占比。

    GMM中也有隐状态,特征向量不知道来自哪个Gaussion。K1、K2、K3组成一个GMM,K1、K2、K3类比箱子1、箱子2、箱子3,类比HMM中状态1、状态2、状态3。

    3 概率计算问题

    前向算法、后向算法、Viterbi

     概率计算问题(评估问题、序列分类问题、求可观测问题):

    即给定模型λ=(A,B,Π)λ=(A,B,Π)和观测序列O={o1,o2,...oT}O={o1,o2,...oT},计算在模型λ下观测序列O出现的概率P(O|λ)。

    1)直接法(不用)

    2)前向算法

    前向算法实现:

    3)后向算法

    后向算法实现:

    4)Viterbi算法(近似)

    可以回溯到最优的状态序列,求最优路径的概率代替所有路径的概率和P(O|λ)。

    灵魂的拷问:这样计算最优路径的概率代替所有路径概率和P(O|λ),是不是不准了呢?又为什么能代替呢?

    AI大语音:在实际语音识别中,是可以代替的。因为概率的分布比较尖,也就是某个位置的概率会非常大,其他比较小,最优路径的概率跟所有路径的概率差不多。那条最优路径的概率就如同战场上的将军、游戏里的大boss,战力已经接近总战力了,所有和所有路径的概率和很接近。

    既然可以近似,那两种算法的概率应该差不多大才是。对比一下程序中前向算法和Viterbis算法求出来的概率。

    灵魂的拷问:一个0.13级别、一个0.014级别的,这也叫差不大嘛?都差一个数量级了。

    AI大语音:转移矩阵、发射矩阵中的概率差别不是特别大的时候是不能用来近似的,程序中的例子不具有代表性,不是类似语音识别的例子,在大多数语音识别应用中求出来两者的概率才会差不多,才能近似代替。

    4 解码问题

    Viterbi算法、近似算法

    解码问题(对齐问题、预测问题、序列标注问题、求隐状态问题)

    即给定模型λ=(A,B,Π)和观测序列O={o1,o2,...oT},求给定观测序列条件下,最可能出现的对应的状态序列,这个问题的求解需要用到基于动态规划的Viterbi算法。

    Viterbi算法是最优路径算法的一种。最优路径算法:

    穷举法

    方法:把所有可能路径都计算一遍,最优路径自然就出来了。

    优点:必然能找到最优路径。

    缺点:计算量太大。

     A*算法

    方法:每一步只走最好走的路(目光短浅)

    优点:计算快,而且这种贪心或者说启发式的算法,通常情况下,效果还是不错的。

    缺点:很难找到最优解,陷入局部最优

     beam search (波束搜索)

    方法:每一步只走最好走的前N条路。这里的N也叫Beam Width。是A*算法的改进,当N=1时,退化为A*算法,当N=N时,退化为穷举法。

    优点:N设置良好的话效果不错。

    缺点:Beam Width越大,找到最优解的概率越大,相应的计算复杂度也越大。

    1) Viterbi算法

    方法:记录每个时刻的每个可能状态的之前最优路径的概率,同时记录最优路径的前一个状态,不断向后迭代,找到最后一个时间点的最大概率值对应的状态,回溯找到最优路径。

    注意:Viterbi算法前向时只是计算概率,并记住,后向回溯时才得到最优路径。

    算法实现:

    2) 近似算法(不常用)

    近似算法是前向计算时最大的就选了这个路径,也就是单步最大的路径组合成最优路径;而Viterbi是前向只计算并记住,根据最后最大的那个概率回溯选择路径。

    5 学习问题

    Viterbi学习算法、Baum-Welch算法

    学习问题(训练问题、参数估计、求模型问题)

    即给定观测序列O={o1,o2,...oT},估计模型λ=(A,B,Π)的参数,使该模型下观测序列的条件概率P(O|λ)最大。这个问题的求解需要用到基于EM算法的Baum-Welch学习算法和Viterbi学习算法。

    1)Viterbi学习算法(硬对齐)

    Viterbi算法需要先初始化一个HMM模型λ=(A,B,Π)。

    在语音识别应用中由于HMM是从左到右的模型,第一个必然是状态一,即P(q0=1)=1。所以没有pi这个参数了。

    1)Baum-Welch学习算法(软对齐)

    同样,在语音识别应用中没有pi。

      

    附录(魔鬼写手)

    ——————

    浅谈则止,细致入微AI大道理

    扫描下方“AI大道理”,选择“关注”公众号

               欢迎加入!

        

    ▼下期预告▼AI大语音(六)——混合高斯模型(GMM)

    ▼往期精彩回顾▼

    AI大语音(一)——语音识别基础

    AI大语音(二)——语音预处理

    AI大语音(三)——傅里叶变换家族

    AI大语音(四)——MFCC特征提取

                                                                                   留你心,言你想

  • 相关阅读:
    页面笔记
    RestTemplate
    Spring中使用HibernateCallback
    工作中的小零碎
    hibernate核心思想 体系结构(转)
    db2备份和导入单个表操作
    MSB-STRUTS-课堂笔记
    设计模式:策略模式(转)
    java中的匿名内部类总结(转)
    struts2.0中Action的对象生命周期详解!!(转)
  • 原文地址:https://www.cnblogs.com/AIBigTruth/p/13532803.html
Copyright © 2020-2023  润新知