Here 是一本为 Spacy NER 模型创建混淆矩阵的好书。
它基于 Spacy 使用的 BILOU 格式。它适用于小部分文本,但在评估较大的文档时,混淆矩阵很难阅读,因为大部分文本都是 O 标记的。
您可以做的是创建两个列表,一个包含每个单词的预测值,一个包含每个单词的真实值,然后使用 sklearn.metrics.confusion_matrix() 函数进行比较。
from sklearn.metrics import confusion_matrix
y_true = [O,O,O,B-PER,I-PER]
y_pred = [O,O,O,B-PER,O]
confusion_matrix(y_true, y_pred, labels=["O", "B-PER", "I-PER"])
您也可以使用同一库中的 plot_confusion_matrix() 函数来获得视觉输出,但这需要 scikit-learn 0.23.1 或更高版本,并且只能与 scikit-learn 分类器一起使用。
正如this stackoverflow 问题中所写,这是一种使用 scikit-learn 中的confusion_matrix() 而不使用它们的情节的方法。
from sklearn.metrics import confusion_matrix
labels = ['business', 'health']
cm = confusion_matrix(y_test, pred, labels)
print(cm)
fig = plt.figure()
ax = fig.add_subplot(111)
cax = ax.matshow(cm)
plt.title('Confusion matrix of the classifier')
fig.colorbar(cax)
ax.set_xticklabels([''] + labels)
ax.set_yticklabels([''] + labels)
plt.xlabel('Predicted')
plt.ylabel('True')
plt.show()