DeepSeek SFT 微调:基于法律问答的模型优化实践

如何把DeepSeek R1模型微调成为某个场景的模型 将DeepSeek R1模型微调为适用于特定场景的模型是一个多步骤的过程,涉及环境配置、数据准备、模型加载、预处理、微调、强化学习和评估等步骤。 阅读详情

随着大语言模型(Large Language Models, LLMs)在法律领域的应用日益广泛,如何通过监督微调(Supervised Fine-Tuning, SFT)提升模型在特定任务上的表现成为研究和实践中的热门话题。本文将以 DeepSeek 模型为基础,详细介绍如何利用 SFT 微调技术优化其在法律问答任务中的性能。

img

从环境配置、数据准备、模型微调、训练过程到评估与结果分析逐步展开,旨在为读者提供一个全面且实用的技术指南。 此外,我们还将探讨实现过程中的技术细节、关键决策的考量,以及未来优化的潜在方向。

01

环境配置

在进行模型微调之前,搭建一个稳定的运行环境是至关重要的第一步。以下是环境配置的详细步骤和技术细节。

1.1 设置环境变量

环境变量的设置直接影响模型训练的稳定性和资源利用效率。以下是代码中涉及的具体配置:

在这里插入图片描述

  • 禁用 Unsloth RL 补丁:Unsloth 是一个用于加速 LLM 训练的工具,但其与强化学习(RL)相关的补丁可能会干扰 SFT 过程,因此通过设置 UNSLOTH_DISABLE_RL_PATCH=“1” 禁用此功能,确保微调过程专注于监督学习。

  • 指定 GPU 设备:通过 CUDA_VISIBLE_DEVICES=“0” 指定使用单张 GPU(编号为 0),这不仅明确了计算资源分配,还避免了多 GPU 环境下可能出现的资源竞争问题。

  • 禁用分词并行:将 TOKENIZERS_PARALLELISM 设置为 false,避免分词器在多线程或多进程环境下运行时可能导致的冲突,尤其是在单机训练场景下,这能显著提升稳定性。

1.2 导入必要库

微调过程中依赖多个开源库来实现模型加载、训练和优化。以下是导入的核心库:

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, Trainer, TrainingArguments
from peft import LoraConfig, get_peft_model
from datasets import Dataset
  • torch:提供深度学习计算支持,尤其是 GPU 加速。

  • transformers:Hugging Face 提供的库,用于加载预训练模型、分词器以及配置训练参数。

  • peft:参数高效微调(Parameter-Efficient Fine-Tuning)库,支持 LoRA 等技术。

  • datasets:用于高效加载和处理数据集。

这些库的协同工作为后续的模型加载、数据处理和训练提供了坚实的基础。

02

数据准备

数据是 SFT 的核心,直接决定了模型在法律问答任务上的表现。本次微调使用的数据集为法律问答数据集(JEC-QA/1_train.json),目标是让模型学会分析法律问题并从选项中选择正确答案。

2.1 加载数据集

数据集的加载需要确保数据的完整性和可控性。以下是加载函数的实现:

在这里插入图片描述

  • 文件加载:通过 Python 的 json.load 从指定路径读取 JSON 文件,确保编码为 utf-8 以支持中文字符。

  • 样本限制:通过 max_samples 参数限制数据量,例如在调试阶段可以设置为较小的值(如 100),以加快实验迭代速度;在正式训练时则可使用完整数据集。

2.2 数据格式化

为了让模型理解法律问题的上下文并生成符合预期的回答,设计一个清晰的提示模板至关重要。以下是定义的模板:

LAW_PROMPT_TEMPLATE = """请你作为一位法律专家,分析下面的法律问题并给出你认为正确的答案。请先思考分析题目,然后从选项中选择一个最合适的答案。

### 问题:
{question}

### 回应:
<think>

</think>
"""
  • 模板设计:模板要求模型以法律专家的身份进行分析,并通过 标签鼓励模型展示推理过程。这种结构化的输入有助于模型生成既有逻辑性又有结论的回答。

  • 动态填充:{question} 会被具体的问题陈述和选项替换。例如,一个样本可能包含问题陈述(statement)和选项列表(option_list),通过字符串格式化嵌入模板。

  • 选项兼容性:支持多种选项格式(如字典 {“A”: “选项A”, “B”: “选项B”} 或列表 [选项A, 选项B]),提高了代码的通用性。

2.3 分词处理

法律文本通常较长且复杂,因此分词过程需要特别注意长度限制和稳定性。以下是手动分词的实现:

在这里插入图片描述

  • 最大长度:设置 max_length=2048,足以容纳复杂的法律问题和选项,同时通过 truncation=True 截断超长文本。

  • 手动分词:相比默认的多进程分词,手动分词避免了潜在的线程冲突问题,尤其在资源有限的单机环境中更稳定。

    输出结构:返回 input_ids(编码后的 token ID)和 attention_mask(注意力掩码),为后续训练准备好输入数据。

