什么是条件随机场?
条件随机场(Conditional Random Fields, 以下简称CRF)是给定一组输入序列条件下另一组输出序列的条件概率分布模型,在自然语言处理中得到了广泛应用,比如常见的分词、词性标注、实体识别均有CRF的身影,下面层层刨析,解开其真面目。
随机场
首先,我们来看看什么是随机场。“随机场”的名字取的很玄乎,其实理解起来不难。随机场是由若干个位置组成的整体,当给每一个位置中按照某种分布随机赋予一个值之后,其全体就叫做随机场。还是举词性标注的例子:假如我们有一个十个词形成的句子需要做词性标注。这十个词每个词的词性可以在我们已知的词性集合(名词,动词…)中去选择。当我们为每个词选择完词性后,这就形成了一个随机场。
条件随机场
了解了随机场,我们再来看看马尔科夫随机场。马尔科夫随机场是随机场的特例,它假设随机场中某一个位置的赋值仅仅与和它相邻的位置的赋值有关,和与其不相邻的位置的赋值无关。继续举十个词的句子词性标注的例子: 如果我们假设所有词的词性只和它相邻的词的词性有关时,这个随机场就特化成一个马尔科夫随机场。比如第三个词的词性除了与自己本身的位置有关外,只与第二个词和第四个词的词性有关。
理解了马尔科夫随机场,再理解CRF就容易了。CRF是马尔科夫随机场的特例,它假设马尔科夫随机场中只有XX和YY两种变量,XX一般是给定的,而YY一般是在给定XX的条件下我们的输出。这样马尔科夫随机场就特化成了条件随机场。在我们十个词的句子词性标注的例子中,XX是词,YY是词性。因此,如果我们假设它是一个马尔科夫随机场,那么它也就是一个CRF。
下面用数学语言表示就是:
设
X
=
(
X
1
,
X
2
,
.
.
.
X
n
)
,
Y
=
(
Y
1
,
Y
2
,
.
.
.
Y
n
)
X =(X_1,X_2,...X_n),\;\;Y=(Y_1,Y_2,...Y_n)
X=(X1,X2,...Xn),Y=(Y1,Y2,...Yn)均为随机变量序列,在给定随机变量序列
X
X
X的情况下,随机变量
Y
Y
Y的条件概率分布
P
(
Y
∣
X
)
P(Y|X)
P(Y∣X)构成条件随机场,即满足马尔科夫性:
P
(
Y
i
∣
X
,
Y
1
,
Y
2
,
.
.
.
Y
n
)
=
P
(
Y
i
∣
X
,
Y
i
−
1
,
Y
i
+
1
)
P(Y_i|X,Y_1,Y_2,...Y_n) = P(Y_i|X,Y_{i-1},Y_{i+1})
P(Yi∣X,Y1,Y2,...Yn)=P(Yi∣X,Yi−1,Yi+1)
则称
P
(
Y
∣
X
)
P(Y|X)
P(Y∣X)为条件随机场。
CRF的参数化形式
上文中从理论层面讲述了CRF,那如果用数学符号来表示又该如何呢?CRF是通过特征函数和其权重系数来定义的,下面分别讲解。
特征函数
在CRF中,特征函数分为两类,第一类是定义在
Y
Y
Y节点上的节点特征函数,这类特征函数只和当前节点有关,记为:
s
l
(
y
i
,
x
,
i
)
,
l
=
1
,
2
,
.
.
.
L
s_l(y_i, x,i),\;\; l =1,2,...L
sl(yi,x,i),l=1,2,...L
其中
L
L
L是定义在该节点的节点特征函数的总个数,
i
i
i是当前节点在序列的位置。第二类是定义在
Y
Y
Y上下文的局部特征函数,这类特征函数只和当前节点和上一个节点有关,记为:
t
k
(
y
i
−
1
,
y
i
,
x
,
i
)
,
k
=
1
,
2
,
.
.
.
K
t_k(y_{i-1},y_i, x,i),\;\; k =1,2,...K
tk(yi−1,yi,x,i),k=1,2,...K
其中
K
K
K是定义在该节点的局部特征函数的总个数,
i
i
i是当前节点在序列的位置。之所以只有上下文相关的局部特征函数,没有不相邻节点之间的特征函数,是因为我们的CRF满足马尔科夫性。值得注意的是:无论是节点特征函数还是局部特征函数,它们的取值只能是0或者1。即满足特征条件或者不满足特征条件。同时,我们可以为每个特征函数赋予一个权值,用以表达我们对这个特征函数的信任度。假设
t
k
t_k
tk的权重系数是
λ
k
λ_k
λk,
s
l
s_l
sl的权重系数是
μ
l
μ_l
μl,则CRF由我们所有的
t
k
,
λ
k
,
s
l
,
μ
l
t_k, \lambda_k, s_l, \mu_l
tk,λk,sl,μl共同决定。
此时我们得到了CRF的参数化形式如下:
P
(
y
∣
x
)
=
1
Z
(
x
)
e
x
p
(
∑
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)}exp\Big(\sum\limits_{i,k} \lambda_kt_k(y_{i-1},y_i, x,i) +\sum\limits_{i,l}\mu_ls_l(y_i, x,i)\Big)
P(y∣x)=Z(x)1exp(i,k∑λktk(yi−1,yi,x,i)+i,l∑μlsl(yi,x,i))
其中,
Z
(
x
)
Z(x)
Z(x)为规范化因子:
Z
(
x
)
=
∑
y
e
x
p
(
∑
i
,
k
λ
k
t
k
(
y
i
−
1
,
y
i
,
x
,
i
)
+
∑
i
,
l
μ
l
s
l
(
y
i
,
x
,
i
)
)
Z(x) =\sum\limits_{y} exp\Big(\sum\limits_{i,k} \lambda_kt_k(y_{i-1},y_i, x,i) +\sum\limits_{i,l}\mu_ls_l(y_i, x,i)\Big)
Z(x)=y∑exp(i,k∑λktk(yi−1,yi,x,i)+i,l∑μlsl(yi,x,i))
回到特征函数本身,每个特征函数定义了一个CRF的规则,则其系数定义了这个规则的可信度。所有的规则和其可信度一起构成了我们的CRF的最终的条件概率分布。最后,值得说明一下,在BI-LSTM-CRF模型中,LSTM层输出的每个位置的概率分布就相当于节点特征函数和其权重参数的乘积,而CRF层的状态转移矩阵就相当于局部特征函数和其权重参数的乘积。
参数简化形式
上文中的特征函数分为局部特征函数和节点特征函数,虽然这样表示起来很详细具体,但是公式写起来挺麻烦的,其实可以简化一点:假设在某一节点我们有
K
1
K1
K1个局部特征函数和
K
2
K2
K2个节点特征函数,总共有
K
=
K
1
+
K
2
K=K_1+K_2
K=K1+K2个特征函数。我们用一个特征函数
f
k
(
y
i
−
1
,
y
i
,
x
,
i
)
f_k(y_{i-1},y_i, x,i)
fk(yi−1,yi,x,i)来统一表示如下:
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
同时我们也统一
f
k
(
y
i
−
1
,
y
i
,
x
,
i
)
f_k(y_{i-1},y_i, x,i)
fk(yi−1,yi,x,i)对应的权重系数
w
k
w_k
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
这样,我们的CRF的参数化形式简化为:
P
(
y
∣
x
)
=
1
Z
(
x
)
e
x
p
∑
k
=
1
K
w
k
f
k
(
y
,
x
)
P(y|x) = \frac{1}{Z(x)}exp\sum\limits_{k=1}^Kw_kf_k(y,x)
P(y∣x)=Z(x)1expk=1∑Kwkfk(y,x)
其中,
Z
(
x
)
Z(x)
Z(x)为规范化因子:
Z
(
x
)
=
∑
y
e
x
p
∑
k
=
1
K
w
k
f
k
(
y
,
x
)
Z(x) =\sum\limits_{y}exp\sum\limits_{k=1}^Kw_kf_k(y,x)
Z(x)=y∑expk=1∑Kwkfk(y,x)
从转移矩阵的角度理解CRF
在知识图谱之实体识别那篇博文中提到,BI-lstm_crf模型最后一层接的是CRF层,本质上是要学习一个状态转移矩阵。其实,CRF的精髓可以简单理解为一个状态转移矩阵,如下所示:
[
a
b
.
.
.
.
k
b
c
.
.
.
.
j
.
.
.
h
.
.
.
f
n
m
.
.
.
.
i
]
\begin{bmatrix} a & b & .... & k \\ b & c & .... & j \\ ... & h & ... & f \\ n & m & .... & i \end{bmatrix}
⎣⎢⎢⎡ab...nbchm...............kjfi⎦⎥⎥⎤
假设上述是一个nxn的矩阵
A
A
A,
A
i
j
A_{ij}
Aij表示从第
i
i
i个位置转移第
j
j
j个位置的概率,上文提到,CRF的局部特征函数表示一个规则,取值为0或者1,意思是满不满足这个规则,那么在这个状态转移矩阵中的体现就是:当第
i
i
i个位置取某一值
y
i
y_i
yi时,第
j
j
j个位置能否取值为
y
j
y_j
yj,这可以看作一条规则,一个局部特征函数,当
A
i
j
A_{ij}
Aij的值为0时,表示不可能,不满足这条规则,当
A
i
j
A_{ij}
Aij的值>0时,表示有可能满足这条规则,至于可能性有多大,就看这个概率值(
A
i
j
A_{ij}
Aij)的大小了,此时,这个概率值就对应了局部特征函数的权重系数,概率值的大小就表示了权重系数的置信度的多少。
以上就是CRF的模型基础,后续会进一步讲解CRF更多的细节,包括前向后向算法,维特比算法等。