中文分词评价指标——正确率、召回率和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. 微信同步通讯录服务器繁忙,企业微信同步通讯录时提示 mobile existed
  2. 3.5.2 ALOHA协议
  3. c#获取对象的唯一标识_C#如何获取机器唯一标识符
  4. stm32按键矩阵代码_STM32 学习笔记---1
  5. jsp导出数据时离开页面_您应该在要离开的公司开始使用数据
  6. TCP建立连接与断开连接的过程
  7. ssm框架sql换成MySQL_搭建ssm框架,可实现登录和数据展示以及增删改查
  8. JDBC未设置socket超时导致应用程序的线程池阻塞
  9. vue global filters
  10. php怎么循环显示图片,thinkphp 循环显示图片问题!!!~~~~
  11. git checkout远程分支_Git检出远程分支
  12. ThreadPool执行异步操作
  13. croppic 图片裁剪
  14. DOM中 property 和 attribute 详解
  15. python编程题字符串的美化_Python编程题15--RGB字符串排序
  16. OSPF路由协议总结(一)
  17. 深信服研发、市场等大量岗位社招、校招内推
  18. 最大面额钞票10的21次方
  19. C++设计模式 | Factory工厂模式(简单工厂、工厂方法、抽象工厂)
  20. 师从施一公,从造纸工人到清华教授,CNS12篇,柴继杰再发Science

热门文章

  1. 2020年,程序员必看的10部影视作品!《源代码》只是其中之一
  2. 前言技术之Oauth2全方面介绍
  3. HaaS轻应用(JavaScript)总览
  4. 社会:中国成单身大国 超36%单身女性选择不婚
  5. mysql1300错误什么意思_MySQL ERROR 1300 (HY000): Invalid utf8 character string
  6. UT4418最小Linux系统搭建指南
  7. 企业远程高清会议平台视频会议系统在手机端使用的必备要求有哪些?
  8. Lessonnbsp;55nbsp;Thenbsp;Sawyernbsp;familynbsp;索耶…
  9. 打开excel服务器客户端无响应怎么办,excel服务器客户端登录不起
  10. 用它来开发“在线Excel”系统,竟如此简单!