Python微调DeepSeek-R1-Distill-Qwen-1.5B模型:使用Transformers和PyTorch进行训练

前言

近年来,基于Transformer架构的预训练语言模型如GPT、BERT等已经取得了显著的成果,广泛应用于自然语言处理(NLP)的各个领域。为了让这些模型更加适应特定任务,我们通常会进行微调(Fine-tuning)。本博客将详细介绍如何微调一个名为Qwen-1.5B的模型,使用Hugging Face的Transformers库与PyTorch框架来实现。我们将通过一步步的代码解析,帮助你理解如何加载预训练模型、准备数据集、设置训练参数,并进行微调。

详细解读

1. 加载预训练模型和Tokenizer

from transformers import AutoTokenizer, AutoModelForCausalLM

# 加载tokenizer和模型
tokenizer = AutoTokenizer.from_pretrained("DeepSeek-R1-Distill-Qwen-1.5B") # 模型文件路径
model = AutoModelForCausalLM.from_pretrained("DeepSeek-R1-Distill-Qwen-1.5B") # 模型文件路径

首先,我们从本地路径加载了Qwen-1.5B的预训练模型和对应的Tokenizer。

Tokenizer负责将文本数据转换为模型可以理解的数字形式。

AutoTokenizerAutoModelForCausalLM是Transformers库提供的类,分别用于加载Tokenizers和Causal Language Modeling(自回归语言模型)预训练模型。

2. 加载和处理数据集

from datasets import Dataset

# 从txt文件加载数据
def load_txt_data(file_path):
    with open(file_path, 'r', encoding='utf-8') as f:
        lines = f.readlines()
    return {'text': [line.strip() for line in lines]}

# 加载数据集(.txt)
dataset = load_txt_data("model.txt")  # 替换为你的txt文件路径
dataset = Dataset.from_dict(dataset)

此部分代码从指定路径加载文本数据集。

数据集每行文本被视为一个训练样本,并通过Dataset.from_dict转换为Hugging Face datasets库的格式。

此格式支持高效的数据处理和批量化操作。

3. 数据预处理:Tokenize

# 对数据集进行tokenize
def tokenize_function(examples):
    return tokenizer(examples["text"], padding="max_length", truncation=True)

encoded_dataset = dataset.map(tokenize_function, batched=True)

在这一步,我们对加载的数据进行tokenize,即将文本转化为模型可以理解的Token格式。

通过map函数将tokenize_function应用到数据集中的每个文本实例,batched=True表示每次处理多个文本实例以提高效率。

设置padding="max_length"保证所有序列填充至最大长度,truncation=True则会截断超过最大长度的序列。

4. 设置训练参数

from transformers import TrainingArguments

# 设置训练参数
training_args = TrainingArguments(
    output_dir="./results",         # 输出目录
    evaluation_strategy="epoch",    # 每一轮训练后进行评估
    learning_rate=2e-5,             # 学习率
    per_device_train_batch_size=8,  # 每个设备上的批量大小
    per_device_eval_batch_size=8,   # 每个设备上的评估批量大小
    num_train_epochs=30,            # 训练轮数
    weight_decay=0.01,              # 权重衰减
    logging_dir='日志目录输出路径',      # 替换你的日志路径
    logging_steps=10,
)

TrainingArguments中,我们指定了多个重要的训练参数,例如:

  • output_dir:训练结果的输出目录。
  • evaluation_strategy:每个epoch结束后进行评估。
  • learning_rate:学习率。
  • per_device_train_batch_size:每个设备的训练批量大小。
  • logging_dir:保存日志的目录。

这些参数将影响训练过程的效率和模型的最终性能。

5. 创建并训练模型

from transformers import Trainer

# 创建Trainer
trainer = Trainer(
    model=model,                     # 预训练模型
    args=training_args,              # 训练参数
    train_dataset=encoded_dataset,   # 训练数据集
    eval_dataset=encoded_dataset,    # 测试数据集
)

# 微调模型
trainer.train()

Trainer是Hugging Face提供的一个高层API,简化了训练流程。在创建Trainer实例时,我们将模型、训练参数、数据集等传入。然后调用trainer.train()启动微调过程。

6. 保存模型和Tokenizer

# 保存微调后的模型
model.save_pretrained("微调后模型保存路径")  
tokenizer.save_pretrained("保存tokenizer路径")  

微调完成后,我们将模型和Tokenizer保存到指定路径,以便之后加载和使用。

整体代码

