如何使用hugging face transformers库微调预训练模型【精炼要点】

以下内容是对hugging face官方NLP教程“微调一个预训练模型”章节的精炼总结。
详细内容和可以参考原教程链接:
https://huggingface.co/learn/nlp-course/zh-CN/chapter3/1?fw=pt

1. 设置环境

要点:安装必要的库并导入相关模块。我们需要安装transformersdatasets库,用于加载预训练模型和数据集。
代码方法和例子

!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方法从保存的目录加载模型和分词器,进行推理或进一步微调。

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值