03

模型配置与微调

3.1 加载 DeepSeek 模型

本次微调基于 DeepSeek 模型的一个变体,具体加载方式如下:

MODEL_PATH = "./deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B"
tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH)
model = AutoModelForCausalLM.from_pretrained(MODEL_PATH, torch_dtype=torch.float16, device_map="auto")
  • 模型选择:DeepSeek-R1-Distill-Qwen-1.5B 是一个 15 亿参数的预训练模型,通过蒸馏技术优化,既保留了较高的性能,又降低了计算成本,非常适合资源受限的场景。

  • 数据类型:使用 torch_dtype=torch.float16 将模型参数转为半精度浮点数,减少内存占用并加速计算。

  • 设备分配:device_map=“auto” 由 transformers 自动将模型分配到可用设备(如 GPU),简化配置。

3.2 配置 LoRA

为了高效微调,采用 LoRA(Low-Rank Adaptation)技术,仅更新少量参数而非整个模型:

lora_config = LoraConfig(
    r=16,    
    lora_alpha=16,    
    target_modules=["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"],    
    lora_dropout=0.0,    
    task_type="CAUSAL_LM"
)
model = get_peft_model(model, lora_config)
  • LoRA 参数:

    • r=16:低秩矩阵的秩,决定了新增参数的规模,值较小以保持高效。
    • lora_alpha=16:缩放因子,控制 LoRA 适配权重对模型输出的影响。
    • target_modules:指定适配的 Transformer 层,包括注意力机制(q_proj, k_proj, v_proj, o_proj)和前馈网络(gate_proj, up_proj, down_proj)。
  • 高效性:LoRA 只更新约 1% 的参数,大幅降低了内存和计算需求,同时保留了预训练模型的通用知识。

  • 任务类型:CAUSAL_LM 表示因果语言建模,适合生成式问答任务。

3.3 训练参数

训练参数的设置需要平衡性能和资源利用率:

在这里插入图片描述

  • 批量大小:每设备批次大小为 2,通过 gradient_accumulation_steps=4 实现等效批次大小 8,适合显存有限的场景。

  • 学习率:设置为 2e-4,在微调中属于中等偏低的值,确保模型稳定收敛。

  • 训练步数:共 5000 步,预热阶段 100 步,逐步调整学习率以避免初始震荡。

  • 优化器:adamw_8bit 是一种 8 位精度的 AdamW 优化器,进一步节省内存并加速训练。

3.4 训练过程

使用 Trainer 类执行训练,简化流程并提供丰富的功能支持:

trainer = Trainer(
    model=model,    
    args=training_args,    
    train_dataset=dataset,    
    data_collator=DataCollatorForLanguageModeling(tokenizer=tokenizer, mlm=False)
)
trainer.train()

  • 数据整理器:DataCollatorForLanguageModeling 配置为因果语言建模任务(mlm=False),适合从左到右的文本生成。

  • 训练执行:trainer.train() 启动训练过程,自动处理批量加载、梯度计算和参数更新。

04

模型评估

4.1 评估样本

为了验证模型性能,设计了具体的法律问答样本,例如:

    {     
        "answer": ["B"],         
        "id": "1_4269",         
        "option_list": {      
            "A": "我国商务部在确定进口橡胶制品是否存在补贴时必须证明出国(地区)政府直接向出口商提供了现金形式的财政资助",             
            "B": "在反补贴调查期间,该八国政府或橡胶制品的出口经营者,可以向中国商务部作出承诺,取消、限制补贴或改变价格",             
            "C": "如果我国商务部终局裁定决定对该八国进口橡胶制品征收反补贴税,该反补贴税的征收期限不得超过10年",             
            "D": "如果中国橡胶制品进口商对商务部征收反补贴税的终局裁定不服,必须首先向商务部请求行政复审,对行政复审决定还不服,才能向中国有管辖权的法院起诉"        
        },         
        "statement": "中国商务部决定对原产于马来西亚等八国的橡胶制品展开反补贴调查。根据我国《反补贴条例》以及相关法律法规,下列关于此次反补贴调查的哪项判断是正确的?"    
    },

  • 样本结构:包含问题陈述(statement)、正确答案(answer)和选项(option_list),便于评估模型的推理和选择能力。

4.2 自定义评估回调

通过自定义回调函数,在训练过程中定期评估模型:

