上一篇讲的 HMM 是一个有向图模型:隐状态 yt "生成"观测 xt,前一个隐状态 "生成" 下一个隐状态,箭头表示因果方向。这种建模方式天然地定义了联合概率 P(x,y)。
但换一个视角:如果不去建模"谁生成谁",而是直接描述变量之间的关联呢?这就引出了概率无向图模型(Markov Random Field, MRF),也叫马尔可夫随机场。
一个无向图 G=(V,E) 中,节点代表随机变量,无向边表示两个变量之间的直接依赖关系。图中没有箭头——不再区分"谁影响谁"。
团(clique):图中任意两个节点之间都有边的完全子图。最大团:不能再加入任何节点的团。
概率无向图模型的核心定理——Hammersley-Clifford 定理告诉我们:满足正则条件的概率分布 P(Y) 可以分解为最大团上的势函数之积:
P(Y)=Z1c∈C∏Ψc(Yc)
其中 C 是所有最大团的集合,Ψc(Yc)≥0 是定义在团 c 上的势函数(potential function),Z 是归一化常数(配分函数):
Z=Y∑c∈C∏Ψc(Yc)
和有向图的条件概率相乘不同,无向图用势函数相乘再归一化。势函数不需要是概率,只要非负即可。
概率无向图模型有三种等价的马尔可夫性:
- 成对马尔可夫性:没有边相连的两个节点,在给定其余所有节点后条件独立。
- 局部马尔可夫性:每个节点在给定其邻居节点后,与所有其他节点条件独立。
- 全局马尔可夫性:被节点集 C 分隔的两个节点集 A,B,在给定 C 后条件独立。
这些性质直观上就是"信息只能通过边传递"——如果两个节点之间的所有路径都被阻断了(条件化的节点挡住了),它们就独立了。
CRF 的核心想法很简单:不去建模 P(x,y),而是直接建模 P(y∣x)。
设 X 和 Y 是随机变量,P(Y∣X) 由无向图 G=(V,E) 表示。如果在给定 X 的条件下,Y 的分布满足马尔可夫性:
P(Yv∣X,Yw,w=v)=P(Yv∣X,Yw,w∼v)
其中 w∼v 表示 w 和 v 在图中相邻,那么 (X,Y) 构成一个条件随机场。
直觉:每个标签 Yv 的取值只直接依赖它在图中的邻居标签——但注意,它可以依赖整个输入序列 X。
在序列标注问题中,G 是最简单的线性链结构:Y1−Y2−⋯−Yn。此时最大团是相邻两个标签 (Yt−1,Yt),CRF 定义为:
P(y∣x)=Z(x)1exp(t=1∑Tk∑λkfk(yt−1,yt,x,t))
其中归一化因子为:
Z(x)=y∑exp(t=1∑Tk∑λkfk(yt−1,yt,x,t))
这里的 fk 就是特征函数——CRF 最核心的设计。特征函数分两类:
转移特征 tk(yt−1,yt,x,t):刻画相邻标签之间的关系。
例如:
t1(yt−1,yt,x,t)={1,0,如果 yt−1=B,yt=I其他
"B 标签后面跟 I 标签"——在命名实体识别中,实体的开始(B)后面通常跟着实体的延续(I),这个特征的权重 λ1 应该学出一个正值。
状态特征 sk(yt,x,t):刻画标签与观测之间的关系。
例如:
s1(yt,x,t)={1,0,如果 yt=B,xt="北京"其他
"当前词是'北京'且标签是 B"——地名很可能是实体的开头。
把两类统一写成 fk,对应的权重统一记为 λk。线性链 CRF 的参数化可以简写为:
P(y∣x)=Z(x)1exp(k=1∑KλkFk(y,x))
其中 Fk(y,x)=∑t=1Tfk(yt−1,yt,x,t) 是特征 k 在整个序列上的累加。
在下面的交互图中切换 HMM 和 CRF,直观感受有向图与无向图的结构差异。
生成式模型:P(x,y) = P(y) P(x|y)
HMM:有向图模型。箭头表示因果/生成关系——隐状态生成观测,前一个隐状态生成下一个。 每个观测 x_t 只能看到当前隐状态 y_t(观测独立假设)。
HMM 和 CRF 都用来做序列标注,但它们的哲学截然不同。
| HMM | CRF |
|---|
| 图结构 | 有向图 | 无向图 |
| 建模目标 | 联合概率 P(x,y) | 条件概率 P(y∣x) |
| 模型类型 | 生成式模型 | 判别式模型 |
| 观测假设 | P(xt∣yt),每个观测只看当前隐状态 | fk(yt−1,yt,x,t),特征可以依赖整个 x |
| 参数含义 | 转移概率 aij,发射概率 bi(k) | 特征函数权重 λk |
| 独立假设 | 观测独立假设(强) | 无观测独立假设(弱) |
| 特征灵活性 | 受限——只能用离散观测 | 任意特征函数,包括上下文窗口、词形、前后缀 |
| 归一化 | 局部归一化(每个条件概率独立归一化) | 全局归一化(整个序列一起归一化) |
1. 打破观测独立假设
HMM 假设 xt 只依赖 yt。这意味着做词性标注时,当前词的标签不能参考前一个词是什么。但在真实语言中,"我 / 吃 / 了 / 苹果"——"苹果"是名词还是专有名词,很大程度上取决于前面是"吃"还是"买了个"。
CRF 的特征函数可以写成 f(yt,xt−2,xt−1,xt,xt+1)——随便看上下文。
2. 全局归一化避免标签偏置
HMM 在每一步独立归一化(∑jaij=1,∑kbi(k)=1)。这可能导致标签偏置问题(label bias problem):转出边少的状态会把概率集中在少数几个后继上,不管观测是什么。
CRF 对整个序列做一次归一化,不存在这个问题。
3. HMM 是 CRF 的特例
可以证明:对任意 HMM,都存在一个参数等价的 CRF,使得两者定义相同的条件概率 P(y∣x)。反之不成立——CRF 严格比 HMM 表达能力更强。
具体地,取 CRF 的特征函数为:
fij(yt−1,yt)=1[yt−1=i,yt=j],λij=logaij
fik(yt,xt)=1[yt=i,xt=k],λik=logbi(k)
代入 CRF 公式就能还原 HMM 的条件概率。但 CRF 允许更丰富的特征,所以 HMM ⊂ CRF。
CRF 的学习目标很直接:给定训练数据 {(x(i),y(i))}i=1N,最大化条件对数似然。
L(λ)=i=1∑NlogP(y(i)∣x(i))=i=1∑N[k∑λkFk(y(i),x(i))−logZ(x(i))]
CRF 的对数似然是凸函数——这是判别式模型的一大优势,意味着不会有局部最优的问题。
对第 k 个参数求梯度:
∂λk∂L=i=1∑N[Fk(y(i),x(i))−EP(y∣x(i))[Fk(y,x(i))]]
这个梯度的结构非常漂亮:观测到的特征值 - 模型期望的特征值。
- 第一项是特征在真实标注序列上的值——直接数就行。
- 第二项是特征在当前模型下的期望——需要对所有可能的标签序列求和。
梯度为零时,模型的特征期望等于经验特征值——这正是最大熵原理的体现。
第二项中的期望涉及对所有 y 求和,直接枚举不可行(NT 种序列)。和 HMM 一样,用前向-后向算法来高效计算。
定义矩阵形式。对每个位置 t,定义 N×N 矩阵 Mt(x):
Mt(yt−1,yt∣x)=exp(k∑λkfk(yt−1,yt,x,t))
那么归一化因子可以写成矩阵连乘:
Z(x)=1⊤(t=1∏TMt(x))1
前向向量 αt 和后向向量 βt 的递推:
αt⊤=αt−1⊤Mt(x),α0=1
βt=Mt+1(x)βt+1,βT+1=1
利用前向-后向向量,可以得到位置 t 上标签对 (yt−1,yt) 的边缘概率:
P(yt−1,yt∣x)=Z(x)αt−1(yt−1)⋅Mt(yt−1,yt∣x)⋅βt(yt)
特征 fk 的期望就可以用这些边缘概率高效计算:
E[Fk(y,x)]=t=1∑Tyt−1,yt∑P(yt−1,yt∣x)⋅fk(yt−1,yt,x,t)
整个前向-后向过程的时间复杂度是 O(N2T),和 HMM 一样。
有了梯度之后,可以用各种优化算法。实践中常用的是拟牛顿法(L-BFGS),因为 CRF 的参数空间通常很大(几万甚至几十万个特征),L-BFGS 只需要存储最近几步的梯度信息就能近似二阶信息,比普通梯度下降收敛快得多。
也可以加正则化防止过拟合。L2 正则化等价于给参数加高斯先验:
Lreg(λ)=L(λ)−2σ21k∑λk2
L1 正则化可以产生稀疏解——让大多数特征权重为零,相当于自动做特征选择。
训练好 CRF 后,对新的输入序列 x,要找最优标签序列:
y∗=argymaxP(y∣x)=argymaxt=1∑Tk∑λkfk(yt−1,yt,x,t)
因为 exp 是单调函数,最大化概率等价于最大化指数上的线性得分——不需要算 Z(x)。
这个问题的结构和 HMM 的解码问题完全一样:在一个格(trellis)上找一条得分最高的路径。解法就是维特比算法。
定义:
δt(j)=y1,…,yt−1maxτ=1∑tk∑λkfk(yτ−1,yτ,x,τ),s.t. yt=j
递推:
δt(j)=imax[δt−1(i)+k∑λkfk(i,j,x,t)]
ψt(j)=argimax[δt−1(i)+k∑λkfk(i,j,x,t)]
终止和回溯:
yT∗=argjmaxδT(j)
yt∗=ψt+1(yt+1∗),t=T−1,…,1
| HMM 维特比 | CRF 维特比 |
|---|
| 操作空间 | 概率(乘法) | 得分(加法) |
| 递推 | δt(j)=maxi[δt−1(i)⋅aij]⋅bj(ot) | δt(j)=maxi[δt−1(i)+score(i,j,x,t)] |
| 需要 Z | 不需要(找 max 不受归一化影响) | 不需要 |
| 复杂度 | O(N2T) | O(N2T) |
本质上是同一个算法,只是 HMM 在概率域做乘法(或者取对数后变成加法),CRF 直接在得分域做加法。如果把 HMM 的 logaij+logbj(ot) 看作 CRF 的特征得分,两者完全等价。