CRF中的向前和向后算法

时间:2018-09-30 12:34:12

标签: algorithm github forward crf log-likelihood

在有关CRF的论文(如thisthis)中,所有作者都提到了向前-向后算法,但是GitHub中的实现(或PyTorch tutorial中的基本实现)似乎仅使用正向算法来计算SGD所要优化的负对数似然率。

如果我想对BiLSTM功能进行NER训练,而我将要进行的唯一查询类型就像“给一个句子,找到命名的实体”一样,我是否需要前向后向算法?或更笼统地说,这两种算法有什么区别?何时使用哪一种?

2 个答案:

答案 0 :(得分:1)

我认为PyTorch教程中仅使用正向算法的原因是,为了计算分区函数,只需要正向或反向传递。尽管如此,仍需要使用前向后向算法来计算边际概率。

答案 1 :(得分:0)

BiLSTM为您提供了更多背景信息并可能带来更好的结果。考虑以下示例:

  1. 泰迪熊是熊形式的毛绒玩具。
  2. 泰迪·罗斯福(Teddy Roosevelt)是美国第26任总统。

在第一种情况下,“泰迪”不是NE,但是在第二种情况下,“泰迪”是NE。 BiLSTM会更好地注意到这一点,因为它不仅显示过去状态,而且显示未来状态(即“熊”和“罗斯福”)。

维基百科上有关BiLSTM的信息:

“一般训练过程如下:对于正向传递,先传递正向状态和反向状态,然后传递输出神经元。对于反向传递,首先传递输出神经元,然后传递正向状态和反向状态接下来传递。完成前进和后退传递后,权重将更新”