我想对 Huggingface Transformer Trainer (UIE) 的微调过程进行 10 倍交叉验证。我正在尝试 UIE 模型,它基本上适用于基本的 Transformer 架构。
为了实现 10 折交叉验证,我需要将数据集分成 10 个不同的折叠,以便训练和评估集得到切换。下图解释了 k=5 的情况(来源):
但是 Trainer 类需要一个
eval_dataset
(Code)。
trainer = ConstraintSeq2SeqTrainer(
model=model,
args=training_args,
train_dataset=train_dataset if training_args.do_train else None,
eval_dataset=eval_dataset if training_args.do_eval else None,
tokenizer=tokenizer,
data_collator=data_collator,
compute_metrics=compute_metrics if training_args.predict_with_generate else None,
decoding_type_schema=record_schema,
decoding_format=data_args.decoding_format,
source_prefix=prefix,
task=data_args.task,
)
我知道验证数据集不是测试集,因为在脚本末尾评估测试结果:
if training_args.do_predict:
logger.info("*** Test ***")
test_results = trainer.predict(
test_dataset,
metric_key_prefix="test",
max_length=data_args.val_max_target_length,
num_beams=data_args.num_beams,
)
test_metrics = test_results.metrics
test_metrics["test_loss"] = round(test_metrics["test_loss"], 4)
output_test_result_file = os.path.join(training_args.output_dir, "test_results_seq2seq.txt")
当我尝试以 json 形式传递空验证数据集或将
eval_dataset
设置为 None 时,出现错误。所以在我看来,训练器确实需要一个评估数据集。所以我有以下问题:
您可以查看Microsoft NNI。它是一个有助于调整模型并以非常交互式和直观的方式呈现的框架。