源文地址:https://createmomo.github.io/2017/12/07/CRF-Layer-on-the-Top-of-BiLSTM-8/
3.4 Demo
在本节中,我们将分别制作两个只有2个单词和1个单词的虚假句子。此外,我们也会随机产生他们的真实答案。最后,我们将展示如何使用Chainer v2.0训练CRF层。所有代码包括CRF层都可以 从GitHub](https://github.com/createmomo/CRF-Layer-on-the-Top-of-BiLSTM)获得。
首先,我们导入我们自己的CRF层含义,“MyCRFLayer”。
我们假设,在我们的数据集中我们只有两个标签(例如B-Person, O)
下面的代码块将生成两个句子,xs = [x1, x2]。句子x1有两个单词,x2只有一个单词。
需要注意的是,x1和x2的元素不是词嵌入,而是BiLSTM层的发射分数,这里没有实现。
例如,在句子x1中我们有两个词w0和w1,并且x1是一个形状为(2,2)的矩阵。第一个“2”表示它有两个单词,第二个“2”表示在我们的数据集中有两个标签,如下表所示。
x1 | B-Person | O |
---|---|---|
w0 | 0.1 | 0.65 |
w1 | 0.33 | 0.99 |
接下来,我们应该为这两个句子加上真实的标签。
下面是随机生成的基本事实。
虽然我们并没有的BiLSTM层,但是并不会影响我们如何在chainer中训练一个模型。我们模拟了BiLSTM层的输出和真实答案。因此,我们会使用一些优化器来优化CRF层。
在本文中,我们使用随机梯度下降法来训练我们的模型。(如果你现在还不熟悉培训方法,你可以以后再学习。)这个优化器将根据预测标签和真值标签之间的损失更新CRF层中的参数(如:转移矩阵)。
CRF层由标签的数量初始化(不包括额外添加的开始和结束)。
然后我们就可以开始训练CRF层了。
正如我们的代码输出所示,损失正在减少,CRF层正在学习(预测正在变得正确)。
3.5 GitHub
演示和CRF层代码可以在GitHub上找到。您将看到,代码可能并不完美。因为为了便于理解,有些实现非常简单。我相信它可以被优化成一个更高效的算法。
在结束本系列文章之前,我必须感谢所有阅读这些文章的人。另外,希望你喜欢CRF层的解释。
参考文献
[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