首页 > 编程知识 正文

f1游戏,f1官网中文

时间:2023-05-03 16:43:54 阅读:114486 作者:3974

中文分词评价指标——的正确率、召回率和F1在机器学习中的模型评价指标有准确率(precision )召回率(recall )准确率(Accuracy )和f值。

二分类混淆矩阵:

真值预测值positive(1) Negative(0)0) positive(1) True Positive

(TP ) )。

假定位

(FP )

否定(0)假否定

(FN ) )。

真否定

(TN ) )。

其中TP为预测的正样本(1),真实为正样本(1),且预测正确;

FN预测为正样本(1),真实为负样本(0),预测错误;

FP预测为负样本(0),真实为正样本(1),预测错误;

TN是预测为负样本(0),真实为负样本(0),预测正确。

精确度率(Precision )精确度率(Precision )也称为Precision,是被预测为正的样本中真为正的样本

召回率(Recall )召回率(Recall )也称为召回率)真为正的样本中被预测为正的样本

精确度(Accuracy )精确度(Accuracy ) :预测某些正确样本的百分比

f值(f -度量) ) F-Score )在某些情况下p和r是矛盾的,可以用综合衡量两者的指标P-R图来表示。

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

在逻辑回归示例中,输出值是介于0和1之间的数字。 因此,如果想判断用户的好坏,就需要设定阈值。 例如,如果将大于0.5的用户指定为好用户,将小于0.5的用户指定为坏用户,则可以得到相应的准确率和召回率。 但问题是,这个阈值是我们随意定义的,不知道这个阈值是否满足我们的要求。 因此,为了找到合适的阈值,需要遍历0-1之间所有的阈值,每个阈值都对应正确率和召回率,因此可以得到上述曲线。

根据上述P-R曲线,如何判断最佳阈值点? 让我们先明确目标。 我们是希望精确率和召回率都很高,但实际上是矛盾的。 上述两个指标是矛盾体,不能双重高。 因此,要选择合适的阈值点,根据实际的问题需要,例如,如果需要高精度,就需要牺牲召回率。 要得到高召回率,必须牺牲精度。 但是,通常可以根据他们的平衡来定义新的指标。F1分数(F1-Score)F1评分同时考虑准确率和召回率,使两者同时达到最高,达到平衡。 在上图的P-R曲线中,平衡点为F1值。

f=FRAC{(a^21 ) p*r}{a^2) pr}

在参数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,]

结果b :“结婚”、“的”、“温暖的丸子”、“未结婚”、“的”、“都”、“好好想想”、“有点”、“人生大事”

分词区间b:[ 1,2 ]、[ 3,3 ]、[ 4,5 ]、[ 6,7,8 ]、[ 9,9 ]、[ 10,10 ]、[ 11,12 ]、[ 13,14,15,16 ]、[ 116 ]

(a ) b ) )、“结婚”、“的”、“的”、“都”、“应该”、‘一下'] )

区间ab ([ 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 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, 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则是对两者的一个调和平均。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。