CRF(conditional random field,条件随机场)是给定一组输入随机变量条件下另一组输出随机变量的条件概率分布模型,其特点是假设输出随机变量构成马尔科夫随机场。
想要理解CRF模型,需要先对概率图相关概念有所了解,并与HMM(Hidden Markov Model,隐马尔科夫模型)一起比较学习。(本文只解读思想、原理,不涉及求解过程)
I-概率图
在统计概率图(probability graph models)中,各模型的体系结构如下图所示
图由边e和结点v构成,记作G=(V,E)。概率图模型是由图表示的概率分布,假设Y是一组随机变量,其概率分布为P(Y),那么由无向图G=(V,E)表示概率分布P(Y)时,V表示的就是随机变量yi∈Y,E表示的是随机变量间的概率依赖关系。
有向图vs无向图
由上图可以看出图模型分为两类,有向图和无向图。有向图适合为有单向依赖的数据建模,无向图适合实体之间互相依赖的建模。他们的核心差异在于如何求P(Y),即怎么表示随机变量Y的概率分布。
-
有向图
对于有向图模型,联合概率的求解为
P ( x q , x 2 , . . . , x n ) = ∏ i = 0 P ( x i ∣ π ( x i ) ) P(x_q,x_2,...,x_n)=\prod_{i=0}P(x_i|\pi(x_i)) P(xq,x2,...,xn)=i=0∏P(xi∣π(xi))
举例如下图的联合概率为P ( x 1 , . . . , x 5 ) = P ( x 1 ) ⋅ P ( x 2 ∣ x 1 ) ⋅ P ( x 3 ∣ x 2 ) ⋅ P ( x 4 ∣ x 2 ) ⋅ P ( x 5 ∣ x 3 , x 4 ) P(x_1,...,x_5)=P(x_1)\cdot P(x_2|x_1)\cdot P(x_3|x_2)\cdot P(x_4|x_2)\cdot P(x_5|x_3,x_4) P(x1,...,x5)=P(x1)⋅P(x2∣x1)⋅P(x3∣x2)⋅P(x4∣x2)⋅P(x5∣x3,x4)
-
无向图
对于无向图,一般均指马尔科夫网络。在求解其概率分布前,需要先明确几个有关马尔科夫网络的基本定义。
马尔科夫假设
马尔科夫假设指出,在某些情况下,当前状态的条件概率分布仅依赖于前一个状态,而与更早的状态无关。即
P ( x t + 1 ∣ x t , x t − 1 , . . . , x 1 ) = P ( x t + 1 ∣ x t ) P(x_{t+1}|x_t,x_{t-1},...,x_1)=P(x_{t+1}|x_t) P(xt+1∣xt,xt−1,...,x1)=P(xt+1∣xt)
马尔科夫性马尔科夫性是指无向图表示的随机变量之间存在的性质,其分为成对马尔科夫性、局部马尔科夫性和全局马尔科夫性。
-
成对马尔科夫性:在给定其他所有节点的条件下,两个节点u和v之间的关系仅取决于它们之间的直接连接,而与其他节点无关。
P ( u , v ∣ O ) = P ( u ∣ O ) ⋅ P ( v ∣ O ) P(u,v|O)=P(u|O)\cdot P(v|O) P(u,v∣O)=P(u∣O)⋅P(v∣O) -
局部马尔科夫性:给定节点v,W是与o有边连接的所有节点,O是其他节点,局部马尔科夫性是指给定W的条件下,v与O内的结点是独立的,即
P ( v ∣ W ) = P ( v ∣ W , O ) P(v|W)=P(v|W,O) P(v∣W)=P(v∣W,O)
-
全局马尔科夫性:在给定所有其他节点的条件下,任意节点的状态仅取决于其父节点的状态,而与其他节点无关。设结点集A、B是被C分隔开的
P ( A , B ∣ C ) = P ( A ∣ C ) ⋅ P ( B ∣ C ) P(A,B|C)=P(A|C)\cdot P(B|C) P(A,B∣C)=P(A∣C)⋅P(B∣C)
团与最大团
无向图G中任何两个节点均有边连接的结点子集称为团,若C是G的一个团,并且不能加进任何一个G的结点使其成为更大的团,则称C为最大团。
有了以上定义,就可以定义概率无向图模型并求解其联合概率分布。
概率无向图模型
设有联合概率分布P(Y),由无向图G=(V,E)表示,在图G中,结点表示随机变量,边表示随机变量之间的依赖关系。如果联合概率分布P(Y)满足成对、局部或全局马尔科夫性,就称此联合概率分布为概率无向图模型或马尔科夫随机场。
设C是概率无向图模型G的最大团,YC表示C对应的随机变量,那么联合概率分布P(Y)为图中所有最大团C上函数ψC(YC)的乘积,即
P ( Y ) = 1 Z ∏ C ψ C ( Y C ) Z = ∑ Y ∏ C ψ C ( Y C ) P(Y)=\frac{1}{Z}\prod_C\psi_C(Y_C) \\ Z=\sum_Y\prod_C\psi_C(Y_C) P(Y)=Z1C∏ψC(YC)Z=Y∑C∏ψC(YC)
Z是规范化因子,为了保证P(Y)构成一个概率分布。势函数ψC(YC)是严格正的,通常定义为指数函数
ψ C ( Y C ) = e − E ( Y C ) = e ∑ k λ k f k ( c , y ∣ c , x ) \psi_C(Y_C)=e^{-E(Y_C)}=e^{\sum_k\lambda_kf_k(c,y|c,x)} ψC(YC)=e−E(YC)=e∑kλkfk(c,y∣c,x)
举例如下图的联合概率为P ( Y ) = 1 Z ( x ) ⋅ ψ 1 ( x 1 , x 3 , x 4 ) ⋅ ψ 2 ( x 2 , x 3 , x 4 ) = 1 Z ( x ) ⋅ e ∑ C ∑ k λ k f k ( y i , y i − 1 , x , i ) P(Y)=\frac{1}{Z(x)}\cdot\psi_1(x_1,x_3,x_4)\cdot\psi_2(x_2,x_3,x_4)=\frac{1}{Z(x)}\cdot e^{\sum_C\sum_k\lambda_kf_k(y_i,y_{i-1},x,i)} P(Y)=Z(x)1⋅ψ1(x1,x3,x4)⋅ψ2(x2,x3,x4)=Z(x)1⋅e∑C∑kλkfk(yi,yi−1,x,i)
-
II-判别式模型vs生成式模型
首先来看一些模型工作的区别:A批模型(SVM、神经网络模型……)和B批模型(NB、LDA……)
-
A批模型:将数据的label,根据所提供的features,进行学习,画出一个比较明显的边界,以判别数据所属类别。
-
B批模型:从训练样本数据中,将所有的数据的分布情况摸透,然后最终确定一个分布,来作为所有的输入数据的分布,并且是一个联合概率分布P(X,Y),X表示数据特征,Y表示标签。预测新的数据属于哪种类别,需要通过模型学习到的分布函数得到,为
P ( Y ∣ X ) = P ( X , Y ) P ( X ) P(Y|X)=\frac{P(X,Y)}{P(X)} P(Y∣X)=P(X)P(X,Y)
通过上述两种类型的模型,可以较为直观的区分出A批对应判别式模型,B批对应生成式模型。
从数学的角度分析,判别式模型是直接对P(Y|X)建模,确定特征X与标签Y的负责映射关系,再inference一批新的sample;生成式模型是对P(X,Y)建模,再inference对新的sample计算P(Y|X),导出Y。
判别式模型特征:
- 对P(Y|X)建模;
- 对所有的样本只构建一个模型,确认总体判别边界;
- 观测到输入什么特征,就预测最可能的label;
- 对数据量要求没生成式的严格,速度也会快,小数据量下准确率也会好些。
生成式模型特征:
- 对P(X,Y)建模;
- 没有什么判别边界,最终选择最优概率的label;
- 中间生成联合分布,并可生成采样数据;
- 包含的信息非常齐全,需要非常充足的数据量以保证采样到了数据本来的面目。
III-序列建模
常见的序列有:时序数据、文本句子、语音数据等,连续的序列在分析时也会先离散化处理。广义下的序列有这些特点:
- 节点之间有关联依赖性/无关联依赖性
- 序列的节点是随机的/确定的
- 序列是线性变化/非线性的
对不同的序列有不同的问题需求,常见的序列建模方法总结有如下:
- 拟合,预测未来走势
- 分类
- 序列标注
IV-HMM
HMM(Hidden Markov Model,隐马尔科夫模型)是一种统计模型,常用于对具有时序结构的数据进行建模和分析,属于生成式模型。
设Q={q1,…,qN}是所有可能状态的集合相当于标签,V={v1,…,vM}是所有可能观测的集合相当于特征,I=(i1,…,iT)是长度为T的隐藏状态序列,O=(o1,…,oT)是对应的观测序列。
HMM的首先学习三要素,即整体数据不同角度的三种概率分布:
- 隐藏状态集Q={q1,…,qN};
- 观测集V={v1,…,vM};
- 状态转移概率矩阵A:A=[aij]NxN,其中aij=P(it+1=qj|it=qi),是在t时刻处于状态qi向t+1时刻状态qj转移的概率;
- 观测概率矩阵B:B=[bij]NxM,其中bij=P(ot=vk|it=qj),是t时刻处于状态qj的条件下生成观测vk的概率;
- 初始状态概率向量π:π=π(i),其中πi=P(i1=qi),是时刻t=1处于状态qi的概率。
HMM概率分布可以用三元符号表示
λ
=
(
A
,
B
,
π
)
\lambda=(A,B,\pi)
λ=(A,B,π)
优点
- 简单性:基于马尔科夫性假设,将序列建模问题简化为对当前状态的建模,使得模型的训练和推断过程相对简单。
- 适用性:适用于多种序列数据的建模和预测任务,如语音识别、手写识别、自然语言处理等。它可以处理具有时序关系的数据,能够捕捉到状态之间的转移和观测之间的依赖性。
- 概率建模:通过对状态序列和观测序列之间的联合概率进行建模,能够提供给定观测序列下各个状态序列的概率分布。这使得HMM在不确定性问题中能够提供概率化的预测结果。
- 应对缺失数据:能够处理观测数据中的缺失情况。通过使用前向-后向算法,HMM可以估计给定缺失观测下的状态概率分布,从而进行预测和填补缺失值。
缺点
- 马尔科夫性假设限制:HMM对于数据分布的假设较为严格,需要满足数据的马尔科夫性质。马尔科夫性假设认为当前状态只依赖于前一个状态,这限制了对更长上下文信息的建模能力。在某些应用场景中,这种局部依赖性假设可能无法捕捉到序列中更复杂的依赖关系。
- 标记偏置问题:由于HMM只考虑当前状态和当前观测之间的关系,标记的预测可能会受到前面错误标记的累积影响,导致错误传播。这限制了HMM在一些精确性要求较高的任务中的性能。
- 特征表示能力有限:HMM在特征表示方面相对简单,主要依赖于局部特征,如当前观测和当前状态。它对于处理复杂的特征关系和非线性关系的能力较弱。
V-CRF
CRF(conditional random field,条件随机场)是给定随机变量X条件下,随机变量Y的马尔科夫随机场。属于判别式模型。
设X、Y为随机变量,Y构成无向图G=(V,E)表示的条件随机场,那么
P
(
Y
v
∣
X
,
Y
w
,
w
≠
v
)
=
P
(
Y
v
∣
X
,
Y
w
,
w
∼
v
)
P(Y_v|X,Y_w,w≠v)=P(Y_v|X,Y_w,w\sim v)
P(Yv∣X,Yw,w=v)=P(Yv∣X,Yw,w∼v)
其中,w~v表示图G中与结点v有边连接的所有结点w,且w≠v,Yv、Yw表示结点对应的随机变量。这种定义是广义的CRF。
通常情况下,CRF专指为序列建模的线性链条件随机场。设X、Y均为线性链表示的随机变量序列,且满足
P
(
Y
i
∣
X
,
Y
1
,
.
.
.
,
Y
i
−
1
,
Y
i
+
1
,
.
.
.
,
Y
n
)
=
P
(
Y
i
∣
X
,
Y
i
−
1
,
Y
i
+
1
)
P(Y_i|X,Y_1,...,Y_{i-1},Y_{i+1},...,Y_n)=P(Y_i|X,Y_{i-1},Y_{i+1})
P(Yi∣X,Y1,...,Yi−1,Yi+1,...,Yn)=P(Yi∣X,Yi−1,Yi+1)
则称P(Y|X)为线性链条件随机场。
定义中未要求X、Y具有相同图结构,现实中一般假设X、Y具有相同图结构。
根据第一部分中提到的概率无向图的联合概率分布,给出线性链条件随机场P(Y|X)的因子分解式,各因子是定义在两个相邻结点(最大团)上的势函数。
P
(
y
∣
x
)
=
1
Z
(
x
)
⋅
e
∑
i
,
k
λ
k
t
k
(
y
i
−
1
,
y
i
,
x
,
i
)
+
∑
i
,
l
μ
l
s
l
(
y
i
,
x
,
i
)
Z
(
x
)
=
∑
y
e
∑
i
,
k
λ
k
t
k
(
y
i
−
1
,
y
i
,
x
,
i
)
+
∑
i
,
l
μ
l
s
l
(
y
i
,
x
,
i
)
P(y|x)=\frac{1}{Z(x)}\cdot e^{\sum_{i,k}\lambda_kt_k(y_{i-1},y_i,x,i)+\sum_{i,l}\mu_ls_l(y_i,x,i)} \\ Z(x)=\sum_ye^{\sum_{i,k}\lambda_kt_k(y_{i-1},y_i,x,i)+\sum_{i,l}\mu_ls_l(y_i,x,i)}
P(y∣x)=Z(x)1⋅e∑i,kλktk(yi−1,yi,x,i)+∑i,lμlsl(yi,x,i)Z(x)=y∑e∑i,kλktk(yi−1,yi,x,i)+∑i,lμlsl(yi,x,i)
其中,tk,sl是特征函数,λk、μl是对应的权值。tk是定义在边上的特征函数,称为转移特征,依赖于当前和前一个位置;sl是定义在结点上的特征函数,称为状态特征,依赖于当前位置。tk,sl都依赖于位置,是局部特征函数。通常情况下,特征函数取值为0或1,满足特征条件时取1,反之取0。
条件随机场还可以由简化形式表示,上述公式中同一特征在边和结点上都有定义,可以对同一特征的各个位置求和,将局部特征转化为全局特征函数。
假设有K1个转移特征,K2个状态特征,记
f
k
(
y
i
−
1
,
y
i
,
x
,
i
)
=
{
t
k
(
y
i
−
1
,
y
i
,
x
,
i
)
k
=
1
,
2
,
.
.
.
,
K
1
s
l
(
y
i
,
x
,
i
)
k
=
K
1
+
l
;
l
=
1
,
2
,
.
.
.
,
K
2
f_k(y_{i-1},y_i,x,i)=\begin{cases} t_k(y_{i-1},y_i,x,i) & k=1,2,...,K_1 \\ s_l(y_i,x,i) & k=K_1+l;l=1,2,...,K_2 \\ \end{cases}
fk(yi−1,yi,x,i)={tk(yi−1,yi,x,i)sl(yi,x,i)k=1,2,...,K1k=K1+l;l=1,2,...,K2
然后对转移与状态特征对各个位置i求和,记作
f
k
(
y
,
x
)
=
∑
i
=
1
n
f
k
(
y
i
−
1
,
y
i
,
x
,
i
)
,
k
=
1
,
2
,
.
.
.
,
K
=
K
1
+
K
2
f_k(y,x)=\sum_{i=1}^nf_k(y_{i-1},y_i,x,i),k=1,2,...,K=K_1+K_2
fk(y,x)=i=1∑nfk(yi−1,yi,x,i),k=1,2,...,K=K1+K2
同理,用wk表示全局特征的权值,即
w
k
=
{
λ
k
k
=
1
,
2
,
.
.
.
,
K
1
μ
l
k
=
K
1
+
l
;
l
=
1
,
2
,
.
.
.
,
K
2
w_k=\begin{cases} \lambda_k & k=1,2,...,K_1 \\ \mu_l & k=K_1+l;l=1,2,...,K_2 \end{cases}
wk={λkμlk=1,2,...,K1k=K1+l;l=1,2,...,K2
于是,条件随机场可以表示为
P
(
y
∣
x
)
=
1
Z
(
x
)
⋅
e
∑
k
=
1
K
w
k
f
k
(
y
,
x
)
Z
(
x
)
=
∑
y
e
∑
k
=
1
K
w
k
f
k
(
y
,
x
)
P(y|x)=\frac{1}{Z(x)}\cdot e^{\sum_{k=1}^Kw_kf_k(y,x)} \\ Z(x)=\sum_ye^{\sum_{k=1}^Kw_kf_k(y,x)}
P(y∣x)=Z(x)1⋅e∑k=1Kwkfk(y,x)Z(x)=y∑e∑k=1Kwkfk(y,x)
若以向量形式表示,则
P
w
(
p
∣
x
)
=
e
w
⋅
F
(
y
,
x
)
Z
w
(
x
)
Z
w
(
x
)
=
∑
y
e
w
⋅
F
(
y
,
x
)
w
=
(
w
1
,
.
.
.
,
w
K
)
T
F
(
y
,
x
)
=
(
f
1
(
y
,
x
)
,
.
.
.
,
f
K
(
y
,
x
)
)
T
P_w(p|x)=\frac{e^{w\cdot F(y,x)}}{Z_w(x)} \\ Z_w(x)=\sum_ye^{w\cdot F(y,x)} \\ w=(w_1,...,w_K)^T \\ F(y,x)=(f_1(y,x),...,f_K(y,x))^T
Pw(p∣x)=Zw(x)ew⋅F(y,x)Zw(x)=y∑ew⋅F(y,x)w=(w1,...,wK)TF(y,x)=(f1(y,x),...,fK(y,x))T
优点
- 全局特征建模:CRF能够建模全局特征,即整个观测序列和标记序列之间的关系。与HMM只考虑当前观测和当前标记的关系不同,CRF通过考虑整个序列的上下文信息,能够捕捉更长的相关性,提供更准确的预测。
- 标记偏置问题:在HMM中,标记的预测依赖于前一个时刻的标记,导致标记序列的预测结果可能会受到错误的累积影响。CRF模型通过引入全局特征和使用归一化因子来进行标记的联合归一化,有效地解决了这个问题。
以BiLSTM-CRF模型为例解读CRF工作原理
以命名实体识别任务为例,假设数据集中包含5类标签:{B-Person,I-Person,B-Organization,I-Organization,O}。
输入为W=(w0,w1,w2,w3,w4),其对应的标签为Y=(B-Person,I-Person,O,B-Organization,O)。模型工作过程如图所示
如上图所示,BiLSTM层的输出表示该单词对应各个类别的分数,这些分数会作为CRF层的输入。
如果没有CRF层,结果为
BiLSTM模型的结果是单词对应各类别的分数,我们可以选择分数最高的类别作为预测结果。在这个例子中预测结果是正确的。
但实际应用中,还有可能出现下图情况
可以看到,结果显然是不合理的,I-Organization标签后的文字不可能属于I-Person标签。
CRF层的作用就是为标签之间增加一些约束,来保证最终预测结果是合理的,这些约束通过模型学习得到。比如,约束可能为:
-
句子开头应是B或O,不可能是I;
-
B-Person后应该是I-Person,而不可能是I-Organization;
……
CRF层中的损失函数包括两种类型的分数,而理解这两类分数的计算是理解CRF的关键。
-
状态分数
状态分数来自BiLSTM层的输出。
给标签一个类别索引,Y=(B-Person:0,I-Person:1,B-Organization:2,I-Organization:3,O:4)。
i表示单词位置索引,根据图,那么单词w1被预测为B-Organization的状态分数为
x i , y j = x w 1 , y 2 = 0.1 x_{i,y_j}=x_{w_1,y_2}=0.1 xi,yj=xw1,y2=0.1 -
转移分数
转移分数即标签之间相连的分数。
假设标签B−Person转移到I−Person的分数为0.9,那么记作
t y i , y j = t y 0 , y 1 = 0.9 t_{y_i,y_j}=t_{y_0,y_1}=0.9 tyi,yj=ty0,y1=0.9
因此,可以获得一个所有类别间的转移分数矩阵。为了使转移分数矩阵更具鲁棒性,加上START和END两类标签,分别表示句子开始和结束。上例的转移分数矩阵如图
模型学习到这两种分数后,进行损失计算,计算这个句子所有可能的标签预测顺序路径的分数,分数最高的路径作为输出。
一个包含5个单词的句子,可能的类别序列如下:
-
START B-Person B-Person B-Person B-Person B-Person END
-
START B-Person I-Person B-Person B-Person B-Person END
-
START B-Person I-Person O B-Organization O END – 正确路径
……
损失函数为
L
o
s
s
=
P
r
e
a
l
∑
i
P
i
P
i
=
e
S
i
S
i
=
e
m
i
s
s
i
o
n
_
s
c
o
r
e
+
t
r
a
n
s
i
t
i
o
n
_
s
c
o
r
e
Loss=\frac{P_{real}}{\sum_i P_i} \\ P_i=e^{S_i} \\ S_i=emission\_score+transition\_score
Loss=∑iPiPrealPi=eSiSi=emission_score+transition_score
其中,每条路径的分数Pi为状态分数与转移分数的加和。
训练好一个模型后,就可以inference一个新的句子。求解过程通常采用Viterbi算法,得出标签路径。