哈喽,大家好👏🏻
我是阿星!
接上回啥时候上RAG?啥时候上微调?丨实战笔记里说到的------
为什么没事儿不要想着微调?
先来看这个金融模型case的微调用了多少数据👇🏻
📈 CFGPT: Chinese Financial Assistant with Large Language Model
这只是量级上的吓人,况且微调对数据的要求比rag要严。
下面就是几种常见的微调方式(不严谨地暂且这么分类),为什么会让工程难度增加。
不管你是不是AI产品经理,都应该过一眼,了解清楚这些东西的原理,
这样别人跟你说微调的时候,你就可以根据这些分类,做到心中有数。
CPT:
CPT是通过引入更多垂直概念对应的解释文本,来让模型学会新知识
- 先说成本,数据量、数据质量要求都很高,可能你都找不到这么多数据
- 1000万token约1500万字的训练数据集起步
- 需要是纯文本段落,段落长短大概是2k-128k,不能太长也不能太短,需要根据你的底模来选
- 训练时长上,看模型和硬件水平,短的话几十个小时,多的话好几天也有
- 示例代码如下,来自百炼云
swift
{"text":"基本竞争战略是由美国哈佛商学院著名的战略管理学家迈克尔·波特提出的,分别为:成本领先战略,差异化战略,集中化战略.企业必须从这三种战略中选择一种,作为其主导战略.要么把成本控制到比竞争者更低的程度;要么在企业产品和服务中形成与众不同的特色,让顾客感觉到你提供了比其他竞争者更多的价值;要么企业致力于服务于某一特定的市场细分,某一特定的产品种类或某一特定的地理范围."}
{"text":"交通运行监测调度中心,简称TOCC(Transportation Operations Coordination Center)TOCC围绕综合交通运输协调体系的构建,实施交通运行的监测,预测和预警,面向公众提供交通信息服务,开展多种运输方式的调度协调,提供交通行政管理和应急处置的信息保障.\nTOCC是综合交通运行监测协调体系的核心组成部分,实现了涵盖城市道路,高速公路,国省干线三大路网,轨道交通,地面公交,出租汽车三大市内交通方式,公路客运,铁路客运,民航客运三大城际交通方式的综合运行监测和协调联动,在综合交通的政府决策,行业监管,企业运营,百姓出行方面发挥了突出的作用."}
{"text":"美国职业摄影师协会(简称PPA)创立于1880年,是一个几乎与摄影术诞生历史一样悠久的享誉世界的非赢利性国际摄影组织,是由世界上54个国家的25000余名职业摄影师个人会员和近二百个附属组织和分支机构共同组成的,是世界上最大的专业摄影师协会.本世纪初PPA创立了美国视觉艺术家联盟及其所隶属的美国国际商业摄影师协会,美国新闻及体育摄影师协会,美国学生摄影联合会等组织.PPA在艺术,商业,纪实,体育等摄影领域一直引领世界潮流,走在世界摄影艺术与技术应用及商业规划管理的最前沿."}
SFT-文本模型微调
- 简单说SFT是通过QA对来引导模型按制定结构和风格生成
- 至少1000个jsonQA对,不能低于这个数,可以是单轮也可以是多轮
- 回答文案质量要求非常高
- 不能只是用垂直领域的资料,需要有通用的知识,防止过拟合只是专注于你的问题把别的忘了以至于无法回答通识问题了
- 我们可以在每个QA对进行system提示词约束角色
- SFT有全参也有LoRA,全参质量好但是慢,后者快但是效果弱
- 时间上,少的几十分钟也可以训练完
- 示例代码如下,来自百炼云。不同微调工具的数据集要求可能有点区别
json
{ "messages": [{
"role": "system",
"content": "You are a helpful assistant" },
{ "role": "user",
"content": "谁在文艺复兴时期绘制人体?" },
{ "role": "assistant",
"content": "文艺复兴时期是一个关于艺术、文化和学术的复兴运动,在这个时期,许多艺术家都绘制了人体。" }]}
SFT-视觉理解微调
-
视觉理解比文本的微调现在更是急需的,因为文本类模型已经比较成熟了,而且可以用rag代替一部分文本微调。但是高参的图像模型没有文本类的模型那么多,所以现在图像理解的微调反而是重要的一部分。
-
- 比如LaTeX的图像识别,需要极高的准确性,所以我们需要微调来实现,禁止模型自由发挥公式。
-
基本最少 1000多个提问+回答对(也看规模像这个公式识别项目的微调要 10 万条)
-
你可以是单轮也可以是多轮问答对
-
可以是单张,也可多张作为问答对象
-
不是所有模型都支持图片最大分辨率1024,有的只支持512
-
最需要注意的是,图片的很多内容是人类语言没法概括的。比如笑里藏刀,把笑里藏刀提供给了模型,模型把笑里藏刀对应到了普通的微笑上。属于特殊case需要另外处理。

DPO
- DPO就是通过负面回复教会模型不该做什么。
- 只用一两百条数据也可以进行微调。对比 SFT 有的大一点图像理解项目可能达到十万条、手写体 100k 的完整数据集这种数量。
- 主要考验你给的QA对质量,先看字段chosen、rejected。你看下面的rejected其实不是正面拒绝,你可以自己设置成更直接的。
- 但是DPO比结构化提示词里的constrain要更加好一些,模型看提示词的时候受模型注意力机制的影响,不一定能识别你的constrain,甚至可能事得其反。但是放在微调里就会好一些,但是错误回答的示例也是需要你花时间成本设计的。。我们之前看到的提示词工程、提示词微调,其实是比较过渡的做法。
json
{"messages":[{"role":"user","content":"你能帮我写一篇关于环境保护的文章吗?"}],
"chosen":{"role":"assistant","content":"当然可以。环境保护是一个非常重要的话题,我们可以从减少碳排放、保护森林和水资源、推广可再生能源等方面来入手。你想要文章的具体方向和字数是多少呢?"},
"rejected":{"role":"assistant","content":"可以的,环境保护是一个重要的话题。"}
......