• 隐马尔科夫模型(HMM)学习笔记


    1. 马尔科夫链:在任一时刻t,观测变量的取值仅依赖于当前的状态变量,与其他时刻的状态变量即观测变量无关;同时,当前的状态值仅依赖于前一个时刻的状态,与其他无关。
    2. 由马尔可夫得到HMM的联合概率分布
    3. 一个模型肯定包含参数,机器学习的本质就是找到一组最优的参数,使得模型的拟合效果最好。
    4. HMM的参数:状态转移概率(由当前状态推测下一状态的概率),输出观测概率(由当前状态推测观测值的概率)
    5. 三个基本问题:
      1. 概率计算问题:给定模型和观测序列,计算观测序列的出现概率
      2. 学习问题:已知观测序列,估计模型参数,使得观测序列的输出概率最大
      3. 预测问题:给定模型和观测序列,求对给定观测序列条件概率P(I|O)最大的隐藏状态I
    6. 算法:
      1. 前向算法:给定隐马尔科夫模型,以及至时刻t的观测序列,且状态为qi的前向概率:实际就是从t=1开始计算,根据隐式马尔可夫的假设,迭代计算即可得(自己理解:前向概率就是时刻t转移到时刻t+1的概率,每个状态乘上当前状态的状态转移概率,由于最后得到的是观测值,还需要乘上最后时刻的观测概率)
      2. 后向算法:给定隐马尔科夫模型,以及从t+1时刻到T的观测序列,且状态为qi的后向概率:假设最后一时刻的概率为1,然后理由条件概率的逆计算从后向前推
      3. Baum-welch算法:如果样本数据没有标签,则训练数据只包含观测序列O,但对应的状态I未知,则此时的隐马尔科夫模型是一个含有隐变量的概率模型。

        参数学习本质还是EM,EM的基本思想是先将参数的初设估计值加入到似然函数中,然后对似然函数进行极大化(一般是求导,令其等于0),得到新的参数估计值,一直重复,直到收敛。

      4. 维特比(Viterbi)算法:是一种动态规划算法,用于寻找最有可能产生观测事件序列的-维特比路径-隐含状态序列。

      5. 概括:

        1. 给定模型和观察,Forward算法可以计算从模型观察出特定序列的概率;Viterbi算法可以计算最有可能的内部状态;Baum-Welch算法可以用于训练HMM。当有足够的训练数据,用Baum-Welch算出HMM的状态转移概率和观察概率函数,然后就可以用Viterbi算法求出每一句输入的语音背后最有可能的音素序列。但如果数据量有限,往往先训练一些比较小的HMM用于识别各个单音子(monophone),或者三音子(triphone),然后把这些小HMM串起来就能识别连续语音

        2. 对于语音合成,给定一串音素,去数据库里找出最符合这串音素的一堆小HMM,把它们串成一个较长的HMM,代表整个句子。然后根据这个组合出的HMM,计算最有可能观察出的语音参数序列,剩下的就是从参数序列生成语音了。这是对完整过程的简化,最主要的问题在于,这样生成的语音参数是不连续的,因为HMM的状态是离散的。为了解决这个问题,Keiichi Tokuda借鉴语音识别中广泛使用的动态参数(参数的一阶和二阶导数),将其引入语音合成的参数生成中,使生成语音的连贯性有了大幅提高。重点是利用隐性状态,如语法,用词习惯等,推测出概率更高的输出。

    7. 在已知模型参数的情况下,观测序列为O时,状态可以为任何一种状态,则每一种状态下观测序列为O的概率累加就是观测序列的概率了。
    8. 对于有监督学习,可以直接根据数据计算状态转移概率和输出观测概率(对于分词来说,观测序列对应的是文本句子,隐藏状态对应的是句子中每个字的标签)
    9. 语音识别中观测序列是语言,隐藏状态是文字,语音识别的作用就是将语音转化为对应的文字。

    参考:

    「隐马尔可夫模型」(HMM-Based)在语音合成中是如何应用的? - 知乎 (zhihu.com)

        
        

  • 相关阅读:
    Primavera P6 Professional 21.12 登录异常案例分享
    669. 修剪二叉搜索树
    测试管理三要素
    查找:顺序查找的实现以及相关优化
    从交叉熵到Focal Loss
    ORM--查询类型,关联查询
    OsgEarth3基础3D图形实现
    网络安全就业形势怎么样?
    C#WPF 应用Grid布局实现用户登录实例
    虎牙、斗鱼的变现困顿
  • 原文地址:https://blog.csdn.net/weixin_45647721/article/details/125631861