CRF命名实体识别的一些tips

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_35014150/article/details/73826930

调研目的:

         对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类型:这个模版用来描述双连词的特征。通过这个模版,当前输出的片段和前一个输出的片段的结合体会自动产生。

 

展开阅读全文

没有更多推荐了,返回首页