中文分词评价指标 |
您所在的位置:网站首页 › precision单词 › 中文分词评价指标 |
中文分词评价指标——正确率、召回率和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)又称查全率:真实为正的样本中预测为正的样本 准确率(Accuracy):预测某类正确的样本比例 在某些情况下,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 前面提到的分类评估标准,但是在分词中标准答案和分词结果数不一定相等,因此要做一个思维转换。对于长度为n 的字符串,分词结果是一系列单词。设每个单词按照其在文本中的起止位置可以记作区间 [i , j],其中 因此相应的计算公式如下: 举个例子: 从图表中可以看出,重合部分就是正确部分,因此,对于分词结果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 = 0 for word in re.compile("\\s+").split(segmentation.strip()): end = start + len(word) region.append((start, end)) start = end return region def 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, 0 A, 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 += 1 else: OOV += 1 for (start, end) in A & B: word = text[start: end] if word in dic: IV_R += 1 else: OOV_R += 1 p, r = A_cap_B_size / B_size * 100, A_cap_B_size / A_size * 100 return p, r, 2 * p * r / (p + r), OOV_R / OOV * 100, IV_R / IV * 100 if __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则是对两者的一个调和平均。 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |