通过微调预训练模型得到自己的模型

通过微调预训练模型得到自己的模型

目录

  1. 简介
  2. 环境准备
  3. 数据准备
  4. 加载预训练模型和Tokenizer
  5. 数据预处理
  6. 设置训练参数
  7. 初始化Trainer并开始训练
  8. 评估和保存模型
  9. 总结

简介

在这篇博客中,我们将介绍如何通过预训练模型进行微调来得到自己的模型。我们将使用Hugging Face的Transformers库和一个BART模型进行示例演示。整个过程包括环境准备、数据准备、模型加载、数据预处理、训练参数设置、训练、评估和保存模型。

环境准备

首先,我们需要安装必要的Python库:

bash 复制代码
pip install transformers datasets torch

数据准备

假设我们有三个数据集:训练集、验证集和测试集,分别存储在JSON文件中。我们将这些数据集加载到内存中。

python 复制代码
import os
from datasets import load_dataset

train_data_name = 'train_data'
valid_data_name = 'valid_data'
test_data_name = 'test_data'

# 顶级数据目录
top_data_dir = '../../data/sql'

raw_data_dir = os.path.join(top_data_dir, 'raw_data/')
train_raw_data_path = os.path.join(raw_data_dir, f'{train_data_name}.json')
valid_raw_data_path = os.path.join(raw_data_dir, f'{valid_data_name}.json')
test_raw_data_path = os.path.join(raw_data_dir, f'{test_data_name}.json')

# 加载JSON数据集,忽略无法解码的字符
dataset = load_dataset('json', data_files={
    'train': train_raw_data_path,
    'validation': valid_raw_data_path,
    'test': test_raw_data_path
})

加载预训练模型和Tokenizer

我们将使用Hugging Face的Transformers库加载预训练的BART模型和对应的Tokenizer。

python 复制代码
from transformers import AutoTokenizer, BartForConditionalGeneration

tokenizer = AutoTokenizer.from_pretrained("./bart-base")
model = BartForConditionalGeneration.from_pretrained("./bart-base").to(device)

数据预处理

定义数据预处理函数,将输入和目标文本进行tokenize,并确保长度一致。

python 复制代码
def preprocess_function(examples):
    inputs = examples['code']
    targets = examples['text']

    # 使用 `max_length` 和 `padding` 确保一致的长度
    model_inputs = tokenizer(inputs, max_length=512, truncation=True, padding='max_length')
    labels = tokenizer(text_target=targets, max_length=512, truncation=True, padding='max_length')

    model_inputs['labels'] = labels['input_ids']
    return model_inputs

# 应用预处理函数到训练集和验证集
tokenized_datasets = dataset.map(preprocess_function, batched=True)

设置训练参数

设置训练参数,包括输出目录、批量大小、训练轮数等。

python 复制代码
from transformers import TrainingArguments

training_args = TrainingArguments(
    output_dir='./results',          # 输出结果的目录
    evaluation_strategy="epoch",     # 每个epoch进行一次评估
    per_device_train_batch_size=4,   # 每个设备的训练批量大小
    per_device_eval_batch_size=4,    # 每个设备的评估批量大小
    num_train_epochs=3,              # 训练的epoch数量
    save_strategy="epoch",           # 保存策略
    logging_dir='./logs',            # 日志目录
    logging_steps=10,                # 日志记录的步数
    no_cuda=False,                   # 强制使用CPU
    learning_rate=5e-5,              # 调整学习率
    gradient_accumulation_steps=8,   # 梯度累

初始化trainer并开始训练

python 复制代码
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=tokenized_datasets['train'],
    eval_dataset=tokenized_datasets['validation'],
)
trainer.train()

评估保存模型

python 复制代码
results = trainer.evaluate(eval_dataset=tokenized_datasets['validation'])
print(f"Validation Results: {results}")

model.save_pretrained('./trained_model')
tokenizer.save_pretrained('./trained_model')
相关推荐
AndrewHZ2 分钟前
【图像处理基石】如何入门色彩评估?
图像处理·人工智能·深度学习·色彩科学·hvs·色彩评估·颜色工程
TomatoSCI2 分钟前
聚类的可视化选择:PCA / t-SNE丨TomatoSCI分析日记
人工智能·机器学习
大咖分享课4 分钟前
深度剖析:最新发布的ChatGPT Agent 技术架构与应用场景
人工智能·openai·智能助手·ai代理·chatgpt agent·自主任务执行
lucky_lyovo14 分钟前
卷积神经网络--网络性能提升
人工智能·神经网络·cnn
liliangcsdn19 分钟前
smolagents - 如何在mac用agents做简单算术题
人工智能·macos·prompt
nju_spy23 分钟前
周志华《机器学习导论》第8章 集成学习 Ensemble Learning
人工智能·随机森林·机器学习·集成学习·boosting·bagging·南京大学
星座52844 分钟前
基于现代R语言【Tidyverse、Tidymodel】的机器学习方法与案例分析
机器学习·r语言·tidyverse·tidymodel
静心问道1 小时前
TrOCR: 基于Transformer的光学字符识别方法,使用预训练模型
人工智能·深度学习·transformer·多模态
说私域1 小时前
基于开源AI大模型、AI智能名片与S2B2C商城小程序源码的用户价值引导与核心用户沉淀策略研究
人工智能·开源
亲持红叶1 小时前
GLU 变种:ReGLU 、 GEGLU 、 SwiGLU
人工智能·深度学习·神经网络·激活函数