class EvalCallback:
    def evaluate(self, step):    
        model = AutoModelForCausalLM.from_pretrained(MODEL_PATH, device_map="cpu")        
        peft_model = PeftModel.from_pretrained(model, f"checkpoint-{step}")        
        outputs = peft_model.generate(input_ids=inputs["input_ids"], max_new_tokens=500)

  • 评估时机:每 10 步(由 save_steps=10 控制)保存检查点后触发评估。

  • CPU 推理:将模型加载到 CPU,避免 GPU 内存不足,同时生成最多 500 个新 token 的回答。

  • 结果记录:保存推理输出,包括思维链和最终答案,便于后续分析。


  1. 结果与保存
  • 模型保存:训练完成后,LoRA 适配器和分词器保存至 ./outputs/final_model,便于后续加载和部署。

  • 评估报告:生成 JSON 格式的报告,记录每个样本的推理过程、预测答案和正确性。例如,一个样本的输出可能包括完整的思维链和选择的选项 B。


  1. 实验结果与分析

在微调过程中,模型在法律问答任务上的表现逐步提升。以评估样本为例,初始未经微调的模型可能生成不准确或无关的回答,而经过 5000 步训练后,模型能够正确解析问题并选择选项 B。这种进步表明 SFT 有效增强了模型对法律领域的理解能力和推理能力。

此外,LoRA 技术的应用显著降低了资源需求。例如,在单张 GPU(如 NVIDIA RTX 3090,24GB 显存)上,完整微调可能需要超过 30GB 显存,而 LoRA 微调仅需约 8GB,大幅提高了训练的可行性。

如何零基础入门 / 学习AI大模型?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!

想正式转到一些新兴的 AI 行业,不仅需要系统的学习AI大模型。同时也要跟已有的技能结合,辅助编程提效,或上手实操应用,增加自己的职场竞争力。

但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高

那么我作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,希望可以帮助到更多学习大模型的人!至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】

👉 福利来袭优快云大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈

全套AGI大模型学习大纲+路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

read-normal-img

640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉 福利来袭优快云大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈

img

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

【DeepSeek+LoRA+FastAPI】开发人员如何微调Deepseek-R1大模型并暴露接口给后端调用 想象一下,你让一个博士但没上过临床的文科生给病人开药,结果他开出了十年前就禁用的药品——这就是通用AI在专业领域闹的"一本正经胡说八道"现象。虽然像GPT、DeepSeek这些"全能型选手"能写诗编程聊八卦,但当它们遇到医疗诊断、法律文书这些需要精准专业知识的场景时,常常会犯低级错误。其实要让AI真正成为行业专家,就像培养医学生一样:先找个聪明的"学霸"(基础大模型),再给他喂专业的"教科书"(行业数据库),最后在"三甲医院"实战训练(微调优化)。 阅读详情

相关推荐

浅谈大模型SFT的实践落地:十问十答

大模型微调及时被很多人认为是没有什么含金量的工作,但不同人调的模型精度也是存在差异,微调过程中也存在一些难以解决的问题,需要攻克。PS:给公众号添加【星标⭐️】不迷路!您的在看关注是我坚持的最大动力!欢迎多多关注公众号「NLP工作站」,加入交流群,交个朋友吧,一起学习,一起进步!我们的口号是“生命不止,学习不停”!一大堆Chinese Llama3正在袭来LLM2LLM:迭代数据增强策略提升大模型微调效果如何快速提高大模型的向量表征效果?RAG系统中答案无关片段对LLMs生成答案有何影响?

具身机器人和通用AI 2700

面向法律领域的罪名预测、问题分类与FAQ问答模型设计与实现【NLP】

一、面向法律领域的罪名预测、问题分类与FAQ问答模型设计与实现【NLP】 目前NLP技术在各个行业中应用逐步打开,尤其在金融,医疗,法律,旅游方面,NLP技术助力法律智能,能够在一定程度上利用现有大数据以及机器学习/深度学习与自然语言处理技术,提供一些智能的解决方案。 面向法律领域的罪名预测、问题分类与FAQ问答模型设计与实现【NLP】 2、数据来源 本次项目的数据来源于两个,一个是罪名预测数据集,一个是法律问答数据集: 1)罪名预测数据集 CAIL 2018年设置了罪名预测、法条推荐、刑期

weixin_43564920的博客 5708

深度学习实战81-基于大模型的Chatlaw法律问答中的知识图谱融合思路,数据集说明、以及知识图谱对ChatLaw的影响介绍

大家好,我是微学AI,今天给大家介绍一下深度学习实战81-基于大模型的Chatlaw法律问答中的知识图谱融合思路,数据集说明、以及知识图谱对ChatLaw的影响介绍。基于大模型的Chatlaw法律问答系统融合了知识图谱,以提高法律咨询服务的可靠性和准确性。Chatlaw通过结合知识图谱与人工筛选,构建了一个高质量的法律数据集来训练模型。这种模型利用不同的专家来解决各种法律问题,优化了法律答复的准确性。

微学AI的博客 1273

大模型微调SFT VS RLHF

