Crf在nlpNer中的应用原理

**** 第一个关于NLP的博客,单纯为了激励我自己为了完善博客去深究CRF的原理

CRF是什么

关于条件随机场的推导在B站有视频,但是纯理论跟实际应用的区别还是很大的,我就不多余的赘述了,对理论感兴趣的朋友们可以去B站看看。我只说在NLP中的应用。
Crf中用到最多的就是CRF++模板的使用和Crfsuite.

CRF++模板的使用

CRF++模板构建分为两类,一类是Unigram标注,一类是Bigram标注。Unigram和Bigram模板分别生成CRF的状态特征函数S(yi, x, i)和转移特征函数Tk(yi-1, yi, x, i)。其中yi是标签,x是观测序列,i是当前节点位置。Bigram 下面只需要加一个B,其它还是用Unigram模板生成特征。

特征模板格式:%x[row,col]。x可取U或B,对应两种类型。方括号里的编号用于标定特征来源,row表示相对当前位置的行,0即是当前行;col对应训练文件中的列。这里只使用第1列(编号0),即文字。row为列偏移量、col为行偏移量

Unigram模板
								状态特征函数S(yi, x, i)

Unigram template:第一个字符是U,这是用于描述unigram feature的模板。每一行%x[#,#]生成一个CRFs中的点(state)函数: f(s, o), 其中s为t时刻的标签(output),o为t时刻的上下文。这是CRF++例子中给出的模板,一共有9个模板,先看第一个模板,表示当前词和其前面的第二个词组成的特征,U02表示当前词。
CRF++遍历每一个位置时,会查看此位置前一个位置(-1,0)和前两个位置(-2,0)和后一个位置(1,0)和后两个位置(2,0),这是U00,U01,U02,U03,U04所规定的。至于后面几个特征函数,比如U05,它把前面的几个位置合起来看。以“小明今天穿了一件红色上衣”为例,符合CRF++处理格式的这句话应该变成如下形式。
在这里插入图片描述在这里插入图片描述在这里插入图片描述
此时标签的个数为B、I、S三种的时候,根据字的句子字的个数n会生成最终会生成NTM个特征函数,N代表分词中词的个数,T代表分词标注的tag标签(B,I,S等),M代表模板个数。。即将各预测序列与标签一一做特征函数来计算出权值,如U00时,如图所示特征函数的值、同时其他的模板的值会反作用与正在被预测的值,即联系上下文的能力。
在模型训练中,首先用命令对模型进行处理,处理时将训练集利用模板进行特征函数的生成和上下文进行联系。

它是由U00:%x[0,0]在输入文件的第一行生成的点函数.将输入文件的第一行"代入"到函数中,函数返回1,同时,如果输入文件的某一行在第1列也是“小”,并且它的output(第2列)同样也为B,那么这个函数在这一行也返回1。处理后,用一个py脚本进行调用,根据模型的内容进行特征方程的判断。模板即形成状态特征函数的规则。

Bigram模板
							转移特征函数Tk(yi-1, yi, x, i)

第一个字符是B,每一行%x[#,#]生成一个CRFs中的边(Edge)函数:f(s’, s, o), 其中s’为t – 1时刻的标签.也就是说,Bigram类型与Unigram大致机同,只是还要考虑到t – 1时刻的标签.如果只写一个B的话,默认生成f(s’, s),这意味着前一个output token和current token将组合成bigram features。
在这里插入图片描述

生成的转移特征函数如图所示,其中分别代表t-1的标签、t时刻的标签、t时刻的观测序列,同时会生成标签数量N观测序列字数L观测序列数L。其余与Unigram模板类似。
小结:在U模板中,模板是用来生成状态函数的规则即当不同的观测序列的单个进入模板中,会在模板的不同位置进行生成不同的状态函数,不同的状态函数进行权值的计算,即在计算了权值以后形成模型,调用模型来对值进行预测。在B模板就多加入了对上文的对照。

Crfsuite的使用

Crfsuite针对Nlp的序列标注的问题进行训练,我们需要采用了对字(词)进行特征的定义,即我们想考察的内容,如:
当前词的小写格式
当前词的后缀
当前词是否全大写 isupper
当前词的首字母大写,其他字母小写判断 istitle
当前词是否为数字 isdigit
当前词的词性
当前词的词性前缀
与之前后相关联的词的上述特征(类似于特征模板的定义)
当对对特征定义以后,获取每个词、词的标签、特征。如图所示:
在这里插入图片描述
根据获取的特征的权值,将测试集的观测序列放入模型中,生成预测值与正确的标记做对比。得到参数。

小结:

我的理解是在CRF++的模板使用中,训练时将观测序列的单个字一次一个作为输入的时候,同时生成状态转移函数的时候,就跟标签一一对应,进行函数生成,并在生成的时候计算权值。B模板在生成时将计算权值的时候将上文考虑进去,而U模板不考虑只生成自己的函数。
Srfsuite就对需要考察的特征进行定义,然后根据特征来产生观测序列的参数,以此来进行对比。

(nlp小白~~说的不对,大家指正,一块进步。。。。)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值