news 2026/3/13 3:54:47

LoRA微调法律大模型:模型最终“见”到的是什么样的数据?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LoRA微调法律大模型:模型最终“见”到的是什么样的数据?

如果是刚开始接触大模型微调实战,不知道你是否会和我一样,第一步就被数据格式给拦住了。😨

我遇到的场景是这样的:

我想学习微调一个法律垂直领域的Qwen模型。起初,我以为这很简单:准备好问答对,喂给模型不就好了吗?但现实却不是这样:

  • LLaMA-Factory 说:你要把数据转成ShareGPT格式的JSON。
  • PyTorch原生代码 说:你要自己写一个Template把它们拼成字符串。

我看着满屏的SystemUserAssistant...标签,心中满是疑惑:😶‍🌫️

模型真正“见”到的数据,到底是什么样的呢?

这篇文章,是我把同一个Qwen法律大模型微调项目,由浅入深跑了三遍之后的数据格式复盘:

  1. 第一遍:WebUI模式(完全按教程点点点,先跑通)
  2. 第二遍:CLI Notebook模式(把点击变成代码,实现工程复现)
  3. 第三遍:无框架模式(拆掉 LLaMA-Factory 黑盒,自己拼数据流)

案例可能比较简单,但这个小案例帮助我理清了关于微调数据的流转过程,之后再去深入学习微调的时候,思路更清晰了些,希望这篇文章也可以同样帮助到你~


Web UI模式:模板是这样生效的

第一遍,目标非常简单:跑通。

这个法律大模型项目是使用LoRA指令微调,数据是开源社区的DISC-Law-SFT法律数据集,目标是微调 Qwen-3/2.5 模型,让它从一个通用助手变成一个懂法的「法律顾问」。

1、数据变身

原始的法律数据如下图。👇

这是一个标准的 JSONL 文件,每一行有一个input(用户的问题)和一个output(法律依据和回答)。

但是对于使用 LLaMA-Factory 框架来说,不能直接给模型喂这种格式的数据进行微调。必须写一个脚本,把它转换成框架喜欢的ShareGPT格式:

[ { "conversations": [ { "from": "human", "value": "user instruction" }, { "from": "gpt", "value": "model response" } ], "system": "system prompt (optional)", "tools": "tool description (optional)" } ]

比如上述法律数据的会被转换成这样:

此时input变成了human的value,output变成了gpt的value

当时我只是觉得这是多此一举:为什么不直接读 input/output?非要包一层conversations列表呢?

2、下拉框里的秘密

接着,我在 WebUI 界面上进行配置的时候。最让我困惑的一步来了:

在Chat Template(对话模板)这一栏,项目要求必须要选择qwen。

我当时想:“这个选项是啥意义呢?我不是已经转换好数据了吗?

但我还是先照做了。点击开始训练,Loss下降,模型训练成功。

这一遍跑完,虽然做出了模型,但对于数据,我的心里还是个黑盒:我输入的数据是 json 对象,模型见到的数据就是这样的吗?刚刚选择的Chat Template是什么意思呢?


CLI Notebook模式:拥抱工程化

于是我想着是不是用代码跑一遍会更清晰一点,并且第一遍的 WebUI 虽然直观,但有一个致命缺点:不可复现。

过了两天,我可能就会忘了当时学习率是填了5e-5还是2e-4。😶‍🌫️

于是,我决定用 LLaMA-Factory CLI 把流程重写一遍。

这一遍,不再依赖UI界面的选择、点击,而是把所有配置写进了yaml文件。👇

我发现,WebUI里的那个Chat Template下拉框,在代码里变成了一行参数:

template: qwen dataset_formatting: sharegpt

这一遍最大的收获是「工程复现能力」。

  • 把数据处理脚本集成到了Notebook里,一键运行就能生成 train.json并能逐步查看中间产物。
  • 把训练参数固化成了代码。能更清楚知道各个参数的真面目,无论之后换哪台服务器,只要运行这个Notebook,结果都是一样的,并且方便项目迁移。

但这依然没有解决我最开始的疑问:模型到底“见”到的是什么样的数据?

CLI 依然在调用 LLaMA-Factory 的内部函数,template: qwen依然是个黑盒在后台悄悄工作。👤


无框架模式:看见本质

于是我决定不用LLaMA-Factory,从另一个手写微调逻辑的Notebook项目迁移到这个项目中。

这一步是揭开秘密的时刻。我发现,之前以为的清洗数据,仅仅是冰山一角。

要想真正理解模型是怎么学习的,需要看清数据从「文本到**向量」**的每一步转变。👇

1、并没有「神秘模板」,只有「字符串拼接」

