GLM3-6B微调实践-从设计数据集开始针对一个下游业务进行微调

前情提要:

本文章没有代码,只有思路。学习本文章主要学习思路。不要当伸手党

这是本人的原创文章。

相信大家在网上已经看到很多微调的教程以及文章,大多数都是叫你如何使用平台微调,如何配置参数,却很少去结合实际业务谈如何设计数据集,并使用精心设计好的数据集进行微调。

那么本篇文章就以数据集的设计为切入点,以一个实际的业务流程与大家一起学习怎么微调一个下游任务的大模型

在微调一个大模型之前,我们先要搞清楚3个问题:

1.你的需求是什么,这个需求确认需要使用微调技术吗?

2.微调一个模型到底需要多少数据?

3.微调一个模型需要怎么样的数据集?

我们带着问题一步一步往下看

1.需求是什么:

我本身的需求是工厂内部的CRM系统有一个维修派单的模块,在传统的业务状态下,用户提交维修申请需要经过审核人的审批,维修单才会派给维修部门。这个业务流程长,及时率较低。如果使用传统的业务代码根据用户选择的维修设备判断维修负责人,则需要用户进行精准的输入,这对用户的使用来说又不太方便。为了解决这一问题。我决定使用GLM3-6B进行针对这一下游业务的微调,让6B模型来对派单任务做推理(我知道这个业务传统的机器学习模型就能实现,毕竟这个就是一个多分类任务。但是这不是为了水文章以及快速实现嘛,所以就直接使用LLM模型来做了。)

2.微调一个模型需要多少数据集:

这个问题没有标准答案,根据你的下游业务复杂程度来决定,如果业务复杂则需要大量的数据集,如果业务简单则不需要太多数据集。

以本教程为例子,本教程的下游业务不算复杂,一共制作了1.3W条数据,其中1W条机器合成数据,3k条真实世界的数据。这些数据都遵循微调任务的业务逻辑。

3.微调模型需要什么样的数据集:

首先需要确定数据集的样式,由于我们的业务比较简单,所以我们使用了最传统的Alpaca格式数据格式,格式如下

[
  {
    "instruction": "人类指令(必填)",
    "input": "人类输入(选填)",
    "output": "模型回答(必填)",
    "system": "系统提示词(选填)",
    "history": [
      ["第一轮指令(选填)", "第一轮回答(选填)"],
      ["第二轮指令(选填)", "第二轮回答(选填)"]
    ]
  }
]

本次任务不需要这么多字段,本次任务只需要3个最经典的字段来构造数据集,本次使用的数据集结构如下

[
  {
    "instruction": "人类指令(必填)",
    "input": "人类输入(选填)",
    "output": "模型回答(必填)"
  }
]

以上3个核心问题回答完了,下面我们进入实践时间,让大家看看我是怎么构建数据以及微调的

1.合成数据,我们需要对数据集进行填充,以下是我们工厂的CRM的维修派单的数据样例

设备名称	故障描述	负责人
电脑	电脑运行速度越来越慢,有没有什么解决办法?	维修人1
电脑	电脑的屏幕出现了很多小方块,是什么原因?	维修人1
结晶炉	这个结晶炉的安装不符合当地的法规和安全标准	维修人2
立信打印机	打印机无法识别	维修人3
更衣室柜子	门关闭不严或无法关闭	维修人3
窗帘	窗帘无法正确滑动	维修人2
电脑	这个电脑怎么安装不了软件啊	维修人1
ipad	充电器坏了	维修人4
研磨仪	散热不良,冷却系统故障	维修人2
结晶炉	结晶炉坏了	维修人4
研磨仪	研磨盘表面不平,有存在划痕	维修人3

我们根据潜在的业务规则使用线上的大模型合成相似数据。

然后我们开始构建微调数据集

数据集构建的核心思路就是:根据业务规则,构建有指令,把有逻辑的文本内容输入到相应的字段中,然模型去学习。以下是构建的样例

[
  {
    "instruction": "根据输入判断设备在发生该故障的情况下的维修人是谁",
    "input": "电脑	电脑运行速度越来越慢,有没有什么解决办法?",
    "output": "根据规则"电脑	电脑运行速度越来越慢",维修负责人是:维修人1",
    "system": "规则:电脑类设备的维修负责人是维修人1",
  }
]

设计好数据集以后,我们就可以把所有数据集按格式进行组装(数据的拼接需要使用部分代码实现)。拼接成完整的训练数据集文件,剩下的事情就是使用Llama-factory进行微调了。以下是我的微调参数截图(其实大部分都是默认参数)

在A100的环境下,大约训练30分钟即可完成3轮的微调。

完成微调后,我们测试一下实际的结果,验证一下模型的微调是否成功。

模型能根据指令,正确的判断出维修人,对于没有见过的问题也能正常推理,输出的结果无乱码,这样模型微调就算是成功的了。

到此,整个微调过程就结束了,说一下感受

这次微调的心得:

在微调技术已经被各位大佬页面化的今天,微调的算法以及代码细节已经不需要我们去关心了,我们需要关心的是如何结合我们的实际业务去构建符合业务以及微调指令的数据集,并根据数据集进行适当的训练模型。这样才能得出下游业务需要的模型。

而不是纠结在代码细节中自我陶醉,这样才能让AI辅助生产业务。

  • 13
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值