在条件随机字段中,是否必须使用与后续令牌相关的功能?

数据挖掘 机器学习 分类 特征选择
2021-09-16 18:46:46

我正在训练 CRF 分类器将文档行分类为标题(第一级)、标题(第二级)或简单文本。

我正在使用条件随机场来考虑顺序方面的能力。

阅读一些教程,我注意到通常,在这些特征中,有一些与前面或后面的标记相关的特征。

[...]
    if i > 0:
        word1 = sent[i-1][0]
        postag1 = sent[i-1][1]
        features.update({
            '-1:word.lower()': word1.lower(),
            '-1:word.istitle()': word1.istitle(),
            '-1:word.isupper()': word1.isupper(),
            '-1:postag': postag1,
            '-1:postag[:2]': postag1[:2],
        })
    else:
        features['BOS'] = True
[...]

我想知道顺序方面是从这些特征中学到的,还是在 CRF 中与生俱来的。换句话说,我们是否需要这些与其他代币相关的特征?

1个回答

换句话说,我们是否需要这些与其他代币相关的特征?

不,不需要这些功能。但它们通常很有用:CRF 处理标签之间的顺序依赖关系,但是由您来提供相关功能,特别是在需要时表示(某些)功能之间的依赖关系。

对于文本,连续标记之间的这种关系通常是一个相关指标。我建议您尝试两个版本,不带和带此功能,在后一种情况下您可能会观察到更高的性能。根据我的经验,尝试不同的组合通常是值得的,包括尝试后退两三步的功能。