详细介绍:法律大模型微调:基于 LLaMA-Factory 的指令微调方案

news/2026/1/18 21:57:02/文章来源:https://www.cnblogs.com/gccbuaa/p/19499219

1、LLaMA-Factory安装部署

下载LLaMA-Factory代码:

https://github.com/hiyouga/LLaMA-Factory

2、创建Python虚拟环境并安装依赖

我本机用的是Python3.9.10。版本太高会出错,这个要注意下。

python -m venv ./env

也可以用conda创建,看个人习惯;

接下来激活环境,在当前窗口中,输入:env\Scripts\activate

进入到环境后,就可以下载依赖

pip install -r requirements.txt

如果下载依赖很慢,可以设置为清华镜像源:

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple


3、启动LLaMA-Factory服务

在启动之前,我们先调整下两个文件runner.pyloader.py代码,因为在微调的过程中,会有些错误,所以需要提前做下调整。

首先是runner.py,这个文件在LLaMA-Factory-main\src\llamafactory\webui\目录下,需要修改378行左右的代码:

self.trainer = Popen(["llamafactory-cli", "train", save_cmd(args)], env=env, stderr=PIPE, text=True)
修改成下面的代码:
self.trainer = Popen([sys.executable, "-m","llamafactory.cli", "train", save_cmd(args)], env=env, stderr=PIPE, text=True)

然后在根目录下。输入:pip install -e .

之后可以在env\Scripts下看到一个llamafactory-cli.exe执行文件

这样操作的目的就可以解决虚拟环境下,找不到llamafactory-cli模块的问题。

接下来就是修改loader.py,这个文件在LLaMA-Factory-main\src\llamafactory\data\目录下

找到load_dataset关键字,增加配置keep_in_memory=True

这样能解决多次训练一个模型的时候,不会出现文件命名问题。

FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。: 'C:\\Users\\EDY\\.cache\\huggingface\\datasets\\json\\default-8afa3bb648c61b3a\\0.0.0\\f4e89e8750d5d5ffbef2c078bf0ddfedef29dc2faff52a6255cf513c05eb1092\\tmpjaayunn7' ->
上面的错误我删除这个文件夹后重新微调也不行,所以增加那个配置,不进行缓存就可以解决

没问题后运行:python src\webui.py

访问地址:http://127.0.0.1:7860

4、准备法律数据集

我用的是这个数据集https://www.modelscope.cn/datasets/Robin021/DISC-Law-SFT/files,自己也可以按需选择。

下载的数据集格式为:

{"id": "judgement_predit-1", "reference": ["《刑法》第一百一十四条:xxxx。"], "input": "基于下列案件,推测可能的判决结果。\n经审理查明,2015年6月21日15时许,xxxx", "output": "根据《刑法》第一百一十四条的规定,被告人白某某以危险方法危害公共安全,xxxx。"}

我们要调整指令微调(Instruction Tuning) 中最常见的 Alpaca 格式(或 Alpaca-style 格式),是当前开源大模型(如 LLaMA、Qwen、Baichuan 等)进行 监督微调(Supervised Fine-Tuning, SFT) 时广泛采用的数据结构:

{"instruction": "请对以下政策或法规文件内容进行专业、清晰的解读:","input": "打架斗殴……","output": "此问题……。"
}

所以要进行转换,我这里编写了转换的脚本:

import json
# 输入和输出文件路径(请根据实际情况修改)
input_file = './legal.json'   # 原始文件,每行一个 JSON 对象
output_file = './data/legal.json'  # 转换后的 JSON 列表文件
converted_data = []
with open(input_file, 'r', encoding='utf-8') as f:for line in f:line = line.strip()if not line:continuetry:item = json.loads(line)new_item = {"instruction": "请对以下政策或法规文件内容进行专业、清晰的解读:","input": item["title"],"output": item["contentText"]}converted_data.append(new_item)except json.JSONDecodeError as e:print(f"跳过无效行: {line[:100]}... 错误: {e}")
# 写入输出文件(格式化为 JSON 数组)
with open(output_file, 'w', encoding='utf-8') as f:json.dump(converted_data, f, ensure_ascii=False, indent=2)
print(f"转换完成!共处理 {len(converted_data)} 条记录,已保存到 {output_file}")

执行后会放到data目里下。

我们需要在dataset_info.json把这个文件加进去。这个文件在data目录下


配置完后,重启LLaMA-Factory服务。

数据集那栏选项就可以看到legal

5、用Qwen3-0.6B-Base进行实战微调

我们可以先测试下Qwen3-0.6B对法律的解读,用于对后面微调完成的模型进行对比。

配置微调参数,计算类型选择fp32,是因为我的电脑没有GPU,最大样本设置200,调试阶段不需要用太多

配置参考:

