中文分词评价指标——正确率、召回率和F1

在机器学习中的模型评价指标有准确率(precision)召回率(recall)准确率(Accuracy)和F值。

二分类的混淆矩阵:

真实值\预测值 Positive(1) Negative(0)
Positive(1)

True Positive

(TP)

False Positive

(FP)

Negative(0)

False Negative

(FN)

True Negative

(TN)

其中,TP代表预测是正样本(1),真实为正样本(1),预测对了;

FN代表预测是正样本(1),真实为负样本(0),预测错了;

FP代表预测是负样本(0),真实为正样本(1),预测错了;

TN代表预测是负样本(0),真实为负样本(0),预测对了。

精准率(Precision)

精准率(Precision)又称查准率:预测为正的样本中真实为正的样本

召回率(Recall)

召回率(Recall)又称查全率:真实为正的样本中预测为正的样本

准确率(Accuracy)

准确率(Accuracy):预测某类正确的样本比例

F值(F-Measure)(F-Score)

在某些情况下,P和R是矛盾的,可以通过P-R图进行表示,F值是综合衡量两者的指标。

如何理解P-R(精确率-召回率)曲线呢?或者说这些曲线是根据什么变化呢?

以逻辑回归举例,其输出值是0-1之间的数字。因此,如果我们想要判断用户的好坏,那么就必须定一个阈值。比如大于0.5指定为好用户,小于0.5指定为坏用户,然后就可以得到相应的精确率和召回率。但问题是,这个阈值是我们随便定义的,并不知道这个阈值是否符合我们的要求。因此为了寻找一个合适的阈值,我们就需要遍历0-1之间所有的阈值,而每个阈值都对应一个精确率和召回率,从而就能够得到上述曲线。

根据上述的P-R曲线,怎么判断最好的阈值点呢?首先我们先明确目标,我们希望精确率和召回率都很高,但实际上是矛盾的,上述两个指标是矛盾体,无法做到双高。因此,选择合适的阈值点,就需要根据实际问题需求,比如我们想要很高的精确率,就要牺牲掉一些召回率。想要得到很高的召回率,就要牺牲掉一些精准率。但通常情况下,我们可以根据他们之间的平衡点,定义一个新的指标:F1分数(F1-Score)。F1分数同时考虑精确率和召回率,让两者同时达到最高,取得平衡。上图P-R曲线中,平衡点就是F1值。

F = \frac{(a^2 + 1)P*R}{a^2(P+R)}

当参数a=1时,就是F1

在中文分词模型中的正确率、召回率和F值

前面提到的分类评估标准,但是在分词中标准答案和分词结果数不一定相等,因此要做一个思维转换。对于长度为n 的字符串,分词结果是一系列单词。设每个单词按照其在文本中的起止位置可以记作区间 [i , j],其中。那么标准答案所有区间构成集合A为正类,其它情况作为负类。同时,分词结果所有单词构成的区间集合为B。

因此相应的计算公式如下:

举个例子:

从图表中可以看出,重合部分就是正确部分,因此,对于分词结果1来说,精确率和召回率均为0,因为没有重合部分。对于分词结果2来说都为1.

下面再看下一个例子:

此时的精确率为:3/5 =0.6 召回率为:3/6 =0.5

举例说明

标准分词A: ['结婚',‘的’,‘和’,‘尚未’,‘结婚’,‘的’,‘都’,‘应该’,‘好好’,‘考虑’,‘一下’,‘人生’,‘大事’]

标准区间A:[1,2],[3,3],[4,4],[5,6],[7,8],[9,9],[10,10],[11,12],[13,14],[15,16],[17,18],[19,20],[21,22]

分词结果B:['结婚',‘的’,‘和尚’,‘未结婚’,‘的’,‘都’,‘应该’,‘好好考虑’,‘一下’,‘人生大事’]

分词区间B:[1,2],[3,3],[4,5],[6,7,8],[9,9],[10,10],[11,12],[13,14,15,16],[17,18],[19,20,21,22]

重复词语A∩B: ['结婚',‘的’,‘的’,‘都’,‘应该’,‘一下’]

重复区间A∩B:[1,2],[3,3],[9,9],[10,10],[11,12],[17,18]

Precision = 6/10 =0.6

Recall = 6/13 = 0.4615

F1 = 2PR/(P+R) = 2*0.6*0.4615/(0.6+0.4615)=0.5217

