条件随机场 CRF

2019-09-29 15:38:26

问题描述:请解释一下NER任务中CRF层的作用。

问题求解

在做NER任务的时候,神经网络学习到了文本间的信息,而CRF学习到了Tag间的信息。

  • 加入CRF与否网络的差别

首先对于不加CRF层的NER网络,往往每个输出的Tag是贪心的进行选取到的,如下图所示:

这种方案的结果没有考虑到Tag之间的关系,往往会造成最后的结果是不符合正常模式的,比如出现B-Person,B-Person的情况。

加入CRF层后,CRF层会根据训练语料去学习其中存在的模式,比如B-Person,B-Person这种情况是不会出现的,其网络结构如下:

  • CRF层的训练机制

CRF有两个概念,发射分数(Emission score)和转移分数(Transition score)。

Emission score:神经网络输出的各个Tag的置信度;

Transition score:CRF层中各个Tag之前的转移概率;

加入CRF层后,Loss Function为:

所以我们需要定义的就是这里的Path Score如何计算,另外真实的Path Score应该是占比最高的。

以Path Score Real举例,Path Score Real = Emission score + Transition score。

Take the real path, “START B-Person I-Person O B-Organization O END”, we used before, for example:

  • We have a sentence which has 5 words, w1,w2,w3,w4,w5w1,w2,w3,w4,w5
  • We add two more extra words which denote the start and the end of a sentence, w0,w6w0,w6
  • SiSi consists of 2 parts: Si=EmissionScore+TransitionScoreSi=EmissionScore+TransitionScore (The emission and transition score are expanined in section 2.1 and 2.2)

Emission Score:
EmissionScore=x0,START+x1,BPerson+x2,IPerson+x3,O+x4,BOrganization+x5,O+x6,ENDEmissionScore=x0,START+x1,B−Person+x2,I−Person+x3,O+x4,B−Organization+x5,O+x6,END

  • xindex,labelxindex,label is the score if the indexthindexth word is labelled by labellabel

  • These scores x1,BPersonx1,B−Person x2,IPersonx2,I−Person x3,Ox3,O x4,Organizationx4,Organization x5,Ox5,O are from the previous BiLSTM output.

  • As for the x0,STARTx0,START and x6,ENDx6,END, we can just set them zeros.

Transition Score:
TransitionScore=TransitionScore=
tSTART>BPerson+tBPerson>IPerson+tSTART−>B−Person+tB−Person−>I−Person+
tIPerson>O+t0>BOrganization+tBOrganization>O+tO>ENDtI−Person−>O+t0−>B−Organization+tB−Organization−>O+tO−>END

  • tlabel1>label2tlabel1−>label2 is the transition score from label1label1 to label2label2
  • These scores come from the CRF Layer. In other words, these transition scores are actually the parameters of CRF Layer.

最后的Preal path = escore 

这里可能有个疑问就是为什么要做Exponential,其实道理非常简单,就是我们实际要算的是级联概率,P = P1 * P2 * P3...,但是这里直接将发射概率和转移概率做了相加是因为这里算的其实是logP,直接相加我理解是为了便于计算,其实最好是logProb相加,这样才符合直觉。

在训练模型的时候还有个需要计算的就是Total Score。

计算Total Score的时候当然可以依次计算所有的路径的得分,最后加和起来,但是这种方法的时间复杂度是不可接受的,那么有什么好的方案可以降低时间复杂度么?

这里可以使用动态规划的算法来降低时间复杂度,简单的说就是对每一层的结果进行备份,每一层的节点保存的是到当前节点的sum of score,然后递推计算下一层的结果即可。

使用dp可以将之间复杂度降低到O(S ^ 2 * L)。

  • CRF层的预测机制

在预测时候,转移矩阵已经生成,那么我们需要做的就是去寻找一条最大的Score Path。和之前计算Total Path Score一样,可以枚举所有的方案,从中选择最大的一条路径,但这样暴力的枚举的方案的时间复杂度是非常高的,这个是我们不能接受的。那么有什么方案可以降低时间复杂度么?

这里依然可以使用动态规划的算法来降低时间复杂度,算法的核心思路其实并没有多大的改变,只是每层的节点存储的结果的定义有一点改变,之前的每个节点存储的是sum of score,这里的每个节点保存的是max of score,然后递推的计算下一层的结果即可。

CRF和HMM的区别: 

CRF和HMM的最大区别在于CRF是判别式模型,HMM是生成式模型,可以将HMM看作是CRF的一个特例,即所有HMM能解决的问题CRF均可以解决。

在机器学习中任务是从属性X预测标记Y,判别模型求的是P(Y|X),即后验概率;而生成模型最后求的是P(X,Y),即联合概率。

原文地址:https://www.cnblogs.com/hyserendipity/p/11608342.html