transformers基础组件之Trainer
·
一:Trainer简介
- Trainer是transformers库中提供的训练的函数,内部封装了完整的训练、评估逻辑,并集成了多种的后端,如DeepSpeed、Pytorch、FSDP等,搭配TrainingArguments对训练过程中的各项参数进行配置,可以非常方便快捷地启动模型单机/分布式训练。
- 需要注意的是
- 使用Trainer进行模型训练对模型的输入输出是有限制的,要求模型返回元组或者ModelOutput的子类。
- 如果输入中提供了labels,模型要能返回loss结果,如果是元组,要求loss为元组的第一个值。
二:TrainingArguments + Trainer代码优化
原始代码:transformers基础组件之Model_transformer-model怎么用-CSDN博客
文本分类实例
Step1 导入相关包
from transformers import AutoTokenizer, AutoModelForSequenceClassification, Trainer, TrainingArguments
from datasets import load_dataset
Step2 加载数据集
dataset = load_dataset("csv", data_files="./ChnSentiCorp_htl_all.csv", split="train")
dataset = dataset.filter(lambda x: x["review"] is not None)
dataset
Step3 划分数据集
datasets = dataset.train_test_split(test_size=0.1)
datasets
Step4 数据集预处理
import torch
tokenizer = AutoTokenizer.from_pretrained("hfl/rbt3")
def process_function(examples):
tokenized_examples = tokenizer(examples["review"], max_length=128, truncation=True)
tokenized_examples["labels"] = examples["label"]
return tokenized_examples
tokenized_datasets = datasets.map(process_function, batched=True, remove_columns=datasets["train"].column_names)
tokenized_datasets
Step5 创建模型
model = AutoModelForSequenceClassification.from_pretrained("hfl/rbt3")
Step6 创建评估函数
import evaluate
acc_metric = evaluate.load("accuracy")
f1_metric = evaluate.load("f1")
def eval_metric(eval_predict):
predictions, labels = eval_predict
predictions = predictions.argmax(axis=-1)
acc = acc_metric.compute(predictions=predictions, references=labels)
f1 = f1_metric.compute(predictions=predictions, references=labels)
acc.update(f1)
return acc
Step7 创建TrainingArguments
train_args = TrainingArguments(output_dir="./checkpoints", # 输出文件夹
per_device_train_batch_size=64, # 训练时的batch_size
per_device_eval_batch_size=128, # 验证时的batch_size
logging_steps=10, # log 打印的频率
evaluation_strategy="epoch", # 评估策略
save_strategy="epoch", # 保存策略
save_total_limit=3, # 最大保存数
learning_rate=2e-5, # 学习率
weight_decay=0.01, # weight_decay
metric_for_best_model="f1", # 设定评估指标
load_best_model_at_end=True) # 训练完成后加载最优模型
Step8 创建Trainer
from transformers import DataCollatorWithPadding
trainer = Trainer(model=model,
args=train_args,
train_dataset=tokenized_datasets["train"],
eval_dataset=tokenized_datasets["test"],
data_collator=DataCollatorWithPadding(tokenizer=tokenizer),
compute_metrics=eval_metric)
Step9 模型训练
trainer.train()
Step10 模型评估
trainer.evaluate(tokenized_datasets["test"])
Step11 模型预测
trainer.predict(tokenized_datasets["test"])
更多推荐


所有评论(0)