随着deepseek等开源大模型模型的爆火,中小型互联网公司又燃起了微调大模型的热潮。在开源模型的基础上,加入自己个性化的数据进行微调,能够在各自的大模型场景下,获得更佳的大模型效果。以下主要对比下大模型微调中的SFT和RLHF。SFT(Supervised Fine-Tuning,监督微调),它是在预训练模型基础上,通过人工标注的高质量指令-响应(Instruction-Response)对进行有监督学习,让模型更好地理解任务指令并产生符合预期的输出。Prompt : 解释什么是黑洞?

sinat_28694519的博客 1101

基于 DeepSeek-R1 模型微调(SFT)技术详解

本文的主要目的是详细介绍基于 deepseek-ai/DeepSeek-R1 模型的微调(SFT)技术。DeepSeek-R1 是一款具有强大性能和潜力的预训练语言模型,通过对其进行微调,我们可以将其应用于更广泛的实际场景中。在接下来的章节中,我们将首先介绍 DeepSeek-R1 模型的基础信息,包括其架构、预训练数据和特点。然后,深入探讨微调(SFT)的基础概念和技术原理,包括损失函数设计、梯度计算和优化器选择等。接着,详细阐述数据准备、微调环境搭建、微调过程实现以及模型评估等步骤。

zhangjiaofa的专栏 2853

DeepSeek V3 模型微调(SFT)技术详解

DeepSeek V3 是一种基于Transformer架构的预训练模型,具有多层自注意力机制和前馈神经网络。与传统的Transformer模型相比,DeepSeek V3 在模型架构上进行了一些优化,如引入了稀疏注意力机制、动态路由机制等,从而在保持模型性能的同时,降低了计算复杂度。fill:#333;color:#333;color:#333;fill:none;输入层嵌入层多头自注意力层前馈神经网络层输出层常见的优化器包括随机梯度下降(SGD)、Adam、RMSprop等。

zhangjiaofa的专栏 2963

从零开始的DeepSeek微调训练实战(SFT)

1.1 微调与强化学习、模型蒸馏伴随着DeepSeek的兴起,关于强化学习训练、模型蒸馏等概念也逐渐被人熟知,这里简单总结下这三者的异同。微调、强化学习训练和模型蒸馏都是常用的技术方法,尽管这些方法在某些方面存在交集,但它们的核心原理和任务目标却有显著差异。1. 微调(Fine-tuning):微调是指在已经训练好的大型预训练模型的基础上,进一步训练该模型以适应特定任务或特定领域的数据。相比从零开始训练一个模型,微调所需的数据和计算资源显著减少;

2401_85373691的博客 1812

40000条法律问答数据集.rar

自然语言处理数据集-近四万条法律问答数据 可用于问答系统的人工智能实验

解锁DeepSeek-R1大模型微调:从训练到部署,打造定制化AI会话系统

大模型微调技术通过对预训练的大模型进行进一步训练,能够根据特定领域的需求进行优化,从而有效避免AI幻觉的发生,并且提供更加准确、有价值的输出。

c18213590220的博客 2万+

法律对话系统数据集

法律服务对话系统 法律对话系统的源代码和语言资源 该存储库包含FAQ,FF,重启和问候语处理程序的代码。 此外,它还包括各种语言资源,包括培训数据集和会话测试集,这些语言资源是专门为合法的doamin设计的。 session_test_set.xlsx包含旨在测试用户和对话框系统之间所有可能的唯一对话的对话流。 每个对话流都是一个由多个句子组成的多轮对话。 电子表格中的奇数标签由包含偶数标签及其各自意图的对话组成。 test_unseen_sent.py测试每个对话并生成报告,显示系统正确识别的对话数。 在测试对话之前,会话将重新启动。

人工智能-大模型-一个基于大模型微调的中文医疗问答机器人应用

一个基于大模型微调的中文医疗问答机器人应用 运行 下载模型后,将config.py里的model_path更改为模型路径 控制台交互:python gpt_cli.py 可视化网页界面交互:streamlit run chat_app.py

【小白教程】从零开始的DeepSeek微调训练实战(SFT)

本文重点介绍使用微调框架unsloth,围绕DeepSeek R1 Distill 7B模型进行高效微调,并介绍用于推理大模型高效微调的COT数据集的创建和使用方法,并在一个medical-o1-reasoning-SFT数据集上完成高效微调实战,并最终达到问答风格优化&知识灌注目的。

Android23333的博客 1768

预处理后的20行法律问答数据

预处理后的csv文件,和转换后的json文件,都只有20行

上一篇: 在自然语言处理(NLP)任务中,怎么处理数据——即怎么把文字输入到模型中进行处理?
下一篇: LangChain 实战案例:使用 RAG 技术搭建商品快速查询系统
AI大模型_学习君
博客等级 码龄3年 6137粉丝 551原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值