参数名英文参数名类型默认值建议范围作用与影响注意事项
学习率learning_rate浮点数5e-51e-5 ~ 5e-4AdamW优化器的初始学习率,控制参数更新的步长- 值太大:训练不稳定,可能发散
- 值太小:收敛过慢
- 大模型用较小学习率(1e-5 ~ 2e-5)
- 小模型可用较大学习率(3e-5 ~ 5e-5)
训练轮数num_train_epochs浮点数3.01.0 ~ 10.0整个数据集被完整训练的次数- 3.0表示训练3轮
- 数据量少可增加轮数
- 数据量多可减少轮数
- 配合早停(early stopping)使用
最大梯度范数max_grad_norm浮点数1.00.5 ~ 2.0梯度裁剪阈值,防止梯度爆炸- 超过此值的梯度会被缩放
- 值太小:梯度信息损失过多
- 值太大:梯度爆炸风险增加
- 推荐1.0作为起点
最大样本数max_samples整数无限制100 ~ 10000限制每个数据集使用的最大样本数- 设为200表示最多用200条数据
- 用于快速测试或小规模实验
- 设为-1或None表示用全部数据
计算类型dtype字符串fp16fp32/fp16/bf16训练时使用的浮点数精度fp32:32位浮点,最精确但最慢
fp16:16位浮点,快但可能数值溢出
bf16:16位脑浮点,范围大精度低,推荐用于训练
截断长度cutoff_len整数1024512 ~ 4096输入序列分词后的最大长度- 2048表示文本会被截断或填充到2048个token
- 影响:
- 长文本任务需要设置较大值
- 值越大显存占用越高
- 超过模型最大长度会出错
批处理大小per_device_train_batch_size整数11 ~ 16每个GPU一次处理的样本数量- 2表示每次前向传播处理2个样本
- 主要受GPU显存限制
- 8GB显存:建议1-2
- 16GB显存:建议2-4
- 24GB+显存:建议4-8
梯度累积gradient_accumulation_steps整数11 ~ 32累积多个批次的梯度后再更新参数- 8表示累积8个批次的梯度才更新一次
有效批次大小 = 批处理大小 × 梯度累积步数
- 用于模拟大批次训练
- 可减少显存占用
验证集比例val_size浮点数/整数0.00.05 ~ 0.2 或 100~1000从训练集中划分验证集的比例或数量浮点数:0.1表示10%数据作为验证集
整数:200表示200条数据作为验证集
- 设为0则不划分验证集
- 用于监控模型过拟合

点击开始

最后运行完成后。

6、用微调的模型进行测试

选择检查点路径,就是对应微调的模型

就可以进行测试,因为我用的模型,法律推理/判决预测(Legal Judgment Prediction)任务 的结构化样本,所以输出的内容是这样的

7、导出模型

