如何基于Transformers AdapterTrainer计算分类报告及F1分数?
解决方法
你的代码里F1分数计算出错了,问题出在f1_score的传参逻辑上——你传的是preds == eval_pred.label_ids这个布尔数组,这不是正确用法,f1_score需要直接传入预测标签和真实标签。另外要生成完整分类报告,需要导入sklearn的相关指标工具。
修正步骤:
- 先导入需要的评估指标模块:
from sklearn.metrics import f1_score, classification_report
- 重写
compute_metrics函数,正确计算准确率、F1分数,同时生成完整分类报告:
def compute_metrics(eval_pred): preds = np.argmax(eval_pred.predictions, axis=1) labels = eval_pred.label_ids # 计算准确率 accuracy = (preds == labels).mean() # 计算F1分数:二分类任务用"binary",多分类按需选"macro"/"weighted" f1 = f1_score(labels, preds, average="binary") # 生成完整分类报告,转为字符串方便查看 report = classification_report(labels, preds) # 返回指标字典,分类报告单独存入键值对 return { "acc": accuracy, "f1": f1, "classification_report": report }
- 保持
AdapterTrainer的调用不变,运行后在评估阶段就能看到包含准确率、F1分数和完整分类报告的结果。
关键说明:
average参数:如果是二分类任务(比如你的亚马逊情感极性任务)用"binary";如果是多分类,根据需求选择"macro"(各类别F1算术平均)或"weighted"(按样本量加权平均)。- 分类报告里会包含精确率、召回率、F1分数、支持样本数等详细信息,可全面评估模型性能。
内容的提问来源于stack exchange,提问作者Shorouk Adel
相关产品推荐
相关产品推荐

