第四节:数据格式——指令微调数据格式与法律问答对构建
好,咱们今天聊聊数据格式。说实话,我在做法律大模型微调时,踩得最多的坑就是数据格式。格式不对,模型学出来的东西就歪了。你想想看,法律文本本身就很严谨,格式要是再出问题,那真是雪上加霜。
4.1 指令微调数据格式:Alpaca 与 ShareGPT
目前主流的指令微调格式,说白了就两种:Alpaca 和 ShareGPT。我个人的习惯是,根据任务场景来选,而不是盲目跟风。
4.1.1 Alpaca 格式
Alpaca 格式是斯坦福搞出来的,结构非常清晰。每条数据包含三个字段:instruction(指令)、input(输入)、output(输出)。
举个例子,在法律场景下:
{
"instruction": "请根据以下事实,判断是否构成正当防卫",
"input": "张三在深夜回家途中,遭遇李四持刀抢劫。张三在反抗过程中,用随身携带的防身喷雾将李四制服。",
"output": "根据《刑法》第二十条规定,为了使国家、公共利益、本人或者他人的人身、财产和其他权利免受正在进行的不法侵害,而采取的制止不法侵害的行为,对不法侵害人造成损害的,属于正当防卫,不负刑事责任。本案中,张三面临正在进行的持刀抢劫,其使用防身喷雾制服李四的行为,属于正当防卫。"
}
我在项目中遇到过一个问题:有些法律问答其实不需要 input 字段。比如「什么是合同?」这种问题,直接给指令和输出就行。这时候可以把 input 留空,或者干脆用简化版格式。
input 为空,建议显式写成空字符串 "",不要省略字段。很多微调框架对字段缺失很敏感。
4.1.2 ShareGPT 格式
ShareGPT 格式更适合多轮对话。它用 conversations 数组来组织对话,每条消息包含 from(角色)和 value(内容)。
{
"conversations": [
{
"from": "human",
"value": "我借给朋友10万元,没有写借条,现在他不承认了,我该怎么办?"
},
{
"from": "gpt",
"value": "首先,我需要提醒您,没有借条确实会增加维权难度。但并非完全没有办法。您可以尝试以下途径:\n1. 收集转账记录、聊天记录等证据\n2. 寻找证人\n3. 与对方沟通时进行录音(注意合法性)"
},
{
"from": "human",
"value": "聊天记录能作为证据吗?"
},
{
"from": "gpt",
"value": "可以。根据《民事诉讼法》及相关司法解释,电子数据属于法定证据类型。微信聊天记录、短信等都可以作为证据提交。但需要注意:\n- 需要提供原始记录\n- 最好进行公证\n- 要能证明对方身份"
}
]
}
嗯,这里要注意:ShareGPT 格式的 from 字段,不同框架可能用不同的值。有的用 human/gpt,有的用 user/assistant。我建议你统一用一套,然后在微调脚本里做映射。
4.2 法律问答对构建
法律问答对的构建,说白了就是「喂」给模型的法律知识。我刚开始做的时候,以为直接从裁判文书网上扒数据就行。结果发现,模型学出来的全是「本院认为」「根据《XXX法》第X条」这种套话,根本不会回答问题。
为什么会这样?因为裁判文书是写给法官看的,不是写给普通人看的。我们需要做的是「翻译」——把法言法语转成大白话。
4.2.1 问答对构建原则
- 问题要具体:不要问「什么是合同法」,要问「我签了合同对方不履行怎么办」
- 答案要可操作:给出具体步骤,而不是只列法条
- 覆盖常见场景:婚姻、借贷、劳动纠纷、交通事故等
我曾经犯过一个错误:构建了太多「法条解释」类问答对。结果模型变成了一个「法条复读机」。后来我调整策略,加入了大量「案例分析」和「维权指南」类数据,效果明显改善。
4.2.2 数据清洗要点
| 问题类型 | 处理方式 | 示例 |
|---|---|---|
| 法条原文 | 转为问答形式 | 「《民法典》第1046条是什么?」→「该条规定了结婚自愿原则」 |
| 案例描述 | 提取核心争议点 | 去掉当事人姓名、具体金额等无关细节 |
| 咨询记录 | 标准化表达 | 把口语「我被人打了」转为「遭受人身伤害」 |
4.3 多轮对话数据构造
多轮对话是法律场景的刚需。你想想看,当事人咨询律师,从来不是一问一答就完事的。他会追问、会补充细节、会反驳。模型必须学会「记住上下文」。
4.3.1 构造策略
我常用的方法有三种:
- 人工编写:找法律专业人士模拟咨询场景,写对话脚本
- 单轮转多轮:把已有的问答对,通过「追问」的方式扩展成多轮
- 数据增强:用大模型生成多轮对话,然后人工审核
举个例子,单轮转多轮:
原始问答对:
Q: 离婚需要什么条件?
A: 需要感情确已破裂,调解无效。
扩展为多轮:
Q1: 离婚需要什么条件?
A1: 需要感情确已破裂,调解无效。
Q2: 怎么证明感情破裂?
A2: 比如分居满两年、家暴、出轨等。
Q3: 分居怎么证明?
A3: 租房合同、水电费账单、邻居证言等。
4.3.2 对话长度控制
多轮对话不是越长越好。我建议控制在 3-5 轮。太短了学不到上下文,太长了模型容易「迷失」。另外,每轮对话的 token 数也要控制,法律场景下,单轮回答建议不超过 200 个 token。
4.4 知识体系总览
下面这张图,是我自己总结的数据格式处理流程。你可以把它当作一个检查清单:
说白了,数据格式这件事,没有银弹。Alpaca 适合单轮问答,ShareGPT 适合多轮对话。法律问答对要「接地气」,多轮对话要「有逻辑」。我个人的经验是:先小批量试跑,看看模型输出质量,再决定要不要大规模构建。
核心要点回顾:
- Alpaca 格式:instruction + input + output,适合单轮
- ShareGPT 格式:conversations 数组,适合多轮
- 法律问答对要「翻译」成大白话,不要直接用法条原文
- 多轮对话控制在 3-5 轮,单轮回答不超过 200 token
- 自动生成的数据必须人工审核,尤其是法条部分