我查找了关于Qwen的Chat Template原型资料。原来,当我在 WebUI 里选择qwen时,框架在后台偷偷帮我把 ShareGPT 里的 Json 列表,拼接成了一个超长的字符串:

<|im_start|>user 请解释什么是合同的要约与承诺?<|im_end|> <|im_start|>assistant 要约是……承诺是……<|im_end|><|endoftext|>

其中,<|im_start|><|im_end|>只是特殊的占位符,告诉模型这句话哪里开始、哪里结束。

👉 模型根本看不懂 JSON 对象,也看不懂from: human这种 Key。它只认识这一长串拼好的纯文本

2、Tokenizer:人类语言与机器语言的「翻译官」

但是,显卡是不认识中文汉字的,也不认识<|im_start|>这种符号。 这时候,Tokenizer(分词器)就起到作用了。😎

这也是我在 WebUI 模式下完全忽略的一步。在代码中,它长这样:

input_ids = tokenizer.encode(text)

它把上面的长文本切碎,并在字典里查找对应的编号(ID)。比如:

  • “请解释”变成了 ID10567
  • 特殊的<|im_start|>变成了 ID151644

最终,数据变成了这样一串整数列表[151644, 872, 356, ... 151645]

但,模型真的只看数字吗?

在工程代码里,数据处理到「整数列表」这一步确实就结束了。但在模型内部,还有一个极其迅速的转换过程:Embedding(词向量化)

模型手里拿着这些 ID(比如151644),去查一张巨大的字典表,把每个 ID 换成了一组包含几千个浮点数的向量(比如[0.012, -0.98, 0.33...])。

  • ID只是索引(像图书馆的索书号)。
  • Embedding才是内容(像书本里的知识)。

但对于做微调数据处理来说,只要把数据正确变成了ID,剩下的查表工作交给显卡自动完成就好了~

3、如果想换一个“花样”呢?

既然看透了本质:模型只关心它见到的「Token序列」是否符合预测规律,那是不是意味着,我可以完全抛弃Qwen的官方模板,自己造一种格式呢?🤔

当然可以~只要保证「训练时喂给它的格式」和「推理时问它的格式」保持一致就行。在无框架模式下,我尝试抛弃了所有模板库,手写一个最朴素的拼接函数formatting_func

def formatting_func(example): # 手动定义一种简单的 "指令-回复" 格式,完全不用 Qwen 的特殊符号 text = f"### Instruction:\n{example['instruction']}\n\n### Response:\n{example['output']}" return text

这里没有复杂的<|im_start|>,只有很直白的### Instruction:,比如可以是如下模版所示:

那么模型认识这个吗?它当然认识。

只要把这串文本Token化,再告诉模型“### Response:后面的是要学习的答案”,它就能照样学会。

这就像教鹦鹉说话,你可以教它“Hello”,也可以教它“你好”,只要你重复的次数够多,规则够统一,它都能学会。

总结一下~数据的三层模型:👇

第一层:数据的语义形态 (Human Readable)

👉 ShareGPT / Messages

[{"from": "user", "value": "..."}]
  • 本质:这是给看的,也是给框架看的。它定义了“谁说了什么”,但还没有定义“怎么拼成字符串”。

第二层:渲染层

👉 Apply Chat Template

核心逻辑Jinja2模板引擎。

  • 本质:这是一个翻译官
  • 如果用LLaMA-Factory,那么框架就是这个翻译官(根据所选的qwen选项)。
  • 如果用原生Trainer,那么手写代码的人就是翻译官(formatting_func函数代码)。

第三层:数据的物理形态 (Model Readable)

👉Raw Text / Token IDs

<|im_start|>user\n你好<|im_end|>\n... [151644, 872, 356, ... 151645]
  • 本质:这是模型真正看进去的东西。模型不关心你用什么框架,它只关心它收到的 Token 序列长什么样。

既然手写也能跑,为什么还要用LLaMA-Factory?

1、Mask机制

在 SFT(有监督微调)中,有一个核心原则:模型不应该学习「用户的提问」,只应该学习「助手的回答」。

这意味着,我们给模型的虽然是一整段对话,但在计算Loss时,必须把User部分遮住。

在代码层面,这需要生成一个和input_ids等长的labels列表,把不需要学习的 Token 位置全部填为-100(PyTorch 中忽略计算的标记)。👇

{ "input_ids": [151644, 101, ... (用户问题) ... 151645, 151644, 202 ... (模型回答) ... 151645], "labels": [-100, -100, ... (-100) ... -100, 151644, 202 ... (模型回答) ... 151645] }
  • 用户提问区:Label全被设为**-100**。在PyTorch计算Loss时,-100会被自动忽略。

  • 模型回答区:Label对应原本的Token ID。

