参考资料
1)介绍
条件随机场(Conditional Random Fields:CRF)是一个序列化标注算法,接收一个输入序列,并输出目标序列;
举个例子:词性标注问题;
非常简单的,就是给一个句子中的每个单词注明词性。比如这句话:
Bob drank coffee at Starbucks
注明每个单词的词性后是这样的:
Bob (名词) drank(动词) coffee(名词) at(介词) Starbucks(名词)
。
下面,就用条件随机场来解决这个问题。
以上面的话为例,有5个单词,我们将:(名词,动词,名词,介词,名词)作为一个标注序列,称为 l l l,可选的标注序列有很多种,比如l还可以是这样:(名词,动词,动词,介词,名词),我们要在这么多的可选标注序列中,挑选出一个最靠谱的作为我们对这句话的标注。
怎么判断一个标注序列靠谱不靠谱呢?
就我们上面展示的两个标注序列来说,第二个显然不如第一个靠谱,因为它把第二、第三个单词都标注成了动词,动词后面接动词,这在一个句子中通常是说不通的。
假如我们给每一个标注序列打分,打分越高代表这个标注序列越靠谱,我们至少可以说,凡是标注中出现了动词后面还是动词的标注序列,要给它减分!!
上面所说的动词后面还是动词就是一个特征函数,我们可以定义一个特征函数集合,用这个特征函数集合来为一个标注序列打分,并据此选出最靠谱的标注序列。也就是说,每一个特征函数都可以用来为一个标注序列评分,把集合中所有特征函数对同一个标注序列的评分综合起来,就是这个标注序列最终的评分值
2)CRF中的特征函数
1. CRF的特征函数
现在,我们正式地定义一下什么是CRF中的特征函数,所谓特征函数,就是这样的函数,它接受四个参数:
- 句子 s s s(就是我们要标注词性的句子)
- i i i,用来表示句子 s s s 中第 i i i 个单词
- l i l_i li ,表示要评分的标注序列给第 i i i 个单词标注的词性
- l i − 1 l_{i-1} li−1 ,表示要评分的标注序列给第 i − 1 i-1 i−1 个单词标注的词性
他的输出值是0或者1,0表示要评分的标注序列不符合这个特征,1表示符合;
注意:这里,我们的特征函数仅仅依靠当前单词的标签和它前面的单词的标签对标注序列进行评判,这样建立的CRF也叫作线性链CRF,这是CRF中的一种简单情况。为简单起见,本文中我们仅考虑线性链CRF。
2. 计算概率
定义好一组特征函数后,我们要给每个特征函数
f
j
f_j
fj 赋予一个权重 $\lambda_j $ 。现在,只要有一个句子
s
s
s,有一个标注序列
l
l
l,我们就可以利用前面定义的特征函数集来对
l
l
l评分。
s
c
o
r
e
(
l
∣
s
)
=
∑
j
=
1
m
∑
i
=
1
n
λ
j
f
j
(
s
,
j
,
l
i
,
l
i
−
1
)
score(l|s) = \sum_{j=1}^{m}{\sum_{i=1}^{n}{\lambda_jf_j(s, j,l_i,l_{i-1})}}
score(l∣s)=j=1∑mi=1∑nλjfj(s,j,li,li−1)
上式中,外层求和计算每一个特征函数
f
j
f_j
fj, 里面的求和用来相加句子中每个位置的单词的特征值;
对这个分数进行 指数化和标准化, 我们就可以得到标注序列
I
I
I的概率值
p
(
I
∣
s
)
p(I|s)
p(I∣s)
p
(
l
∣
s
)
=
e
x
p
[
s
c
o
r
e
(
l
∣
s
)
]
∑
l
′
e
x
p
(
s
c
o
r
e
(
l
′
∣
s
)
)
p(l|s) = \frac{exp[score(l|s)]}{\sum_{l'}exp(score(l'|s))}
p(l∣s)=∑l′exp(score(l′∣s))exp[score(l∣s)]
式子底下的求和为所有可能标注序列 l l l的的分数总和;概率最大的标注序列就是目标标注序列;