以下内容是对hugging face官方NLP教程“微调一个预训练模型”章节的精炼总结。
详细内容和可以参考原教程链接:
https://huggingface.co/learn/nlp-course/zh-CN/chapter3/1?fw=pt
1. 设置环境
要点:安装必要的库并导入相关模块。我们需要安装transformers
和datasets
库,用于加载预训练模型和数据集。
代码方法和例子:
!pip install transformers datasets
from transformers import AutoTokenizer, AutoModelForSequenceClassification, TrainingArguments, Trainer
from datasets import load_dataset
解释:transformers
库包含各种预训练模型,datasets
库提供多种标准数据集。通过导入这些模块,我们可以方便地加载模型和数据集。
2. 加载数据集
要点:使用Hugging Face数据集加载器从库中加载特定数据集,例如GLUE任务中的MRPC数据集。
代码方法和例子:
dataset = load_dataset("glue", "mrpc")
解释:load_dataset
函数从Hugging Face数据集库中加载指定的数据集,这里使用的是GLUE中的MRPC数据集。
3. 数据预处理
要点:使用预训练的分词器对数据进行编码。预处理步骤将文本数据转换为模型可接受的输入格式。
代码方法和例子:
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
def tokenize_function(examples):
return tokenizer(examples["sentence1"], examples["sentence2"], truncation=True)
tokenized_datasets = dataset.map(tokenize_function, batched=True)
解释:AutoTokenizer.from_pretrained
加载预训练的BERT分词器,通过tokenize_function
函数对数据进行分词,并使用map
方法将该函数应用于数据集。
4. 创建数据加载器
要点:使用DataCollatorWithPadding
进行动态填充,生成数据加载器以处理不同长度的输入序列。
代码方法和例子:
from transformers import DataCollatorWithPadding
data_collator = DataCollatorWithPadding(tokenizer=tokenizer)
解释:DataCollatorWithPadding
自动对批次中的输入序列进行填充,使它们具有相同的长度,方便批处理。
5. 初始化预训练模型
要点:加载预训练的模型,如BERT,并指定分类任务的标签数量。
代码方法和例子:
model = AutoModelForSequenceClassification.from_pretrained("bert-base-uncased", num_labels=2)
解释:AutoModelForSequenceClassification.from_pretrained
加载预训练的BERT模型,并配置用于二分类任务。
6. 训练参数设置
要点:设置训练参数,包括学习率、训练周期、批次大小等。
代码方法和例子:
training_args = TrainingArguments(
evaluation_strategy="epoch",
learning_rate=2e-5,
per_device_train_batch_size=16,
per_device_eval_batch_size=16,
num_train_epochs=3,
weight_decay=0.01,
output_dir="./results",
logging_dir="./logs",
)
解释:TrainingArguments
定义了训练过程中的参数设置,例如学习率、批次大小、训练周期数等。
7. 创建Trainer实例
要点:实例化Trainer
对象,并传入模型、参数、数据集和数据加载器。
代码方法和例子:
trainer = Trainer(
model=model,
args=training_args,
train_dataset=tokenized_datasets["train"],
eval_dataset=tokenized_datasets["validation"],
tokenizer=tokenizer,
data_collator=data_collator,
)
解释:Trainer
类封装了模型训练和评估的所有步骤。我们通过传入模型、训练参数、训练和验证数据集、分词器和数据加载器来初始化Trainer
实例。
8. 模型训练
要点:调用trainer.train()
开始模型训练。
代码方法和例子:
trainer.train()
解释:trainer.train()
方法启动模型训练过程,根据之前设置的参数和数据集进行训练。
9. 模型评估
要点:使用trainer.evaluate()
对模型进行评估,获取模型在验证集上的性能指标。
代码方法和例子:
results = trainer.evaluate()
print(results)
解释:trainer.evaluate()
方法对验证集进行评估,并返回模型的评估结果,包含准确率、损失等指标。
10. 保存和加载模型
要点:保存训练好的模型和分词器,便于后续加载和使用。
代码方法和例子:
model.save_pretrained("./saved_model")
tokenizer.save_pretrained("./saved_model")
# 加载模型
model = AutoModelForSequenceClassification.from_pretrained("./saved_model")
tokenizer = AutoTokenizer.from_pretrained("./saved_model")
解释:save_pretrained
方法将模型和分词器保存到指定目录。后续可以使用from_pretrained
方法从保存的目录加载模型和分词器,进行推理或进一步微调。