想象一下多轮对话(User -> Bot -> User -> Bot)中,需要精准计算每一个字符的起止索引:第 0 到 50 个token是提问(设为 -100),第 51 到 120 个是回答(保留),第 121 到 150 个又是提问(设为 -100)……只要算错一个索引,模型就会把用户的指令当成答案背诵下来,导致逻辑错乱。

👉 LLaMA-Factory 会自动解析ShareGPT中的from: humanfrom: gpt标签。它在拼接字符串的同时,自动生成了完美的 Mask 掩码。我们只需要关注内容本身,不需要关心索引。

2、避免模型停不下来

每个模型都有自己的结束符(EOS Token)。

  • Qwen的结束符是<|im_end|>
  • Llama 3的结束符是<|eot_id|>

如果在手动拼接字符串时,不小心漏掉了结尾的这个特殊符号,或者用错了符号,训练出来的模型就会变成一个话痨。😂

因为它微调时没学到“什么时候该闭嘴”,所以在推理时,它说完答案后会继续自言自语,直到显存爆掉或达到最大生成长度。

👉 框架会自动读取tokenizer_config.json中的配置,保证每一个样本的末尾都正确添加了该模型的专属停止符。

3、数据与模型的解耦

这是工程化思维的体现。

  • ShareGPT (JSON)保存的是数据逻辑:定义了“谁说了什么”。
  • Template (Jinja2)保存的是模型实现:定义了“这句话怎么拼”。

使用框架的最大意义在于解耦

比如今天用Qwen,明天想换Llama 3试试效果。

手写模式需要去代码里把所有的<|im_start|>替换成<|begin_of_text|>,甚至要重写整个拼接逻辑,改动量大且容易遗漏。

👉 框架可以让数据文件(JSON)一行都不用动。你只需要在训练参数里把template: qwen改成template: llama3


最后

写到这里,觉得好像所谓的黑科技,拆解到最后,往往都是最朴素的字符串拼接和矩阵运算。🤔

想到一句古话:“万物之始,大道至简,衍化至繁。”

好像确实如此。

想入门 AI 大模型却找不到清晰方向?备考大厂 AI 岗还在四处搜集零散资料?别再浪费时间啦!2025 年AI 大模型全套学习资料已整理完毕,从学习路线到面试真题,从工具教程到行业报告,一站式覆盖你的所有需求,现在全部免费分享

👇👇扫码免费领取全部内容👇👇

一、学习必备:100+本大模型电子书+26 份行业报告 + 600+ 套技术PPT,帮你看透 AI 趋势

想了解大模型的行业动态、商业落地案例?大模型电子书?这份资料帮你站在 “行业高度” 学 AI

1. 100+本大模型方向电子书

2. 26 份行业研究报告:覆盖多领域实践与趋势

报告包含阿里、DeepSeek 等权威机构发布的核心内容,涵盖:

  • 职业趋势:《AI + 职业趋势报告》《中国 AI 人才粮仓模型解析》;
  • 商业落地:《生成式 AI 商业落地白皮书》《AI Agent 应用落地技术白皮书》;
  • 领域细分:《AGI 在金融领域的应用报告》《AI GC 实践案例集》;
  • 行业监测:《2024 年中国大模型季度监测报告》《2025 年中国技术市场发展趋势》。

3. 600+套技术大会 PPT:听行业大咖讲实战

PPT 整理自 2024-2025 年热门技术大会,包含百度、腾讯、字节等企业的一线实践:

  • 安全方向:《端侧大模型的安全建设》《大模型驱动安全升级(腾讯代码安全实践)》;
  • 产品与创新:《大模型产品如何创新与创收》《AI 时代的新范式:构建 AI 产品》;
  • 多模态与 Agent:《Step-Video 开源模型(视频生成进展)》《Agentic RAG 的现在与未来》;
  • 工程落地:《从原型到生产:AgentOps 加速字节 AI 应用落地》《智能代码助手 CodeFuse 的架构设计》。

二、求职必看:大厂 AI 岗面试 “弹药库”,300 + 真题 + 107 道面经直接抱走

想冲字节、腾讯、阿里、蔚来等大厂 AI 岗?这份面试资料帮你提前 “押题”,拒绝临场慌!

1. 107 道大厂面经:覆盖 Prompt、RAG、大模型应用工程师等热门岗位

面经整理自 2021-2025 年真实面试场景,包含 TPlink、字节、腾讯、蔚来、虾皮、中兴、科大讯飞、京东等企业的高频考题,每道题都附带思路解析

2. 102 道 AI 大模型真题:直击大模型核心考点

针对大模型专属考题,从概念到实践全面覆盖,帮你理清底层逻辑:

3. 97 道 LLMs 真题:聚焦大型语言模型高频问题