然后就可以从文件夹下看到这个模型了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1179546.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【毕业设计】基于springboot+微信小程序的院竞赛管理系统(源码+文档+远程调试,全bao定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026年国内知名的活性炭箱供应厂家联系方式,RTO/旋风除尘器/催化燃烧/活性炭箱/滤筒除尘器,活性炭箱品牌怎么选择 - 品牌推荐师

在VOCs有机废气治理领域,活性炭箱作为吸附净化环节的核心设备,其性能稳定性直接影响企业排放达标率与环保合规成本。据生态环境部2025年行业白皮书显示,全国活性炭箱市场规模已突破85亿元,但设备选型不当导致的二次…

2026苏州厂房装修大揭秘:这几家公司不容错过! - 品牌测评鉴赏家

2026苏州厂房装修大揭秘:这几家公司不容错过!一.苏州厂房装修的重要性 在苏州这片充满活力的商业热土上,厂房作为企业生产运营的核心场所,其装修质量直接关乎企业的兴衰成败。 从生产效率层面来看,合理的厂房装修…

2026极简风爱好者必看!这些宝藏装修公司绝了 - 品牌测评鉴赏家

2026极简风爱好者必看!这些宝藏装修公司绝了一.极简风盛行,为何独得恩宠? 在如今这个快节奏的时代,“断舍离” 的理念越来越深入人心,极简风装修也顺势成为众多人的心头好。极简主义,可不是简单地减少物品数量,…

苏州装修宝藏公司大盘点,口碑爆棚不踩雷! - 品牌测评鉴赏家

苏州装修宝藏公司大盘点,口碑爆棚不踩雷!一.装修前的 “灵魂拷问” 家,是我们心灵的避风港,是疲惫时最渴望回归的温暖港湾。而装修,则是赋予这个港湾独特魅力和舒适体验的关键环节。一个精心装修的家,不仅能提升…

GESP认证C++编程真题解析 | 202309 六级

​欢迎大家订阅我的专栏:算法题解:C++与Python实现! 本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战! 专栏特色 1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的…

第一、二、三章 习题总结

习题 2-6(P35)用1,2,3,,9 组成3个三位数 abc , def 和 ghi ,每个数字恰好使用一次,要求 abc : def : ghi 1:2:3 。按照“abc def ghi”的格式输出所有解,每行…

人群仿真软件:AnyLogic_(4).行人库功能详解

行人库功能详解 行人库简介 AnyLogic 的行人库(Pedestrian Library)是专门用于模拟行人行为的强大工具。行人库提供了一系列的图形化组件和编程接口,使用户能够轻松地创建复杂的行人仿真模型。这些模型可以用于研究和优化行人流量、安全性和舒…

GESP认证C++编程真题解析 | 202306 一级

​欢迎大家订阅我的专栏:算法题解:C++与Python实现! 本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战! 专栏特色 1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的…

2026苏州装修哪家强?覆盖不同业主的装修需求的十大装修公司! - 品牌测评鉴赏家

2026苏州装修哪家强?覆盖不同业主的装修需求的十大装修公司!一.引言:装修的纠结与选择 家,是每个人心灵的避风港,而装修则是赋予这个港湾独特魅力与舒适的关键。当你怀揣着对未来家的美好憧憬,准备开启装修之旅时…

提示工程架构师必学:用Few-shot Learning增强提示情境感知的AI技巧

提示工程架构师必学:用Few-shot Learning增强提示情境感知的AI技巧 引言:为什么你的AI总是“get不到”上下文? 作为提示工程架构师,你可能遇到过这样的场景: 让AI写一封商务投诉回复邮件,结果它用了“嗨,哥们”这种口语化表达; 让AI解决Python性能优化问题,它却给出…

用 Python 实现芯片性能优化模型

用 Python 实现芯片性能优化模型 一招看懂“软硬协同”的性能优化术 + 工程级落地 作者:Echo_Wish 一、引子:芯片性能优化不是写个 Benchmark 那么简单 你可能见过这样的场景: 新芯片发布 Benchmark 跑出一溜亮眼数字 结果项目一上机器: ➤ 延迟高 ➤ 能耗飙 ➤ 频繁热降…

【计算机毕业设计案例】基于微信小程序的校园跑腿小程序基于springboot+微信小程序的校园外卖直送平台(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

开源大模型选择指南:精准匹配需求 + LLaMA-Factory Online高效落地

开源大模型选择指南:精准匹配需求 + LLaMA-Factory Online高效落地在开源大模型百花齐放的时代,选择适配自身需求的模型是第一步,而高效实现模型部署、微调与应用落地,则是发挥模型价值的关键。LLaMA-Factory Onli…

2026船用法兰市场盘点:哪些公司口碑载道值得选?不锈钢管板/不锈钢法兰/高温合金法兰,船用法兰供应商哪家权威 - 品牌推荐师

作为船舶管道系统的核心连接件,船用法兰的质量直接关系到船舶航行安全与作业效率。据中国船舶工业行业协会最新数据,2025年国内船用法兰市场规模达42亿元,同比增长18%,但市场存在产品标准不统一、非标定制能力参差…

到一个不可思议的Python库——Envoy

大家好,今天我们要聊聊一个你可能没有太注意过,但它却能为你的Python项目带来不少便利的库——Envoy。是不是感觉这个名字听起来像是某个神秘的组织?其实它是一个非常实用的Python库,专门用来简化与外部命令交互的操作。嗯&#x…

阿里Java面试被问:WebSocket的心跳检测和自动重连实现

一、核心概念与必要性 为什么需要心跳检测和重连? 网络不稳定:移动网络、Wi-Fi切换、代理服务器可能导致连接断开 服务器限制:Nginx/负载均衡器默认30-60秒超时 浏览器限制:部分浏览器标签页休眠时暂停WebSocket 资源清理&…

机器学习项目:矿物分类系统重制版

在地质勘探、矿产开发等领域,矿物分类是一项核心任务。传统人工分类依赖专业经验,效率低且主观性强,而机器学习技术能通过矿物的特征数据实现自动化、高精度分类。本文将分享一个完整的矿物分类项目,涵盖数据预处理、缺失值处理、…

JavaWeb从入门到进阶(vue与Ajax Axios)

什么是Vue: Vue是一套前端框架,免除原生javaScript中的DOM操作,简化书写。 基于MVVM(Model-View-ViewModel)思想,实现数据的双向绑定,将编程的关注点放在数据上本质区别:原生JS:你要告诉浏览器每一步怎么做…

上下文理解在智能家居AI应用中的落地实践

上下文理解在智能家居AI应用中的落地实践:从理论到场景的全链路解析 元数据框架 标题 上下文理解在智能家居AI应用中的落地实践:从理论到场景的全链路解析 关键词 上下文理解、智能家居AI、意图推断、场景适配、边缘计算、隐私保护、多模态融合 摘要 本文系统解析了上…