【问题标题】:Which actvation function to use for linear-chain CRF classifier?线性链 CRF 分类器使用哪个激活函数?
【发布时间】:2020-02-11 03:35:21
【问题描述】:

我有一个序列标记模型,它可以为输入序列中的每个单词预测一个标记(本质上是命名实体识别)。模型结构:Embeddings layer → BiLSTM → CRF

所以本质上,BiLSTM 基于令牌嵌入学习特征的非线性组合,并使用这些在每个时间步为每个可能的标签输出非标准化分数。然后 CRF 分类器学习如何在给定此信息的情况下选择最佳标签序列。

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

默认激活函数是“线性”。我的问题是,为什么它是线性的,其他激活会产生什么不同?

也就是说,它是线性的吗,因为它的决策基本上被简化为预测标签 yt 给定标签 y-1 的可能性sub> (这可能是一个线性回归问题)?还是由于其他原因它是线性的,例如让用户灵活地在任何他们喜欢的地方应用 CRF 并自己选择最合适的激活函数?

对于我的问题,我真的应该使用 softmax 激活吗?我已经有一个具有相似但不同结构的单独模型:Embeddings → BiLSTM → Dense with softmax。因此,如果我在线性链 CRF 中使用 softmax 激活(即在本文开头提到的嵌入层 → BiLSTM → CRF),听起来它几乎与那个单独的模型相同,除了能够使用从 yt-1yt 的转换概率。

【问题讨论】:

    标签: python tensorflow keras neural-network crf


    【解决方案1】:

    当使用 Embeddings → BiLSTM → Dense + softmax 时,您隐含地假设标签的可能性在给定 RNN 状态的情况下是条件独立的。这可能导致标签偏差问题。标签上的分布总是需要总和为一。没有办法表示模型不确定特定标签会对此进行独立预测。

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

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

    【讨论】:

    • 谢谢@Jindřich! “标签的可能性不是在序列上分解,而是针对整个标签序列计算” - 对于线性链 CRF 来说仍然如此,因为它们只考虑一个转换?我以为没有。 “如果您认为在 RNN 之后(需要)非线性,您可以添加一个带有您选择的激活的密集层,然后进行线性投影。”那么CRF(作为最终分类器)是否应该始终具有线性变换?如果是这样,crf 的“线性”默认激活是有道理的。关于如果/为什么额外密集层是个好主意的任何资源/提示?
    • 它甚至适用于线性链 CRF。原始的 CRF 只是关于线性链 CRF,见 eq。 1 这里:repository.upenn.edu/cgi/…
    • 我可能会先尝试不使用额外的图层。你可以尝试一些关于使用 LSTM-CRF 进行命名实体识别的论文,如果他们做了额外的层。
    猜你喜欢
    • 2018-09-29
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-19
    • 2016-02-28
    • 2017-12-20
    • 1970-01-01
    相关资源
    最近更新 更多