诸如词性标注、命名实体识别等NLP任务都是属于序列标注类型的任务的,本质属于分类任务,对于序列标注类型的模型的结果评估也有对应的模块实现,这里主要是简单进行使用说明。
模块名叫 seqeval,GitHub地址在这里。
seqeval模块支持的标注格式如下所示:
IOB1
IOB2
IOE1
IOE2
IOBES
提供的评估指标方法如下所示:
metrics | description |
---|---|
accuracy_score(y_true, y_pred) | Compute the accuracy. |
precision_score(y_true, y_pred) | Compute the precision. |
recall_score(y_true, y_pred) | Compute the recall. |
f1_score(y_true, y_pred) | Compute the F1 score, also known as balanced F-score or F-measure. |
classification_report(y_true, y_pred, digits=2) | Build a text report showing the main classification metrics. digits is number of digits for formatting output floating point values. Default value is 2 . |
可以看到跟分类模型几乎是完全一样的,主要还是:准确率、精确率、召回率、F1值和一个分类评估报告功能。
安装方式很简单,可以直接使用pip进行安装,具体的安装命令如下:
安装CPU版本
pip install seqeval[cpu]
安装GPU版本
pip install seqeval[gpu]
官网也给了简单的实例:
from seqeval.metrics import accuracy_score
from seqeval.metrics import classification_report
from seqeval.metrics import f1_score
y_true = [['O', 'O', 'O', 'B-MISC', 'I-MISC', 'I-MISC', 'O'], ['B-PER', 'I-PER', 'O']]
y_pred = [['O', 'O', 'B-MISC', 'I-MISC', 'I-MISC', 'I-MISC', 'O'], ['B-PER', 'I-PER', 'O']]
f1_score(y_true, y_pred)
accuracy_score(y_true, y_pred)
classification_report(y_true, y_pred)
我们执行结果如下:
也可以作为回调函数的形式与Keras结合使用,简单的实例如下所示:
labels = ['O', 'B-MISC', 'I-MISC', 'B-ORG', 'I-ORG', 'B-PER', 'B-LOC', 'I-PER', 'I-LOC', 'sO']
id2label = dict(zip(range(len(labels)), labels))
callbacks = [F1Metrics(id2label)]
model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=epochs,
batch_size=batch_size, verbose=1, callbacks=callbacks)
更多详细的内容可以到官方仓库前去学习使用。