OOV指的是“未登录词”(Out Of Vocabulary)的简称,也就是新词,已知词典中不存在的词。出现OOV的原因一方面可能是因为产生了有意义的新词而词典并没有收录;另一方面可能是因为分词器产生的错误无意义的分词结果,这当然也不会出现在词典中。IV是指“登录词”(In Vocabulary),也就是已经存在在字典中的词。而OOV Recall和IV Recall分别指的是OOV的召回率和IV的召回率。

OOV Recall=重复词区间未在词典中出现的词/标准分词中未在词典中出现的词=1/3=0.333

IV Recall=重复词区间在词典中出现的词/标准分词在词典中出现的词=5/10=0.5

需要注意的是重复词区间未在词典中出现的词就意味着未在字典中出现的新词是有意义的,只是字典没有收录而已;同理标准分词中未在词典中出现的词就更是如此。同时也可以将两者分别称为重复词区间有意义的新词所有有意义的新词。有意义的新词越多也就表示你用来分词的字典收录越不全(可能也会因为词语的颗粒度大小造成),而OOV recall越低也就意味着词典分词器对有意义新词的发现或者说查找能力越低。

同理,从IV 召回率的计算公式可以发现重复词区间在词典中出现的词指的就是分词得到的正确部分(即正样本);标准分词中在词典中出现的词指的就是所有正样本。因此,IV 召回率就可以来衡量词典中的词被正确找回的概率。如果IV召回率低,就说明字典分词器连词典中的词汇都无法百分之百的发现或者找回,说明其消歧能力不好。例如“商品,和服,服务”三个词都在词典中,词典分词依然可能分布对句子”商品和服务“。

代码实现:

# -*- coding: utf-8 -*-
"""
Created on Fri Dec 25 09:32:58 2020@author: vip
"""import re"""
将分词结果转换为区间
:param segmentation: 商品 和 服务
:return: [(0, 2), (2, 3), (3, 5)]
"""
def to_region(segmentation: str) -> list:region = []start = 0for word in re.compile("\\s+").split(segmentation.strip()):end = start + len(word)region.append((start, end))start = endreturn regiondef prf(gold: str, pred: str, dic) -> tuple:"""计算P、R、F1:param gold: 标准答案文件,比如“商品 和 服务”:param pred: 分词结果文件,比如“商品 和服 务”:param dic: 词典:return: (P, R, F1, OOV_R, IV_R)"""A_size, B_size, A_cap_B_size, OOV, IV, OOV_R, IV_R = 0, 0, 0, 0, 0, 0, 0A, B = set(to_region(gold)), set(to_region(pred))A_size += len(A)B_size += len(B)A_cap_B_size += len(A & B)text = re.sub("\\s+", "", gold)for (start, end) in A:word = text[start: end]if word in dic:IV += 1else:OOV += 1for (start, end) in A & B:word = text[start: end]if word in dic:IV_R += 1else:OOV_R += 1p, r = A_cap_B_size / B_size * 100, A_cap_B_size / A_size * 100return p, r, 2 * p * r / (p + r), OOV_R / OOV * 100, IV_R / IV * 100if __name__ == '__main__':dic = ['结婚', '尚未', '的', '和', '青年', '都', '应该', '好好考虑', '自己',  '人生', '大事']gold = '结婚 的 和 尚未 结婚 的 都 应该 好好 考虑 一下 人生 大事'pred = '结婚 的 和尚 未结婚 的 都 应该 好好考虑 一下 人生大事'print("Precision:%.2f Recall:%.2f F1:%.2f OOV-R:%.2f IV-R:%.2f" % prf(gold, pred, dic))

结果:

总结

精确率、召回率、F-score、OOV召回率、IV召回率,其中前面三种指标可以用来衡量任意一种分词器分词结果的好坏;而后两种指标则是用来衡量基于词典分词模型好坏的一个评估指标。同时,一定需要明白的是:精确率计算的是预测对的正样本数占整个预测为正样本数的比重,而召回率计算的是预测对的正样本占整个真实正样本的比重,而F-score则是对两者的一个调和平均。

