序列标注

隐马尔可夫模型与CRF:序列标注的统计学习基础

Posted by CloudingYu on April 3, 2026

一、序列建模问题的核心挑战

序列建模连接了传统统计序列模型和深度学习序列模型两大范式。

1.1 序列标注任务的普遍性

之前已经把中文分词(Chinese Word Segmentation)转成了序列标注(sequence labeling)问题:输入一个可观察序列,输出一个标签序列。这种建模方式非常普遍,例如:

  • 金融交易序列:输出买入/卖出/持有动作。
  • 游戏视频流:输出按键动作序列。
  • 自动驾驶视频:输出控制决策。
  • 中文分词:输出 BIES 标签。

1.2 序列建模的三大困难

所有后续模型设计,本质上都在解决下面三个问题:

  1. 可变长度建模:输入长度不固定,模型不能只支持定长序列。
  2. 长程依赖(long-range dependency):远处历史可能决定当前预测。
  3. 多周期信号叠加:真实时间序列里往往同时存在短周期和长周期结构,需要模型提取 underlying pattern。

总结:序列模型最难的,不是把一个序列输进去,而是要抓住信号背后真正稳定的模式。

二、隐马尔可夫模型的基本思想

2.1 隐马尔可夫模型(Hidden Markov Model, HMM)

以 Crazy Soft Drink Machine 为例:我们只能看到机器吐出来的饮料,却看不到它内部的偏好状态,这就是 HMM 的基本结构:

  • 有一个隐状态序列 $H_1,H_2,\ldots,H_T$。
  • 有一个观测序列 $O_1,O_2,\ldots,O_T$。
  • 当前状态决定下一个状态如何转移。
  • 当前状态决定当前观测如何生成。

2.2 生成模型与判别模型

HMM 是一个生成模型(generative model)。判断生成模型的标准非常简单:

能不能”造样本”。能造样本就是生成模型,不能造就是判别模型。

HMM 之所以能生成,是因为给定参数后:

  1. 先从初始分布 $\pi$ 采样第一个隐状态;
  2. 根据当前状态从发射分布采样观测;
  3. 再根据状态转移概率采样下一个隐状态;
  4. 如此反复,就能模拟整台机器的运行。

生成模型的好处是:当标注数据少时,它有机会通过建模联合分布来利用更多结构信息;代价是模型假设更强,表达能力会受限。

2.3 马尔可夫性与变长能力

HMM 的两个核心性质:

  1. 天然支持变长序列。只要状态转移和发射机制在,序列长短并不会破坏模型定义。
  2. 满足马尔可夫性(Markov Property):
\[P(H_{t+1}\mid H_t,H_{t-1},\ldots,H_1)=P(H_{t+1}\mid H_t)\]

它的好处是极大简化统计建模;坏处是它无法显式聚合长历史

关键:马尔可夫性本质上就是”只看当前,不看更早”。这在当年是为了让问题可解,但也直接限制了模型能力。

2.4 HMM 的五元组定义

HMM 的标准形式是:

\[\text{HMM}=(S,V,\pi,A,B)\]

其中:

  • $S$:隐状态集合;
  • $V$:观测字母表;
  • $\pi$:初始状态分布;
  • $A$:状态转移矩阵,$A_{ij}=P(H_{t+1}=j\mid H_t=i)$;
  • $B$:发射概率矩阵,$B_j(o)=P(O_t=o\mid H_t=j)$。

注意:真正建模时,状态数本身就是一个超参数,因为隐状态根本看不见,只能由我们假设。

三、HMM 的三个经典问题

3.1 评估问题(Evaluation)

给定观测序列 $O=(o_1,\ldots,o_T)$,计算它由模型生成的概率:

\[P(O\mid \lambda)\]

如果暴力枚举所有可能的隐状态序列,复杂度会指数爆炸,因此必须使用动态规划。

3.2 解码问题(Decoding)

给定观测序列,求最可能的隐状态序列:

\[H^*=\arg\max_H P(H,O\mid \lambda)\]

这就是”我看到了表面现象,最合理的内部解释是什么”。

3.3 学习问题(Learning)

给定大量观测序列,在隐状态不可见的情况下估计参数:

\[\lambda=(\pi,A,B)\]

这对应的是”机器内部规则不知道,但我能不能从大量样本里把规则反推出来”。

四、前向-后向算法与 Viterbi 解码

4.1 前向算法(Forward Algorithm)

定义前向量:

\[\alpha_t(j)=P(o_1,\ldots,o_t,H_t=j\mid\lambda)\]

它表示:到时刻 $t$ 为止,已经观测到前 $t$ 个符号,且当前处于状态 $j$ 的联合概率。

初始化:

\[\alpha_1(j)=\pi_j\,B_j(o_1)\]

递推:

\[\alpha_t(j)=\left(\sum_i \alpha_{t-1}(i)A_{ij}\right)B_j(o_t)\]

终止:

\[P(O\mid\lambda)=\sum_j \alpha_T(j)\]

前向算法的本质是复用前面已经算过的部分结果,因此复杂度从指数级降到多项式级。

4.2 后向算法(Backward Algorithm)

定义后向量:

\[\beta_t(i)=P(o_{t+1},\ldots,o_T\mid H_t=i,\lambda)\]

递推为:

\[\beta_t(i)=\sum_j A_{ij}B_j(o_{t+1})\beta_{t+1}(j)\]

后向算法并不是用来替代前向算法,而是和前向算法一起,为后面的状态后验概率计算EM 学习服务。

4.3 Viterbi 解码

Viterbi 的思想与前向算法很像,但”求和”被改成了”取最大值”。定义:

