概述
本文提供了一套详尽的指南,从环境配置到具体代码实现,带你入门使用大模型Qwen2-1.5b-Instruct进行文本分类任务的微调。通过安装所需库、准备数据集、加载模型,以及设置微调参数和策略,你将能够实现模型的训练并进行文本分类预测。本文还展示了如何利用swanlab
进行训练过程监控,确保训练的透明度与高效性。无论你是机器学习初学者还是有经验的开发者,都能通过本文获取到实用的微调实践技巧。
确保Python环境版本为3.8以上,并安装以下所需库:
pip install swanlab modelscope transformers datasets peft accelerate pandas
准备数据集
使用zh_cls_fudan-news
数据集进行文本分类任务。数据集下载与格式转换如下:
from datasets import load_dataset
dataset = load_dataset("huangjintao/zh_cls_fudan-news")
train_dataset = dataset['train']
test_dataset = dataset['test']
加载模型
使用modelscope
下载Qwen2-1.5b-Instruct模型,并进行加载:
from modelscope import load
model = load('qwen/Qwen2-1.5B-Instruct')
完整代码示例
训练代码
from transformers import TrainingArguments, Trainer, DataCollatorForLanguageModeling
from peft import LoraConfig, get_peft_model
# 定义训练参数
training_args = TrainingArguments(
output_dir='./results',
num_train_epochs=3,
per_device_train_batch_size=4,
gradient_accumulation_steps=4,
evaluation_strategy='steps',
eval_steps=500,
save_steps=500,
logging_steps=50,
logging_dir='./logs',
load_best_model_at_end=True,
metric_for_best_model='eval_loss',
greater_is_better=False
)
# 使用PEFT进行增量微调
peft_config = LoraConfig(
task_type=LoraConfig.TaskType.LM,
inference_mode=False,
r=16,
lora_alpha=32,
lora_dropout=0.05
)
# 微调模型
model = get_peft_model(model, peft_config)
model.print_trainable_parameters()
# 定义数据预处理和训练
data_collator = DataCollatorForLanguageModeling(
tokenizer=tokenizer,
mlm=True,
mlm_probability=0.15
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=train_dataset,
data_collator=data_collator
)
trainer.train()
推理代码
# 加载测试数据
test_texts = [
# 示例文本
"这是一个测试文本",
]
# 预处理并进行预测
for text in test_texts:
inputs = tokenizer(text, return_tensors="pt")
generated_ids = model.generate(
inputs['input_ids'],
do_sample=True,
top_p=0.95,
max_length=50
)
output = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)
print(output)
训练结果演示与推理
在训练结束后,训练结果可以被可视化并评估。通过swanlab
集成,可以监控训练过程并展示模型效果。
# 导入swanlab并配置回调
from swanlab.integration.huggingface import SwanLabCallback
# 创建SwanLabCallback实例并集成到Trainer中
swanlab_callback = SwanLabCallback(project="MyProject", experiment_name="MyExperiment")
# 使用SwanLabCallback进行训练
trainer = Trainer(
model=model,
args=training_args,
train_dataset=train_dataset,
data_collator=data_collator,
callbacks=[swanlab_callback]
)
trainer.train()
训练完成并评估后,可以使用模型进行文本分类预测。示例代码如下:
# 使用模型进行预测
for text in test_texts:
inputs = tokenizer(text, return_tensors="pt")
outputs = model(inputs['input_ids'])
predicted_label = model.config.id2label[outputs.logits.argmax().item()]
print(f"预测结果: {predicted_label}")
总结
通过上述步骤,我们实现了Qwen2-1.5b-Instruct模型的微调,并进行了文本分类任务的训练和推理。利用swanlab
进行训练监控,可以确保训练过程的透明度和可扩展性。此外,通过完整、可运行的代码示例,你可以轻松地复制、运行并验证整个微调流程,提升你的实践能力和开发效率。
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