生成式任务输入就是标签

transformers在进入compute_metrics前会有一个判断,源码如下:

# 版本 transformers==4.41.2
# 在trainer.py 的 3842 行
# Metrics!
if (
    self.compute_metrics is not None
    and all_preds is not None
    and all_labels is not None
    and not self.args.batch_eval_metrics
):
    if args.include_inputs_for_metrics:
        metrics = self.compute_metrics(
            EvalPrediction(predictions=all_preds, label_ids=all_labels, inputs=all_inputs)
        )
    else:
        metrics = self.compute_metrics(EvalPrediction(predictions=all_preds, label_ids=all_labels))
elif metrics is None:
    metrics = {}

生成式任务如果没有标签字段,即labels那么这里的all_labels is not None就会是false,从而无法进入compute_metrics方法。
此时可以在TrainingArguments中加入一个变量label_names把输入文本作为标签,如下:

training_args = TrainingArguments(
...
label_names=['input_ids'], # 这里假设我的文本输入叫 ‘input_ids’
...
)

这样就可以进入compute_metrics函数了。
此外,若需要将输入的变量传入compute_metrics,可以在TrainingArguments中设置include_inputs_for_metrics=True

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