从例子说起——词性标注问题
-----啥是词性标注问题?
非常简单的,就是给一个句子中的每个单词注明词性。比如这句话:“Bob drank coffee at Starbucks”,注明每个单词的词性后是这样的:“Bob (名词) drank(动词) coffee(名词) at(介词) Starbucks(名词)”。
下面,就用条件随机场来解决这个问题。
以上面的话为例,有5个单词,我们将:名词,动词,名词,介词,名词作为一个标注序列,称为
l
l
l,可选的标注序列有很多种,比如
l
l
l还可以是这样:名词,动词,动词,介词,名词,我们要在这么多的可选标注序列中,挑选出一个最靠谱的作为我们对这句话的标注。
怎么判断一个标注序列靠谱不靠谱呢?
就我们上面展示的两个标注序列来说,第二个显然不如第一个靠谱,因为它把第二、第三个单词都标注成了动词,动词后面接动词,这在一个句子中通常是说不通的。假如我们给每一个标注序列打分,打分越高代表这个标注序列越靠谱,我们至少可以说,凡是标注中出现了动词后面还是动词的标注序列,要给它减分。
上面所说的动词后面还是动词就是一个特征函数,我们可以定义一个特征函数集合,用这个特征函数集合来为一个标注序列打分,并据此选出最靠谱的标注序列。也就是说,每一个特征函数都可以用来为一个标注序列评分,把集合中所有特征函数对同一个标注序列的评分综合起来,就是这个标注序列最终的评分值。
定义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表示要评分的标注序列符合这个特征。
Note:这里,我们的特征函数仅仅依靠当前单词的标签和它前面的单词的标签对标注序列进行评判,这样建立的CRF也叫作线性链CRF,这是CRF中的一种简单情况。为简单起见,本文中我们仅考虑线性链CRF。
从特征函数到概率
定义好一组特征函数后,我们要给每个特征函数
f
j
f_j
fj赋予一个权重
λ
j
λ_j
λj。现在,只要有一个句子
s
s
s,有一个标注序列
l
l
l,我们就可以利用前面定义的特征函数集来对
l
l
l评分。
其中,
n
n
n代表的是单词数,
m
m
m代表的是特征数,即外面的相加用来相加每一个特征函数
f
j
f_j
fj,里面的相加用来相加句子中每个位置的单词的的特征值。
对这个分数进行指数化和标准化,我们就可以得到标注序列
l
l
l的概率值p(l|s),如下所示:
几个特征函数的例子
前面我们已经举过特征函数的例子,下面我们再看几个具体的例子,帮助增强大家的感性认识。
当
l
i
l_i
li是“副词”并且第
i
i
i个单词以“ly”结尾时,我们就让
f
1
=
1
f_1 = 1
f1=1,其他情况
f
1
f_1
f1为0。不难想到,
f
1
f_1
f1特征函数的权重
λ
1
λ_1
λ1应当是正的。而且
λ
1
λ_1
λ1越大,表示我们越倾向于采用那些把以“ly”结尾的单词标注为“副词”的标注序列。
如果
i
=
1
i=1
i=1,
l
i
l_i
li=动词,并且句子
s
s
s是以“?”结尾时,
f
2
=
1
f_2=1
f2=1,其他情况
f
2
=
0
f_2=0
f2=0。同样,
λ
2
λ_2
λ2应当是正的,并且
λ
2
λ_2
λ2越大,表示我们越倾向于采用那些把问句的第一个单词标注为“动词”的标注序列。
当
l
i
−
1
l_{i-1}
li−1是介词,
l
i
l_i
li是名词时,
f
3
=
1
f_3 = 1
f3=1,其他情况
f
3
=
0
f_3=0
f3=0。
λ
3
λ_3
λ3也应当是正的,并且
λ
3
λ_3
λ3越大,说明我们越认为介词后面应当跟一个名词。
如果
l
i
l_i
li和
l
i
−
1
l_{i-1}
li−1都是介词,那么
f
4
=
1
f_4=1
f4=1,其他情况
f
4
=
0
f_4=0
f4=0。这里,我们应当可以想到
λ
4
λ_4
λ4是负的,并且
λ
4
λ_4
λ4的绝对值越大,表示我们越不认可介词后面还是介词的标注序列。
以上参考:https://www.zhihu.com/question/35866596(“工程师milter”的回答)
未完待续
https://blog.csdn.net/polly_yang/article/details/9716591