有关于huggingface evaluate的使用

文章介绍了在transformers库的新版本中,如何使用evaluate模块来计算准确性、F1、精确率和召回率等常见评估指标。对于单个和多个指标的计算,提供了详细的代码示例。在多分类问题中,需要注意f1指标的平均方式。同时强调了不同版本的evaluate可能存在的接口差异。
摘要由CSDN通过智能技术生成

老版本Transformer的from datasets import load_metric,在新版本中被替换成了evaluate

这个包挺难用的,而且不同版本的接口都有点不太一样,本博客以transformers==4.18.0, evaluate==0.4.0为例,示范一下如何使用evaluate进行常见的metrics的计算。

  1. 计算单个metric
pred = [0,1,2,2,3]
ref = [0,2,2,3,3]

acc_metric = evaluate.load("accuracy")
acc_metric.compute(predictions=pred, references=ref)

输出(python字典):

{'accuracy': 0.6}
  1. 同时计算多个metric

利用combine可以同时load多个metric,compute之后返回所有metric的分数。

pred = [0,1,1,1,0]
ref = [0,0,1,0,1]

metrics = evaluate.combine(["accuracy", "f1", "precision", "recall"])
metrics.compute(predictions=pred, references=ref)

输出:

{'accuracy': 0.4, 'f1': 0.4, 'precision': 0.3333333333333333, 'recall': 0.5}

这里要注意,f1的接口默认average的方式是binary,所以上述二分类问题直接计算不会有问题。但是如果是多分类,就不能使用combine了,因为acc是没有这个**kwargs的。

  1. 计算多个metric(多分类)

这种情况下,得单独load每个metric,然后再分别compute。compute的时候,f1记得传入参数“average”:

pred = [0,1,2,2,3]
ref = [0,2,2,3,3]

acc_metric = evaluate.load("accuracy")
f_metric = evaluate.load("f1")
r_metric = evaluate.load('recall')
p_metric = evaluate.load('precision')

result = dict()
result.update(acc_metric.compute(predictions=pred, references=ref))
result.update(f_metric.compute(predictions=pred, references=ref,average="macro"))
result.update(p_metric.compute(predictions=pred, references=ref,average="macro"))
result.update(r_metric.compute(predictions=pred, references=ref,average="macro"))

print(result)

这样的话就能实现相同的效果,输出:

{'accuracy': 0.4, 'f1': 0.4, 'precision': 0.41666666666666663, 'recall': 0.41666666666666663}

总结

直接load metric,然后compute,就能获得一个字典。
如果要同时计算多个metric,而且这些metric的接口一致,则利用combine;如果这些metrics的接口不一致(例如,f1相较于acc,会额外需要average参数),则只能分别loadcompute

注意,以上结论只针对于evaluate==0.4.0这个版本,可能不同版本结论不一样。例如:

有些版本可以这么写,直接在load的时候传入metric需要的参数:
在这里插入图片描述

参考:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值