在NLP中,序列标注算法是常见的深度学习模型,但是,对于序列标注算法的评估,我们真的熟悉吗?
在本文中,笔者将会序列标注算法的模型效果评估方法和的使用。
序列标注算法的模型效果评估
在序列标注算法中,一般我们会形成如下的序列列表,如下:
一般序列标注算法的格式有,,等。其中,指的是从B开头标签开始的,同一类型(比如:PER/LOC/ORG)的,非O的连续标签序列。
常见的序列标注算法的模型效果评估指标有准确率(accuracy)、查准率(percision)、召回率(recall)、F1值等,计算的公式如下:
准确率: accuracy = 预测对的元素个数/总的元素个数
查准率:precision = 预测正确的实体个数 / 预测的实体总个数
召回率:recall = 预测正确的实体个数 / 标注的实体总个数
F1值:F1 = 2 *准确率 * 召回率 / (准确率 + 召回率)
举个例子,我们有如下的真实序列和预测序列,如下:
列表中一个有9个元素,其中预测对的元素个数为6个,那么准确率为2/3。标注的实体总个数为2个,预测的实体总个数为3个,预测正确的实体个数为1个,那么precision=1/3, recall=1/2, F1=0.4。
seqeval的使用
一般我们的序列标注算法,是用脚本实现,但这是用perl语言实现的。在Python中,也有相应的序列标注算法的模型效果评估的第三方模块,那就是,其官网网址为:https://pypi.org/project/seqeval/0.0.3/ 。
支持,标注模式,可用于命名实体识别,词性标注,语义角色标注等任务的评估。
官网文档中给出了两个例子,笔者修改如下:
例子1:
输出结果如下:
例子2:
输出结果同上。
在Keras中使用seqeval
笔者一年多年写过文章:使用CRF++实现命名实体识别(NER), 我们对模型训练部分的代码加以改造,使之在训练过程中能输出F1值。
在Github上下载项目,网址为:https://github.com/percent4/DL_4_NER 。修改utils.py中的文件夹路径,以及模型训练部分的代码(DL_4_NER/Bi_LSTM_Model_training.py)如下:
模型训练的结果如下(中间过程省略):
我们修改代码,在lstm_model.fit那一行修改代码如下:
此时输出结果为:
这就是seqeval的强大之处。
关于seqeval在Keras的使用,有不清楚的地方可以参考该项目的Github网址:https://github.com/chakki-works/seqeval 。
作者:jclian,喜欢算法,热爱分享,希望能结交更多志同道合的朋友,一起在学习Python的道路上走得更远!
领取专属 10元无门槛券
私享最新 技术干货