中文分词评价指标——正确率、召回率和F1相关推荐

  1. 信息检索系统常用的评价指标(准确率,召回率,F1,MAP,NDCG)

    1. 准确率,召回率,F1值 首先介绍三种最常用的无序的评价指标,它们适用于一种相对简单的情况:在搜索结果中仅考虑返回的文档是否与查询相关,而不考虑这些返回文档在结果列表中的相对位置和顺序. 准确率( ...

  2. 机器学习评价指标:准确度,精确度,召回率,F1值

    1.简单理解 准确率(accuracy):所有预测样本(包括负类)的正确率 精确度(precision):所有预测为正类的正确率 召回率(recall):所有原本为正类被预测为正类的比例 F1值:准确 ...

  3. 详细理解准确率、精准率、召回率,F1值等评价指标的含义

    转载文章 原博客地址:详解准确率.精确率.召回率.F1值等评价指标的含义 机器学习问题之中,通常需要建立模型来解决具体问题,但对于模型的好坏,也就是模型的泛化能力,如何进行评估?我们可以定一些评价指标 ...

  4. 信息检索(IR)的评价指标介绍-准确率、召回率、F1、mAP、ROC、AUC

    在信息检索.分类体系中,有一系列的指标,搞清楚这些指标对于评价检索和分类性能非常重要,因此最近根据网友的博客做了一个汇总. 准确率.召回率.F1 信息检索.分类.识别.翻译等领域两个最基本指标是召回率 ...

  5. 模型评价指标:准确率、精确率、召回率、F1值,混淆矩阵

    介绍模型四个评价指标之前,先介绍一下混淆矩阵(Confusion Matrix): 混淆矩阵 (Confusion Matrix) 真实值 正样本(Position) 负样本(Negative) 预测 ...

  6. 看精确召回率和f1得分

    Terminology of a specific domain is often difficult to start with. With a software engineering backg ...

  7. 一文详尽混淆矩阵、准确率、精确率、召回率、F1值、P-R 曲线、ROC 曲线、AUC 值、Micro-F1 和 Macro-F1

    文章目录 二分类的评价指标 一.混淆矩阵与 TP.TN.FP.FN 二.准确率.精确率.召回率.F1值 三.P-R 曲线 四.ROC 曲线.AUC 值 五.P-R曲线和ROC曲线有什么区别,如何选择? ...

  8. 机器学习性能指标精确率、召回率、F1值、ROC、PRC与AUC

    精确率.召回率.F1.AUC和ROC曲线都是评价模型好坏的指标,那么它们之间有什么不同,又有什么联系呢.下面让我们分别来看一下这几个指标分别是什么意思. 针对一个二分类问题,将实例分成正类(posti ...

  9. 详解准确率、精确率、召回率、F1值的含义

    机器学习问题之中,通常需要建立模型来解决具体问题,但对于模型的好坏,也就是模型的泛化能力,如何进行评估呢? 很简单,我们可以定一些评价指标,来度量模型的优劣.比如准确率.精确率.召回率.F1值.ROC ...

最新文章

  1. 电子设计搜索引擎引入分析和见解
  2. 【分块】#6284. 数列分块入门 8(区间赋值为相同的值,查询区间某值个数)
  3. 程序员的魔法——用Masking GAN让100,000人都露出灿烂笑容
  4. Eclipse中新建jsp提示The superclass javax.servlet.http.HttpServlet was not found on the Java Build Path
  5. Android音频开发(4):如何存储和解析wav文件
  6. kitkat-s5p4418drone 记录
  7. php 时间错误,PHP xdebug调试trace记录时间错误
  8. IndexError: invalid index of a 0-dim tensor. Use `tensor.item()` in Python or `tensor.item<T>()` in
  9. php+数组存放文件名_php将数组存储为文本文件的三种方法
  10. 终于有人把数据湖讲明白了
  11. python 艺术照片滤镜_Python实现PS滤镜Fish lens图像扭曲效果示例
  12. 多色复古毕业论文答辩PPT模板——办公资源网
  13. 【一文讲通】BLDC的六步法PMSM的FOC法综合
  14. 2015-2022年历年真题考研数学二难度概述
  15. C#: 数字经纬度和度分秒经纬度间的转换
  16. UFS Clk Gate介绍
  17. ADL SDK V10.2 中文文档
  18. oracle允许远程访问
  19. 访问ftp服务器网页,访问ftp服务器是网页
  20. 以太坊测试网络rinkeby交易测试

热门文章

  1. 最好懂的IC芯片制造流程详解,值得收藏!
  2. ACWing算法提高课 友好城市
  3. 虚幻4渲染编程(图元汇编篇)【第四卷:自定义模型资源管线】
  4. App启动图片变形,拉伸
  5. mysql datetime 计算相隔时间
  6. 围棋,人vs人(自行判断输赢)
  7. 【每周话题第七期】你是#新生代农民工#吗?你赞同IT从业者被纳入新生代农民工吗?
  8. 【英语天天读】I have as much soul as you
  9. Inconsistent namespace mapping properties. Cannot initiate connection as SYS
  10. 【服务器搭建个人网站】教程四:域名怎样进行备案?快来看~