线性链CRF分类器使用哪个激活函数?

时间:2019-10-14 13:35:05

标签: python tensorflow keras neural-network crf

我有一个序列标签模型,该模型可以预测输入序列中每个单词的标签(实质上是实体识别)。模型结构:嵌入层→BiLSTM→CRF

因此,本质上,BiLSTM基于令牌嵌入来学习特征的非线性组合,并使用这些组合来输出每个时间步长上每个可能标签的非标准化分数。然后,CRF分类器将学习如何根据此信息选择最佳标签序列。

我的CRF是keras_contrib crf的实例,该实例实现了线性链CRF(tensorflow.contrib.crf也是如此)。因此,它考虑了从一个标签到下一个标签的标签转换概率,但没有最大化全局标签序列(一般CRF会最大化)。

默认激活功能为“线性”。我的问题是,为什么它是线性的,其他激活会有什么不同?

即线性的,因为它的决定实际上已简化为预测给定标签 y -1 y t 的可能性sub> (可能被认为是线性回归问题)?还是由于其他原因而呈线性,例如让用户可以灵活地将CRF应用到他们喜欢的地方,并自己选择最合适的激活功能?

对于我的问题,我实际上应该使用softmax激活吗?我已经有一个具有类似但不同结构的单独模型:嵌入→BiLSTM→带有softmax的密集模型。因此,如果我要在线性链CRF中使用softmax激活(即在本文开头提到的Embeddings层→BiLSTM→CRF中),听起来除了可以使用从 y t-1 y t 的转移概率。

1 个答案:

答案 0 :(得分:0)

在使用Embeddings→BiLSTM→Dense + softmax时,您隐式地假定给定RNN状态,标签的可能性是条件独立的。这可能会导致标签偏差问题。标签上的分配总需要合计为一。无法表达模型不确定特定标签是否对此做出独立预测。

在CRF中,除了对隐藏状态进行评分之外,还可以使用CRF学习的过渡分数来解决此问题。标签的分数可以是任意的实数。如果模型不确定标签,则所有分数都可能很低(因为它们不必累加总和),并且来自相邻标签的预测可能有助于选择通过过渡分数选择的标签。标签的可能性不会在整个序列中分解,而是使用动态编程算法为标签的整个序列计算。

如果您使用范围有限的激活功能,它将限制可以分配给标签的分数,并且CRF可能无效。如果您认为在RNN之后需要非线性,则可以在激活选择的情况下添加一个密集层,然后进行线性投影。