隐马尔可夫模型 HMM

前置知识:1_study/math/马尔可夫模型

隐马尔可夫模型

可视马尔可夫模型的状态是可知的,而隐马尔可夫模型(The Hidden Markov Model,简称 HMM)的状态是不可知,但存在可知的序列观察值

以典型的看病模型为例,设病人的状态有两种:{健康(Healthy),发烧(Fever)}

医生不能直接知道病人的状态,但能够得知病人的健康状况:{正常(Normal),发寒(Cold), 头晕(Dizzy)},作为一个行医多年的鬼才医生,他可以构建出看病用的隐马尔可夫模型:

注:HMM其实是朴素贝叶斯的序列标注版

HMM的求解思路

借助隐马尔可夫模型,可以解决以下 3 类问题:

  1. 评估(Evaluation)
  • 定义:给定 HMM,求观察值的可能概率
  • 举例:一个病人第一天头晕,求第二天头晕的概率
  • 解决方法:暴力枚举、前向算法、后向算法
  1. 解码(Decoding)
  1. 学习(Learning)
  • 定义:给定观察值序列,求解 HMM 的参数
  • 举例:根据医生最近一年的看病记录,判断头晕病人发烧概率、第二天继续头晕的概率、第二天康复的概率(确定初始状态分布与状态转移概率矩阵)
  • 解决方法:Baum-Welch 算法(不存在大量标注数据),极大似然估计或其他有监督学习算法(存在大量标注数据)

鲍姆-韦尔奇算法(Baum-Welch)

  • 采用1_study/algorithm/迭代优化算法/期望最大化 EM 算法的原理,不过该算法的出现早于 EM 算法
  • 假设当前的可观测序列为 $O$,当前不可观测状态为 $I$,当前模型参数为 $\overline{\lambda}$
  • E 步:基于条件概率 $P(I|O,\overline{\lambda})$ 计算联合分布 $P(O,I|\lambda)$ 的期望表达式 $$

L(\lambda, \overline{\lambda}) = \sum\limits_{I}P(I|O,\overline{\lambda})logP(O,I|\lambda) $$

  • M 步:根据期望表达式的最大化,得到更新后的模型参数 $\overline{\lambda}$ $$

\overline{\lambda} = arg;\max_{\lambda}\sum\limits_{I}P(I|O,\overline{\lambda})logP(O,I|\lambda) $$

  • 通过不断的E步和M步的迭代,直到 $\overline{\lambda}$ 逐渐收敛

HMM 应用与进阶

具体应用:

进阶阅读:

高阶 HMM

  • 初始的HMM是基于马尔可夫链来实现的,认为当前时刻的状态,只受前一时刻的影响
  • 二阶马尔可夫链:当前时刻状态,只受前两个时刻的影响(以此可类推 N 阶马尔可夫链)
  • 二阶马尔可夫链构建隐马尔可夫模型时,得到的就是二阶隐马尔可夫模型,简称2-HMM

层次化HMM

层次化隐马尔可夫模型(The Hierarchical Hidden Markov Model),简称HHMM

当序列过长时,HMM的复杂度会很高(指数级增长),因此提出了HHMM将HMM进行层次化的拆分,简单来说,就是原本状态与观察值的转换关系,变成了状态与观察值序列的转换关系。

(摘自宗成庆的《统计自然语言处理》)

备注:为了方便理解上图,可以把$q^1$层看作初始化层,$q^2$层看作句子相关的特征,$q^3$层看作词语相关的特征,$q^4$层看作字相关的特征

参考

如何用简单易懂的例子解释隐马尔可夫模型? - henry的回答 - 知乎

维基百科 - 维特比算法

隐马尔可夫模型 HMM(三)鲍姆-韦尔奇算法求解 HMM 参数

#HMM #HHMM

往年同期文章