crf-5 所有路径总分数(翻译)
源文地址:https://createmomo.github.io/2017/11/11/CRF-Layer-on-the-Top-of-BiLSTM-5/
2.5 所有路径总分数
在上一节中,我们学习了如何计算一个eSi标签路径分数。目前,我们有很多问题要解决,如何计算所有路径的总分数。(Ptotal = P1+P2+…+PN = eS1+eS2+…+eSN)
去计算总分数的简单方法是:枚举所有路径并计算这些分数。你可以用这种方法计算总分。但是,这是非常低效的。训练的时间将是你难以忍受的。
在阅读下面的内容之前,我建议你准备好纸和笔,并按照练习示例中的步骤进行操作。我相信这将帮助您更好的理解算法的细节。此外,您应该知道如何通过您喜欢的编程语言来实现它。
Step 1:回顾CRF损失函数
在2.3节中,我们定义了CRF损失函数:
现在我们将损失函数改为log 损失函数:
因为当我们训练模型的时候,通常我们的目标是最小化我们的损失函数,我们添加一个负号:
在前面的章节,我们已经知道了如何计算真实路径分数,现在我们需要找一个有效的解决方法来计算 log(eS1 + eS2 + … + eSN)。
Step 2:回顾发射和转移分数
简单的,假设我们通过长度只有3的练习句子来训练我们的模型。
x = [w0, w1, w2]
另外,在我们的数据中只有两个标签:
LabelSet = {l1, l2}
从2.1章描述的Bi-LSTM的输出层,我们可以得到发射分数:
l1 | l2 | |
---|---|---|
w0 | x01 | x02 |
w1 | x11 | x12 |
w2 | x21 | x22 |
xi,j 表示 wi 被标记为 lj 的分数。
此外,在2.2章从CRF层得到的转移分数如下:
l1 | l2 | |
---|---|---|
l1 | t11 | t12 |
l2 | t21 | t22 |
tij 是标签 i 到标签 j 的转移分数。
Step 3: 开始实战!
记住:我们的计算目标是: log(eS1 + eS2 + … + eSN)。
这个过程是分数的累加:这个思想和动态规划类似(如果您不知道什么是动态规划,也可以继续阅读本文。我将逐步解释这个练习示例。但我强烈建议你学习动态规划算法)。简而言之,就是计算 w0 所有可能路径的总分数。然后我们使用总分数来计算 w0 —> w1。最终,我们使用最新的总分来计算 w0 —> w1 —> w2 。最终的总分数就是我们需要的。
在接下来的步骤中,您将看到两个变量:obs和previous。previous存储前面步骤的最终结果。obs表示来自当前单词的信息。
w0 :
obs = [x01, x02] previous = None
如果我们的句子只有一个单词 w0,我们没有上一步的结果,因此 previous 是None。另外,我们仅仅只能观测到第一个单词 obs = [x01, x02]。x01, x02是上面提到的发射分数。
你可能会思考,w0 所有可能路径的总分数是多少?答案非常简单是:
w0 —> w1 :
obs = [x11, x12] previous = [x01, x02]
- 将previous 扩展为:
- 将obs 扩展为:
你可能会想,为什么我们要把 previous 和obs扩展成矩阵。因为矩阵可以使总分的计算更加有效率。在下面的过程中,您将很快看到这一点。
- 将 previous、 obs 和转移分数相加:
然后:
为下一次迭代改变previous的值:
实际上,第二次迭代已经完成。假如,有些人想知道如何计算从 w0 —> w1所有可能路径
的总得分,你可以按如下方法计算。
在新的previous 我们使用的元素:
在方程中,我们可以看到:
w0 → w1 → w2:
如果你在这里阅读,你几乎完成了。事实上,在这个迭代中,我们将执行与上次迭代中描述的相同的过程。
1)将previous扩展为:
- obs 扩展为:
3)将previous,obs和 转移分数求和:
然后:
为下一次迭代改变previous的值:
如上次迭代所述,在新的previous中我们使用元素来计算总的分数:
祝贺
我们实现了目标 log(eS1 + eS2 + … + eSN),在我们的练习句中有三个单词,在我们的标签集中有两个标签。因此,应该总共有8种可能的标签路径。
在您享用一杯咖啡或一块甜蛋糕休息之前,请允许我说几句话。虽然您发现这个过程相当复杂,但是这个算法的实现要简单得多。使用计算机的优点之一是它可以进行重复工作。
现在您可以自己实现CRF损失函数,并开始训练自己的模型。
下一篇
2.6 推断新句子的标签
我们已经学习了CRF loss function的细节,下一步是当我们将我们的模型应用到一个测试集时,如何推断出一个新句子的标签。
参考文献
[1] Lample, G., Ballesteros, M., Subramanian, S., Kawakami, K. and Dyer, C., 2016. Neural architectures for named entity recognition. arXiv preprint arXiv:1603.01360. https://arxiv.org/abs/1603.01360