调研目的:
对CRF模型的解释以及其在命名实体识别中的具体实现进行调研
调研步骤:
1、表达式的解析
CRF最早于2001年提出,其表达式如下:
其中:
表达式中的各符号表达含义如下:
(1) Z(x)为一个规范化因子,以使得给定输入的所有可能的状态序列的概率只和为1。
(2)是转移特征函数,如果满足条件则取为1,否则为0
(3)状态特征函数,满足条件取1,否则取0。
(4),是,对应的权值
2、CRF在命名实体识别上的应用
(1)表达式的具体含义:y和x都是序列,通过考虑长远的上下文信息,考虑整个句子的局部特征的线性加权组合,通过viterbi算法来找到一个概率最高的序列y = (y1, y2, …, yn),使得p(y1, y2, …, yn| x, w)最高。
(2)2个特征函数的含义:对于转移特征函数tk,其形式为(label1,label2,x,i),label1,label2∈{B-PER,M-PER,E-PER,B-LOC,M-LOC,E-LOC,B-ORG,M-ORG,E-ORG,O},label1为前一个标记,label2为当前的标记,x为当前位置的字,i为第i时刻。例如:
赵明今天上午去了北京,这句话的标记结果为:赵/B-PER 明/E-PER 今/O 天/O 上/O 午/O 去/O 了/O 北/B-LOC 京/E-LOC。如果当前位置取到i=3的时刻,则有i=3时刻的观察值的真实特征b(x,i)为:
b(x-2=”赵”,i=3)、b(x-1=”明”,i=3)、b(x0=”今”,i=3)、b(x1=”天”,i=3)、b(x2=”上”,i=3)
结合当前位置和之前位置的标注结果即可获得相应的特征函数,如:
f(yi-1=B-PER,yi=E-PER,x-1=”明”,i=3)就是一个特征函数,表示成二值函数形式为:
fj=
由于语言的多样性,单一模式的特征函数无法覆盖所有的语言内在规律,此时可以通过一些模版来筛选特征。特征模版的作用就是为特征函数的生成提供一个统一模式,通过特征模版的使用可以方便的获得我们所需要的所有特征函数,特征函数模版的制定直接关系到特征函数的生成。特征模版的选取需要进行多次尝试比较,从中挑选最为有效的模版。
(3)权重系数的选取
CRF模型训练过程分为两部分,第一部分为特征函数集的建立,第二部分为模型参数估计,也就是计算函数的权重。常用的参数估计方法为极大似然估计法(频率论方法)对于λ的选取符合最大熵原理(ME)
L(λ)=p’(x,y)
其中
上式表示的是训练集中包含的所有特征的个数,p’(x,y)为训练数据的经验分布,其中Cj(yk,xk)表示给定序列x和标注序列y的特征个数fj个数,即
3、CRF的具体实现工具----CRF++
CRF++是具体实现CRF实体识别的一个工具,CRF++里的特征获取方式是通过特征模版匹配训练语料产生的,因此,扫描语料中的每一个词,循环匹配模板库中的每一个模版,将匹配到的特征加入到特征集,这样就构成了CRF的特征集。
特征生成算法具体描述如下:
输入:训练语料、特征模版
输出:特征集
开始:
(1) 在模板库中顺序取一个模版T;
(2) 顺序读取语料库中的一个词W,将当前模版T和当前词W进行匹配,看生成的模版是否在模板库中,若已经存在了,则将其计数加1,否则将生成新的特征加入特征集;
(3) 若w是训练语料中的最后一个词,则转(4),否则转(2);
(4) 若T是模板库中的最后一个模版,则转(5),否则转(1);
(5) 算法结束0
结束
一个例子:
训练模版:U00:%X[-2,0] U01:%X[-1,0] U02:%X[0,0] U03:%X[1,0] U04:%X[2,0]
U05:%X[-2,0]/%x[-1,0]/%x[0,0] U06:%X[-1,0]/%X[0,0]/%X[1,0]
U07:%X[0,0]/%X[1,0]/%X[2,0]
U08:%X[-1,0]/%X[0,0] U09:%X[0,0]/%X[1,0]
输入:
丈 n O
夫 n O
陈 nh B-PER
先 n I-PER
生 n E-PER
打 v O
车 v O
送 v O
医 n O
对于模版有以下解析:
(1)模版分为Unigram和Bigram两种类型。
(2)第一列为字本身,第二列为字词性,第三列为标注
Unigram 模版:这个模版用来描述单构成分的特征。
取i=3时刻 则U00~U09指代的特征为:
U00:%X[-2,0] “丈” U01:%X[-1,0] “夫”
U02:%X[0,0] “陈” U03:%X[1,0] “先”
U04:%X[2,0] “生”
U05:%X[-2,0]/%x[-1,0]/%x[0,0] 丈/夫/陈
U06:%X[-1,0]/%X[0,0]/%X[1,0] 夫/陈/先
U07:%X[0,0]/%X[1,0]/%X[2,0] 陈/先/生
U08:%X[-1,0]/%X[0,0] 夫/陈
U09:%X[0,0]/%X[1,0] 陈/先
当给出一个模版”U02:%X[-1,0]”,CRF生成一个特征函数集合:
func1=if(output=B-PRE and feature=”U01:陈”)return 1else return 0
func2=if(output=I-PER and feature=”U01:陈”) return 1 else return 0
func3=if(output=E-PER and feature=”U01:陈”)return 1 else return 0
……………
funcxx=if(output=O and feature=”U01:打”)return 1 else return 0
funcyy=if(output=B and feature=”U01:打”)return1 else return 0
……………
对于Bigram类型:这个模版用来描述双连词的特征。通过这个模版,当前输出的片段和前一个输出的片段的结合体会自动产生。