\[\delta_t(j)=\max_{H_1,\ldots,H_{t-1}} P(H_1,\ldots,H_{t-1},H_t=j,o_1,\ldots,o_t\mid\lambda)\]

递推公式:

\[\delta_t(j)=\left(\max_i \delta_{t-1}(i)A_{ij}\right)B_j(o_t)\]

同时记录回溯指针:

\[\psi_t(j)=\arg\max_i \delta_{t-1}(i)A_{ij}\]

最后从终点反向回溯,就能得到最优隐状态路径。

总结:前向算法是在做”概率求和”,Viterbi 是在做”最优路径选择”。两者图长得很像,但目标完全不同。

五、EM 算法与 HMM 学习

5.1 为什么需要 EM

如果隐状态可见,参数统计非常直接;但 HMM 的困难在于状态是隐藏的。所以我们需要在”估计隐状态”和”更新参数”之间反复迭代,这就是 EM 算法(Expectation-Maximization)。

5.2 E 步:估计隐变量后验

前向-后向算法可以帮助我们计算:

\[\gamma_t(i)=P(H_t=i\mid O,\lambda)\]

以及相邻状态联合后验:

\[\xi_t(i,j)=P(H_t=i,H_{t+1}=j\mid O,\lambda)\]

这些量可以理解为:在当前参数下,模型认为某个状态、某次转移”大概出现了多少次”。

5.3 M 步:重新估计参数

得到期望计数以后,就可以重新归一化更新参数:

\[\pi_i=\gamma_1(i)\] \[A_{ij}=\frac{\sum_{t=1}^{T-1}\xi_t(i,j)}{\sum_{t=1}^{T-1}\gamma_t(i)}\] \[B_j(o)=\frac{\sum_{t:o_t=o}\gamma_t(j)}{\sum_{t=1}^T \gamma_t(j)}\]

这就是 HMM 中著名的 Baum-Welch 学习过程,本质上是 HMM 上的 EM。

5.4 硬版本 EM:Viterbi Training

还有一种更简单的思路:不用软后验,而是直接用当前最优路径做近似更新。这可以理解为一种 hard EM,实现简单,但比标准 Baum-Welch 更粗糙。

六、HMM 在中文分词与语音识别中的应用

6.1 中文分词

把 HMM 用到中文分词时:

  • 观测序列:字序列;
  • 隐状态:BIES 标签;
  • 状态转移:如 B→II→E 等;
  • 发射概率:某个标签生成某个字的概率。

这种建模方式让中文分词第一次系统地进入统计学习框架。但必须承认:单纯 HMM 在中文分词上的性能并不强,因为它的独立性假设太重,可用特征太少。

6.2 语音识别

HMM 对语音识别的历史意义极大,原因有两点:

  1. 语音是天然的变长序列,一个字或一个词持续时间并不固定。
  2. HMM 可以通过状态自循环描述时长变化,因此非常适合早期语音建模。

在经典语音识别系统里,HMM 通常与声学模型、语言模型一起组成完整系统。可以说:没有 HMM,就没有很长一段时期里的现代语音识别工业体系

七、从 HMM 到 CRF:为什么需要判别式序列模型

7.1 HMM 的主要局限

HMM 的问题主要有三类:

  1. 马尔可夫假设太强,只看当前状态。
  2. 发射独立性假设太强,难以融入丰富上下文。
  3. 作为生成模型,它为了建联合分布,牺牲了不少判别能力。

7.2 标签偏置(Label Bias)问题

从局部归一化(local normalization)的角度看,某些模型在每个局部状态都单独做概率归一化,这会导致:

  • 一旦某个状态的转移分布被局部归一化,它对后续观测的纠错能力就有限;
  • 出边少的状态可能天然占便宜;
  • 模型会更关注”局部转移合法”,而不是整条路径全局最优。

这就是提到的 Label Bias 问题。

7.3 条件随机场(Conditional Random Field, CRF)

CRF 是一个判别模型(discriminative model),直接建模条件概率 $P(Y\mid X)$,不再强求去生成观测:

\[P(Y\mid X)=\frac{1}{Z(X)}\exp\!\left(\sum_k \lambda_k f_k(X,Y)\right)\]

其核心优势:

  1. 全局归一化(global normalization),整条序列统一打分。
  2. 可引入丰富特征,不必受 HMM 那种强生成假设约束。
  3. 在小数据、强特征工程场景里非常有效。

关键:CRF 的关键贡献不只是”换了个模型”,而是把”整条路径统一评分”这件事做对了。

7.4 特征模板与特征工程

CRF 的强大很大程度上来自特征模板(feature template)。例如,我们可以定义:

  • 当前字是什么;
  • 前一个字、后一个字是什么;
  • 当前字与相邻字的组合;
  • 当前状态、前一状态的组合特征。

但它的代价也很明显:

  1. 模板一长,特征空间就爆炸。
  2. 需要大量人工试错。
  3. 一个中文分词任务,历史上研究者可能为它堆出好几页模板。
  4. 模型性能往往非常依赖人类设计的模板质量。

这正是后面深度学习兴起的直接动机之一:我们不想再手工穷举模板,希望网络自己学出有效表征。

八、课程主线总结

本章的主线可以概括成四句话:

  1. HMM 让序列问题第一次有了比较系统的统计建模框架。
  2. 前向、后向、Viterbi、EM 共同构成了 HMM 的核心算法体系。
  3. HMM 在中文分词和语音识别里都留下了深远影响。
  4. 但由于独立性假设、局部归一化和特征贫弱等问题,人们自然走向了 CRF,再进一步走向深度学习。

核心观点:理解 HMM,不是因为今天还要大量手写 HMM,而是因为后面很多模型的设计,都是在修它的短板。