from transformers import AutoTokenizer, AutoModelForCausalLM, Trainer, TrainingArguments
from datasets import Dataset
import torch

# 加载tokenizer和模型
tokenizer = AutoTokenizer.from_pretrained("DeepSeek-R1-Distill-Qwen-1.5B")
model = AutoModelForCausalLM.from_pretrained("DeepSeek-R1-Distill-Qwen-1.5B")

# 从txt文件加载数据
def load_txt_data(file_path):
    with open(file_path, 'r', encoding='utf-8') as f:
        lines = f.readlines()
    return {'text': [line.strip() for line in lines]}

# 加载数据集(.txt)
dataset = load_txt_data("model.txt")  # 替换为你的txt文件路径
dataset = Dataset.from_dict(dataset)

# 对数据集进行tokenize
def tokenize_function(examples):
    return tokenizer(examples["text"], padding="max_length", truncation=True)

encoded_dataset = dataset.map(tokenize_function, batched=True)

# 设置训练参数
training_args = TrainingArguments(
    output_dir="./results",         # 输出目录
    evaluation_strategy="epoch",    # 每一轮训练后进行评估
    learning_rate=2e-5,             # 学习率
    per_device_train_batch_size=8,  # 每个设备上的批量大小
    per_device_eval_batch_size=8,   # 每个设备上的评估批量大小
    num_train_epochs=30,             # 训练轮数
    weight_decay=0.01,              # 权重衰减
    logging_dir='logs',           # 日志目录
    logging_steps=10,
)

# 创建Trainer
trainer = Trainer(
    model=model,                     # 预训练模型
    args=training_args,              # 训练参数
    train_dataset=encoded_dataset,   # 训练数据集
    eval_dataset=encoded_dataset,    # 测试数据集
)

# 微调模型
trainer.train()

# 保存微调后的模型
model.save_pretrained("微调后模型保存路径")
tokenizer.save_pretrained("保存tokenizer路径")

总结

本教程通过一步一步的代码讲解,展示了如何使用Transformers和PyTorch对Qwen-1.5B模型进行微调。我们涵盖了从数据加载、预处理、模型训练到保存微调结果的整个流程。希望通过这篇博客,能够帮助你理解并实现类似的微调任务。对于不同的NLP任务,可以根据需要调整模型、数据和训练参数。

### DeepSeek 1.5B 模型本地化后的功能与应用案例 #### 功能特性 安装并配置完成后的 DeepSeek 1.5B 模型能够提供强大的自然语言处理能力。该模型支持多种高级对话场景,包括但不限于: - **多轮对话**:可以持续进行上下文连贯的多轮问答交流[^1]。 - **语义理解**:具备优秀的中文理解生成能力,能精准解析复杂句意隐含含义。 #### 应用场景实例 ##### 场景一:客服机器人 通过集成 DeepSeek 1.5B 模型到企业级客户服务平台中,可实现高效自动化的客户服务体验。这种解决方案不仅提高了响应速度服务质量,还降低了人力成本。例如,在电商行业中,当顾客咨询商品详情或物流状态时,基于此模型构建的智能助理可以在短时间内给出准确答复,并引导用户解决问题。 ##### 场景二:教育辅助工具 利用其出色的文本分析能力丰富的知识图谱资源,DeepSeek 1.5B 可以为在线学习平台增添智能化元素。比如开发一款针对学生的作业辅导软件,它可以根据学生提交的具体题目快速检索相关知识点,并给予详细的解题思路指导以及错误纠正建议。 ##### 场景三:医疗健康顾问 借助于医学领域专业知识库的支持,经过适当训练调整后的 DeepSeek 1.5B 能够充当虚拟医生助手的角色。对于一些常见病症的症状查询、初步诊断意见提供建议等方面表现出色。这有助于缓解医院门诊压力的同时也为患者提供了便捷可靠的自我健康管理方式。 ```python # Python 示例代码展示如何加载预训练好的 DeepSeek 1.5B 模型用于简单问答任务 from transformers import AutoModelForCausalLM, AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("path_to_deepseek_1.5b_model") model = AutoModelForCausalLM.from_pretrained("path_to_deepseek_1.5b_model") def generate_response(prompt): inputs = tokenizer(prompt, return_tensors="pt").input_ids outputs = model.generate(inputs) response = tokenizer.decode(outputs[0], skip_special_tokens=True) return response prompt = "请问感冒应该吃什么药?" response = generate_response(prompt) print(response) ```
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值