隐马尔可夫模型

介绍隐马尔可夫模型的基本概念,包括模型定义、核心假设、示例应用及三个基本问题等内容

基本定义

隐马尔可夫模型(Hidden Markov Model, HMM)是用于描述带有隐含状态序列的随机过程的概率模型,其核心在于: 观察到的序列由未观测的隐状态序列生成,而隐状态之间满足马尔可夫性质。

HMM 的形式化定义(五元组)

一个 HMM 可表示为五元组 λ=(Y,X,Π,A,B)\lambda = (Y, X, \Pi, A, B):

  • YY:隐状态集合(如词性标签)
  • XX:观测值集合(如单词)
  • Π\Pi:初始状态分布
  • AA:状态转移概率矩阵
  • BB:观测概率矩阵(生成单词的概率)

联合概率可写为

p(y⃗,x⃗)=∏i=1np(yi∣yi−1)p(xi∣yi)p (\vec {y}, \vec {x}) = \prod_{i=1}^n p (y_i|y_{i-1}) p (x_i|y_i)

三个核心假设

  • 马尔可夫性:p(yt∣y1:t−1)=p(yt∣yt−1)p (y_t|y_{1:t-1}) = p (y_t|y_{t-1})
  • 齐次性(不动性):转移概率与时间无关
  • 输出独立性:xtx_t 仅依赖 yty_t

这些假设使模型可 tractable 地进行推断与训练

示例:词性标注任务中的 HMM

以句子 “Time flies quickly” 为例,目标是推断最可能的词性序列 S=(N,V,ADV)S = (\text{N}, \text{V}, \text{ADV})

(1)初始状态概率 Π\Pi

句子开头每个词性的概率:

P(S1=N)=0.6,P(S1=V)=0.3,P(S1=ADV)=0.1P (S_1=N)=0.6,\quad P (S_1=V)=0.3,\quad P (S_1=ADV)=0.1

(2)状态转移概率 AA

词性之间的转移概率:

P(St=V∣St−1=N)=0.5,P(St=N∣St−1=N)=0.3P (S_t = V \mid S_{t-1} = N)=0.5,\quad P (S_t = N \mid S_{t-1} = N)=0.3

(3)观测概率 BB

隐藏状态生成观测单词的概率:

P(Ot="Time"∣St=N)=0.8,P(Ot="flies"∣St=V)=0.7P (O_t=\text{"Time"} \mid S_t=N)=0.8,\quad P (O_t=\text{"flies"} \mid S_t=V)=0.7

求最优词性序列:维特比算法(Viterbi Algorithm)

维特比算法通过动态规划求解最大概率的隐状态路径

(1)构建动态规划表

  • 行:各隐状态
  • 列:各观测词
  • 单元格:到当前位置的最佳路径概率及其前驱状态

(2)初始化

以 “Time” 为例:

V1(N)=π(N)⋅B(N,"Time")=0.6⋅0.8=0.48V_1 (N)=\pi (N)\cdot B (N,\text{"Time"}) = 0.6 \cdot 0.8 = 0.48

(3)递推

例如计算第二个词 “flies” 的动词状态:

V2(V)=max⁡S1[V1(S1)⋅A(S1→V)]⋅B(V,"flies")V_2 (V)=\max_{S_1}\big [V_1 (S_1)\cdot A (S_1\to V)\big]\cdot B (V,\text{"flies"})

(4)回溯

根据记录的最优前驱状态重建整条最优路径,最终输出最可能的词性序列:

S=(N,V,ADV)S = (\text{N}, \text{V}, \text{ADV})

HMM 的三个基本问题

(1)评估问题

  • 目标:计算序列出现概率 P(O∣λ)P (O\mid\lambda)
  • 方法:前向算法 / 后向算法
  • 示例:给定音频序列,判断是否属于某个单词模型

(2)解码问题

  • 目标:找到概率最大的隐状态序列

    arg⁡max⁡QP(Q∣O,λ)\arg\max_Q P (Q\mid O,\lambda)
  • 方法:维特比算法

  • 示例:词性标注任务:给定一个句子的单词序列(如 "Time flies quickly"),找到对应的最可能的词性序列(如 "Noun, Verb, Adverb")

(3)学习问题

  • 目标:对于给定观察值序列 OO,调整参数 λ\lambda,使得观察值出现的概率 P(O∣λ)P (O|\lambda) 最大
  • 方法:Baum–Welch 算法(EM 方法的一种)
  • 示例:如 DNA 序列分析:给定一组 DNA 序列(观测序列),学习模型参数以区分不同的区域类型(隐藏状态,例如基因编码区和非编码区)
这篇文档有帮助吗?

On this page

页面信息