1
from sklearn_crfsuite import CRF, metrics

X_train,y_train
X_dev,  y_dev
X_test, y_test

# baseline run
baseline = CRF(algorithm='lbfgs', c1=0.1, c2=0.1, max_iterations=100, all_possible_transitions=True)
baseline.fit(X_train, y_train)
print('Overall Accuracy on Test Set:', baseline.score(X_test, y_test), '\n')
labels = list(baseline.classes_)
labels.remove('O')
sorted_labels = sorted(labels, key = lambda name:(name[1:], name[0]))
print(metrics.flat_classification_report(y_test, baseline.predict(X_test), labels=sorted_labels, digits=4))

我将一个数据集(其中每个文本由元组列表(令牌、POS 标签、OBI 标签)表示)拆分为训练集、开发集和测试集,按大小比 0.6:0.2:0.2 并尝试做名称实体条件随机场 ( CRF ) 的识别 ( NER ) 使用. 在开发集上优化超参数后,测试集上的加权平均 F1 分数变得低于基线运行中的值,其中超参数是盲目规定的。我觉得这违反直觉。sklearn_crfsuite

我知道这个问题很模糊。但是关于在哪里看有什么建议吗?我怎样才能确定这是正常情况还是我的模型在某个地方出错了?我应该使用更大的开发集吗?通过交叉验证来优化超参数是否更合适?还是我需要回去修改功能?

顺便说一句,我知道不同的数据源可能会导致这个问题,所以我特别检查。文本长度、POS 标签和 OBI 标签的分布在训练集、开发集和测试集中看起来都非常相似。

4

0 回答 0