第四节:数据格式——指令微调数据格式与法律问答对构建

好,咱们今天聊聊数据格式。说实话,我在做法律大模型微调时,踩得最多的坑就是数据格式。格式不对,模型学出来的东西就歪了。你想想看,法律文本本身就很严谨,格式要是再出问题,那真是雪上加霜。

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 构造策略

我常用的方法有三种:

  1. 人工编写:找法律专业人士模拟咨询场景,写对话脚本
  2. 单轮转多轮:把已有的问答对,通过「追问」的方式扩展成多轮
  3. 数据增强:用大模型生成多轮对话,然后人工审核

举个例子,单轮转多轮:

原始问答对:
Q: 离婚需要什么条件?
A: 需要感情确已破裂,调解无效。

扩展为多轮:
Q1: 离婚需要什么条件?
A1: 需要感情确已破裂,调解无效。
Q2: 怎么证明感情破裂?
A2: 比如分居满两年、家暴、出轨等。
Q3: 分居怎么证明?
A3: 租房合同、水电费账单、邻居证言等。
避坑指南: 我曾经用大模型自动生成多轮对话,结果模型自己编造法条。比如「根据《民法典》第9999条」这种明显错误。所以自动生成的数据一定要人工审核,尤其是法律条文部分。

4.3.2 对话长度控制

多轮对话不是越长越好。我建议控制在 3-5 轮。太短了学不到上下文,太长了模型容易「迷失」。另外,每轮对话的 token 数也要控制,法律场景下,单轮回答建议不超过 200 个 token。

4.4 知识体系总览

下面这张图,是我自己总结的数据格式处理流程。你可以把它当作一个检查清单:

法律大模型微调数据格式处理流程 原始数据源 格式选择:Alpaca / ShareGPT 数据构建:问答对 / 多轮对话 数据清洗与审核 微调训练数据 裁判文书、法律咨询、 法条原文、案例库 根据任务场景选择 人工编写 / 自动生成 单轮转多轮 法条校验、格式统一 去重、去噪

说白了,数据格式这件事,没有银弹。Alpaca 适合单轮问答,ShareGPT 适合多轮对话。法律问答对要「接地气」,多轮对话要「有逻辑」。我个人的经验是:先小批量试跑,看看模型输出质量,再决定要不要大规模构建。

核心要点回顾:

  • Alpaca 格式:instruction + input + output,适合单轮
  • ShareGPT 格式:conversations 数组,适合多轮
  • 法律问答对要「翻译」成大白话,不要直接用法条原文
  • 多轮对话控制在 3-5 轮,单轮回答不超过 200 token
  • 自动生成的数据必须人工审核,尤其是法条部分

专注资料整理