2.3 CRF损失函数
CRF损失函数包含了真实路径得分和所有可能路径的总得分,如果预测对的情况下,真实路径在所有可能路径中得分应该是最高的。
举个栗子,假设我们数据的标签如下表所示:
Label | Index |
---|---|
B-Person | 0 |
I-Person | 1 |
B-Organization | 2 |
I-Organization | 3 |
O | 4 |
START | 5 |
END | 6 |
我们有一个含有5个单词的句子,可能的路径为:
- 1)START B-Person B-Person B-Person B-Person B-Person END
- 2)START B-Person I-Person B-Person B-Person B-Person END
- …
- 10)START B-Person I-Person O B-Organization O END
- …
- N) O O O O O O O
假设共有NNN种可能路径,每一种可能的路径都有一个得分PiP_iPi,所有路径的总得分为Ptotal=P1+P2+...+PN=eS1+eS2+...+eSNP_{total} = P_1+P_2+...+P_N = e^{S_1}+ e^{S_2} +...+e^{S_N}Ptotal=P1+P2+...+PN=eS1+eS2+...+eSN,其中eee就是我们常用的指数常量eee。(在2.4节,我们将介绍如何计算SiS_iSi,SiS_iSi也可以看作是路径的得分。)
假设,在所有可能路径中,第10条路径是真实路径,也就意味着,第10条路径对应的预测标签序列是对的,因此,P10P_{10}P10得分应该是最高的。
下式即为损失函数,在训练过程中,BiLSTM-CRF模型将会不断的更新,从而使真实路径得分占比越来越大:
LossFunction=PRealPathP1+P2+...+PNLossFunction = \frac{P_{RealPath}}{P_1+P_2+...+P_N}LossFunction=P1+P2+...+PNPRealPath
现在要解决的问题就是:
1)如何定义一个路径的得分;
2)如何计算所有可能路径的总得分;
3)当我们计算总得分时,我们需要列出所有可能路径吗(提前回答:当然不需要列出所有可能路径)
接下来,我们将介绍如何解决上述问题。
2.4 真实路径得分
在2.3节中,我们假设共有NNN种可能路径,每一种可能的路径都有一个得分PiP_iPi,所有路径的总得分为Ptotal=P1+P2+...+PN=eS1+eS2+...+eSNP_{total} = P_1+P_2+...+P_N = e^{S_1}+ e^{S_2} +...+e^{S_N}Ptotal=P1+P2+...+PN=eS1+eS2+...+eSN,其中eee就是我们常用的指数常量eee,eSie^{S_i}eSi为第iii条路径的得分。
显然,在所有可能路径中,肯定有一条真实路径(命名实体识别中,就是说这句话所有可能标签序列中,肯定有一个标签序列是对的),再举个栗子,1.2节中那句话的真实路径就是“START B-Person I-Person O B-Organization O END”,而其他的如“START B-Person B-Organization O I-Person I-Person B-Person”就是错误的。
在训练过程中,CRF损失函数只需要两个得分:真实路径得分和所有可能路径总得分,真实路径得分的比例应随着训练不断增加。
真实路径得分eSie^{S_i}eSi的计算是非常直接的,接下来,我们介绍如何计算SiS_iSi。
如前所述,假设真实路径为:“START B-Person I-Person O B-Organization O END”,则操作如下:
- 假设该句子有5个单词组成:w1,w2,w3,w4,w5w_1,w_2,w_3,w_4,w_5w1,w2,w3,w4,w5;
- 再额外加两个单词w0,w6w_0,w_6w0,w6分别表示该句子的开头和结果;
- SiS_iSi由两部分计算得到:Si=EmissionScore+TransitionScoreS_i=EmissionScore+TransitionScoreSi=EmissionScore+TransitionScore(2.1节介绍了发射得分,2.2节介绍了转移得分)
发射得分
EmissionScore=x0,START+x1,B−Person+x2,I−Person+x3,O+x4,B−Organization+x5,O+x6,ENDEmissionScore=x_{0,START}+x_{1,B-Person}+x_{2,I-Person}+x_{3,O}+x_{4,B-Organization}+x_{5,O}+x_{6,END}EmissionScore=x0,START+x1,B−Person+x2,I−Person+x3,O+x4,B−Organization+x5,O+x6,END
- xindex,labelx_{index,label}xindex,label是第indexindexindex个词被标记为labellabellabel的得分;
- x1,B−Person,x2,I−Person,x3,O,x4,B−Organization,x5,Ox_{1,B-Person} ,x_{2,I-Person},x_{3,O},x_{4,B-Organization},x_{5,O}x1,B−Person,x2,I−Person,x3,O,x4,B−Organization,x5,O都是从BiLSTM的输出得到的;
- 对于x0,START和x6,ENDx_{0,START}和x_{6,END}x0,START和x6,END,我们可以将他们设为0。
转移得分
TransitionScore=tSTART−>B−Person+tB−Person−>I−Person+tI−Person−>O+t0−>B−Organization+tB−Organization−>O+tO−>ENDTransitionScore=t_{START−>B−Person}+t_{B−Person−>I−Person}+t_{I−Person−>O}+t_{0−>B−Organization}+t_{B−Organization−>O}+t_{O−>END}TransitionScore=tSTART−>B−Person+tB−Person−>I−Person+tI−Person−>O+t0−>B−Organization+tB−Organization−>O+tO−>END
- tlabel1−>label2t_{label1->label2}tlabel1−>label2是从label1label1label1到label2label2label2的转移得分;
- 这些是CRF层的得分,即这些得分其实是CRF层的参数。
总而言之,现在我们可以计算SiS_iSi和路径得分eSie^{S_i}eSi,下一步就是如何计算所有可能路径的总得分。
下一篇博文
下一篇博文,我将会通过一个示例,教您如何一步一步地计算所有可能路径的总得分。
这部分内容比较重要,虽然有点难度,但是不要担心,下一节的示例将会尽可能详细地介绍计算细节。