如何在我的 CRF 中使用之前标记的标签作为特征?

How do I use previous token's label as feature in my CRF?

我正在寻找一种在 mallet 中使用以属性和标签二元组为条件的特征的方法。我仍在尝试了解如何使用刚刚生成的令牌标签作为确定下一个令牌标签的特征?生成的token的特征向量是否作为先前token的标签获得?

我是否误解了 CRF 允许使用预测的先前标签作为下一个标记的特征?

提前致谢!

Are the feature vectors for tokens generated as the labels for previous tokens obtained?

不,CRF 联合优化损失,没有像 MEMM 中那样预测标签然后使用它的从左到右的处理。 CRF 考虑了所有可能的先前标签并找到最可能的序列。

Have I misunderstood that CRF allows the usage of predicted previous label as a feature for the next token?

CRF 允许使用以前的标签作为特征;在您的情况下,它很可能已经自动发生了。我没有使用 Mallet 的经验,但在大多数开箱即用的线性链 CRF 包中,有两种功能:

  1. "state features"。这些是用户定义的每个令牌功能;他们可以使用输入序列中的任何信息(例如当前和上一个标记,当前标记的最后 3 个字母等)。每个状态特征通常以当前输出标签为条件。
  2. "transition features"。在最常见的一阶线性链 CRF 中,它是当前标签以先前标签为条件。通常这些特征是为所有可能的标签对自动生成的。

有时您还可以在依赖于当前令牌的用户定义特征上设置 (2) 转换特征。看来这就是您要找的东西,但我不确定。有些包实现了这一点(例如 wapiti),有些则没有(例如 crfsuite)。一些包允许定义任意 CRF,并使用任意特征(例如 pystruct、factorie、GRMM(?))。抱歉,我没有使用 Mallet 的经验,所以这不是一个真正的答案:)