专门拆解 LLMs 的核心痛点与解决方案,比如让很多人头疼的 “复读机问题”:


三、路线必明: AI 大模型学习路线图,1 张图理清核心内容

刚接触 AI 大模型,不知道该从哪学起?这份「AI大模型 学习路线图」直接帮你划重点,不用再盲目摸索!

路线图涵盖 5 大核心板块,从基础到进阶层层递进:一步步带你从入门到进阶,从理论到实战。

L1阶段:启航篇丨极速破界AI新时代

L1阶段:了解大模型的基础知识,以及大模型在各个行业的应用和分析,学习理解大模型的核心原理、关键技术以及大模型应用场景。

L2阶段:攻坚篇丨RAG开发实战工坊

L2阶段:AI大模型RAG应用开发工程,主要学习RAG检索增强生成:包括Naive RAG、Advanced-RAG以及RAG性能评估,还有GraphRAG在内的多个RAG热门项目的分析。

L3阶段:跃迁篇丨Agent智能体架构设计

L3阶段:大模型Agent应用架构进阶实现,主要学习LangChain、 LIamaIndex框架,也会学习到AutoGPT、 MetaGPT等多Agent系统,打造Agent智能体。

L4阶段:精进篇丨模型微调与私有化部署

L4阶段:大模型的微调和私有化部署,更加深入的探讨Transformer架构,学习大模型的微调技术,利用DeepSpeed、Lamam Factory等工具快速进行模型微调,并通过Ollama、vLLM等推理部署框架,实现模型的快速部署。

L5阶段:专题集丨特训篇 【录播课】


四、资料领取:全套内容免费抱走,学 AI 不用再找第二份

不管你是 0 基础想入门 AI 大模型,还是有基础想冲刺大厂、了解行业趋势,这份资料都能满足你!
现在只需按照提示操作,就能免费领取:

👇👇扫码免费领取全部内容👇👇

2025 年想抓住 AI 大模型的风口?别犹豫,这份免费资料就是你的 “起跑线”!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/12 23:52:02

HMCL登录异常全攻略:3步解决微软账号绑定与离线切换难题

HMCL登录异常全攻略&#xff1a;3步解决微软账号绑定与离线切换难题 【免费下载链接】HMCL huanghongxun/HMCL: 是一个用于 Minecraft 的命令行启动器&#xff0c;可以用于启动和管理 Minecraft 游戏&#xff0c;支持多种 Minecraft 版本和游戏模式&#xff0c;可以用于开发 Mi…

作者头像 李华
网站建设 2026/3/13 3:26:08

开源阅读鸿蒙版终极指南:打造专属数字图书馆的完整解决方案

开源阅读鸿蒙版终极指南&#xff1a;打造专属数字图书馆的完整解决方案 【免费下载链接】legado-Harmony 开源阅读鸿蒙版仓库 项目地址: https://gitcode.com/gh_mirrors/le/legado-Harmony 你是否渴望在鸿蒙设备上拥有一个完全属于个人的阅读空间&#xff1f;开源阅读鸿…

作者头像 李华
网站建设 2026/3/12 17:55:54

javaweb的股票交易模拟系统springbootvue

目录 股票交易模拟系统&#xff08;SpringBootVue&#xff09;摘要 开发技术 核心代码参考示例1.建立用户稀疏矩阵&#xff0c;用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度总结源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式…

作者头像 李华
网站建设 2026/3/12 16:57:15

openpilot自动驾驶系统架构与技术原理深度解析

openpilot自动驾驶系统架构与技术原理深度解析 【免费下载链接】openpilot openpilot 是一个开源的驾驶辅助系统。openpilot 为 250 多种支持的汽车品牌和型号执行自动车道居中和自适应巡航控制功能。 项目地址: https://gitcode.com/GitHub_Trending/op/openpilot open…

作者头像 李华
网站建设 2026/3/12 19:25:50

网盘直链下载助手:八大平台高速下载完整解决方案

网盘直链下载助手&#xff1a;八大平台高速下载完整解决方案 【免费下载链接】Online-disk-direct-link-download-assistant 可以获取网盘文件真实下载地址。基于【网盘直链下载助手】修改&#xff08;改自6.1.4版本&#xff09; &#xff0c;自用&#xff0c;去推广&#xff0…

作者头像 李华
网站建设 2026/3/12 15:59:10

NxNandManager终极指南:轻松管理Switch NAND存储

NxNandManager是一款专为Nintendo Switch设计的开源NAND管理工具&#xff0c;让你能够轻松探索、备份、恢复、挂载、调整大小以及创建虚拟系统。这个强大的Windows应用程序为Switch玩家和开发者提供了完整的存储管理解决方案。 【免费下载链接】NxNandManager Nintendo Switch …

作者头像 李华