首先加载Yelp Reviews数据集:
from datasets import load_dataset
dataset = load_dataset("yelp_review_full")
dataset["train"][100]
如您现在所知,您需要一个分词器来处理文本,并包括填充和截断策略来处理任何可变序列长度。若要在一个步骤中处理数据集,请使用 Datasets map 方法对整个数据集应用预处理函数:
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-cased")
def tokenize_function(examples):
return tokenizer(examples["text"], padding="max_length", truncation=True)
tokenized_datasets = dataset.map(tokenize_function, batched=True)
可以创建完整数据集的较小子集进行微调,以减少所需的时间:
small_train_dataset = tokenized_datasets["train"].shuffle(seed=42).select(range(1000))
small_eval_dataset = tokenized_datasets["test"].shuffle(seed=42).select(range(1000))
使用 PyTorch 训练器进行训练:
transformers 提供了一个针对训练 Transformers 模型而优化的训练器类,无需手动编写自己的训练循环即可更轻松地开始训练。训练器 API 支持广泛的训练选项和功能,例如日志记录、梯度累积和混合精度。首先加载模型并指定预期标签的数量。从Yelp Review数据集卡片中,您知道有五个标签:
from transformers import AutoModelForSequenceClassification
model = AutoModelForSequenceClassification.from_pretrained("bert-base-cased", num_labels=5)
接下来,创建一个 TrainingArguments 类,其中包含您可以调整的所有超参数以及用于激活不同训练选项的标志。在本教程中,您可以从默认的训练超参数开始,但您可以随意尝试这些参数以找到最佳设置。
from transformers import TrainingArguments
training_args = TrainingArguments(output_dir="test_trainer")
训练器不会在训练期间自动评估模型性能。需要向训练器传递一个函数来计算和报告指标。评估库提供了一个简单的准确性函数,您可以使用 evaluate.load 加载(有关详细信息,请参阅此快速教程):
import numpy as np
import evaluate
metric = evaluate.load("accuracy")
def compute_metrics(eval_pred):
logits, labels = eval_pred
predictions = np.argmax(logits, axis=-1)
return metric.compute(predictions=predictions, references=labels)
如果要在微调期间监视评估指标,请在训练参数中指定参数,以在每个纪元结束时报告评估指标:evaluation_strategy
from transformers import TrainingArguments, Trainer
training_args = TrainingArguments(output_dir="test_trainer", evaluation_strategy="epoch")
使用模型、训练参数、训练和测试数据集以及评估函数创建 Trainer 对象:
trainer = Trainer(
model=model,
args=training_args,
train_dataset=small_train_dataset,
eval_dataset=small_eval_dataset,
compute_metrics=compute_metrics,
)
然后通过调用 train() 微调模型:
trainer.train()