BiLSTM顶部的CRF层-6
BiLSTM顶部的CRF层-6
2.6推断新句子的标签
在前面的部分中,我们了解了BiLSTM-CRF模型的结构以及CRF损失函数的详细信息。您可以通过各种开源框架(Keras,Chainer,TensorFlow等)实现自己的BiLSTM-CRF模型。最好的事情之一是在这些框架上自动计算模型的反向传播,因此您不需要自己进行反向传播来训练模型(即计算梯度和更新参数)。而且,某些框架已经实现了CRF层,因此仅添加大约一行代码就可以很容易地将CRF层与您自己的模型结合起来。
在本节中,我们将探索在模型准备就绪时如何在测试期间推断句子的标签。
步骤1:BiLSTM-CRF模型的发射和转换分数
我们有三个单词组成的句子:
此外,我们已经从BiLSTM模型获得了发射得分,并从下面的CRF层获得了转换得分:
步骤2:开始推论
如果您熟悉维特比算法,那么本部分将很容易。但是,如果不是,请不要担心。与上一节类似,我将逐步解释该算法。我们将从句子的左到右运行推理算法,如下所示:
您将看到两个变量:obs和previous。previous存储前一步最终步骤的结果。obs表示当前单词的信息。
目前,我们正在观察第一个单词 w0,到目前为止的最佳标签是w0。
举个例子,如果 obs=[x01=0.2,x02=0.8],显然,对于w0最好的标签是l2,因为只有一个单词,并且标签之间没有转换,所以不使用转换分数。
您可能想知道,当我们计算所有路径的总得分时,与上一节没有区别。请耐心和小心,您很快就会发现差异。
为下一个迭代改变previous的值。
举例,如果得分为:
那么previous就成了:
previous是什么意思?previous列表将最高分存储到当前单词的每个标签中。
[示例开始]
我们有两个标签,label1(l1) and label2(l2).这两个标签的索引分别为0和1(由于在编程中,索引从0开始而不是1)。
previous[0] 是 label l1 路径的最高分数,previous[1] 是 label l2路径的最高分数.
在每次迭代中,变量previous存储路径的最高得分,该最高得分以每个标签结尾.
[示例结束]
回到我们的主要任务:
同时,我们还有两个变量来存储历史记录信息(分数和索引)alpha0 and alpha1.
在此迭代中,我们会将最佳分数添加到 alpha0中。为了方便起见,每个标签的最高分都标有下划线。
此外,相应的列索引保存在alpha1中:
步骤3:找出分数最高的最佳路径
这是最后一步! 大功告成! 在此步骤中,将使用alpha0和alpha1查找得分最高的路径。 我们将从最后一个到第一个检查这两个列表中的元素。
w1->w2:
首先,检查alpha0和alpha1的最后一个元素:(0.8,0.9)和(1,0)。 0.9表示当标签为l2时,我们可以获得最高的路径得分0.9。 我们也知道l2的索引是1,因此检查(1,0)[1] = 0的值。 索引“ 0”表示前一个标签为l1(l1的索引为0)。 因此我们可以获得w1→w2的最佳路径:是l1→l2。
w0→w1:
其次,我们继续向后移动并获得alpha1的元素:(1,1)。 从最后一段我们知道w1的标签是l1(索引为0),因此我们可以检查(1,1)[0] = 1。 因此我们可以获得这部分的最佳路径(w0→w1 :):l2→l1。
恭喜你! 我们获得的最佳路径是l2→l1→l2。