阿里云百炼SFT微调实践

1. 场景识别

用户进行SFT前需要对应用场景进行识别和分析,一般进行模型微调的诉求是希望提升对应业务场景的能力,用户需要明确哪些能力是需要进行重点提升的。

  • 场景划分上来讲,以垂类场景进行划分可分为教育、医疗、金融、法律、电商、旅游、娱乐、人力资源、物流与运输等场景。
  • 以语言能力进行划分,可分为信息抽取、阅读理解、创意生成、角色扮演、推理等能力维度。

场景识别和分析的目的在于可以帮助用户更好地去界定需要通过模型微调去提升什么能力,从而更有针对性地进行数据准备、微调配置和评测构建。

2. 数据准备

SFT数据需要根据对应场景能力要求进行准备,比如公文写作场景就需要准备不同公文写作主题的问答数据,数学作业助手场景就需要准备不同类型的数学考题问答数据。准备数据时候需要特别关注数据质量多样性两个方面,需要确保数据质量相对较好,否则基于质量差的数据进行SFT会拿到反向效果,同时需要注意保持数据中问题和回答的多样性,数据过于雷同会导致模型过拟合以致效果不及预期。

用户经常问到的一个问题是进行有效SFT需要多大数据量,严谨来说目前没有一个广泛认可的答案,通用能力对齐方向,LIMA和AlpaGasus等相关工作表示几千条高质量SFT数据就可以拿到较好的对齐效果,但另一方面在开源大模型实践上,前沿大模型正用到越来越多的数据进行SFT,比如Llama 3模型用到了百万级别的SFT数据。

经验性来讲,普通场景上进行有效SFT一般至少需要上千条精标数据,不同场景和要求下所需的数据量会有差别。需要特别注意的是训练效果好坏并不是说只取决于数据量,也尤其需要考虑数据的多样性和质量,大量内容非常雷同的数据可能不如少量内容较为多样的数据,大量质量差的数据可能不如少量质量好的数据。

以小学数学作业助手应用场景为例,我们需要准备对应的问答数据,数据格式要求上目前百炼平台上SFT模块采用的是ChatML格式,两个简单的SFT数据例子如下所示。

{"messages": [{"role": "user", "content": "Brennan was researching his school project and had to download files from the internet to his computer to use for reference. After downloading 1200 files, he deleted 60% of them because they were not helpful. He downloaded 300 more files but again realized that 4/5 of them were irrelevant. How many valuable files was he left with after deleting the unrelated files he downloaded in the second round?"}, {"role": "assistant", "content": "To find out how many valuable files Brennan was left with, we need to calculate the number of files he kept after each deletion.\n\n1. **First Round:**\n   - Brennan initially downloaded 1200 files.\n   - He deleted 60% of them because they were not helpful.\n   - The number of files deleted = 60% of 1200 = 0.60 * 1200 = 720 files.\n   - The number of files he kept = 1200 - 720 = 480 files.\n\n2. **Second Round:**\n   - Brennan downloaded an additional 300 files.\n   - 4/5 of these files were irrelevant, so he kept 1/5 of them.\n   - The number of files he kept from the second round = 1/5 * 300 = 60 files.\n\n3. **Total Valuable Files:**\n   - The total number of valuable files Brennan was left with = the number of files he kept from the first round + the number of files he kept from the second round.\n   - Total valuable files = 480 + 60 = 540 files.\n\nTherefore, Brennan was left with 540 valuable files after deleting the unrelated files he downloaded in the second round."}]}
{"messages": [{"role": "user", "content": "考虑一场由蓝队和熊队进行的冰球比赛。整场比赛共射门40次。如果熊队比蓝队少射门12次,那么两队各射门多少次?"}, {"role": "assistant", "content": "我们用 $B$ 表示蓝队投篮的次数,$T$ 表示熊队投篮的次数。根据题目,我们有以下两个方程:\n\n1. $B + T = 40$ (两队共投了 40 次篮)\n2. $B = T + 12$ (蓝队比熊队多投了 12 次篮)\n\n我们可以通过解这个方程组来找到 $B$ 和 $T$ 的值。\n\n将第二个方程代入第一个方程,我们得到:\n\n\\[T + 12 + T = 40\\]\n\n合并同类项:\n\n\\[2T + 12 = 40\\]\n\n两边同时减去 12:\n\n\\[2T = 28\\]\n\n两边同时除以 2:\n\n\\[T = 14\\]\n\n现在我们知道了 $T = 14$,可以通过将 $T$ 代入一个原方程来找到 $B$ 的值。使用 $B = T + 12$:\n\n\\[B = 14 + 12\\]\n\n\\[B = 26\\]\n\n因此,蓝队投了 26 次篮,而熊队投了 14 次篮。"}]}

准备数据过程中一个常有的问题是数据量不足的问题,从保证数据质量的角度考虑,数据量不足情况下 最好基于专业人员进行数据构造和标注;百炼上目前也有提供基于self-instruct方法的SFT数据增强功能, 在有高质量样例数据且判断模型生成数据可用情况下,可以使用该功能进行数据扩增,用户需要上传一份 精标数据样例文件,在数据增强窗口提交任务进行数据生成。

3. 模型微调

模型微调用户一般比较关注如下几个问题:选择什么模型?用哪种训练方式?超参怎么配置?

3.1 模型选择

以Qwen系列模型的选择为例,模型版本角度,尽量选最新的模型版本,其效果会好一些,比如同等参数量模型Qwen 2系列表现好于Qwen 1.5系列;参数量角度,效果优先考虑情况下,优先选择大参数量模型比如Qwen-Max,而成本和推理速度优先情况下则选择满足用户效果需求的最小参数模型。

3.2 训练方式

训练方式的选择上,目前百炼上提供了全参训练和高效训练(即LoRA训练)两种方式,高效训练通过训练一些额外的低秩矩阵参数达成微调,相对于直接进行全参微调的方式,高效训练对模型通用能力的影响更小。因此,在用户数据量较少或者希望通用能力保留较好的情况下建议优先选择高效训练。

3.3 超参配置

超参配置上,严谨来说,不同场景、不同数据、不同目标需求下需要的超参不一样,因此只能给一些比较宽泛的、经验性的建议,需要结合场景做进一步实验和调整。经验性来讲,用户数据量如果是几千条级别,建议初始尝试epoch可以设置为3~5,如果是万条以上级别,建议epoch可以设置为1~2,具体需要结合实验效果进行判断;高效训练建议学习率取1e-4到1e-5量级,全参训练对应学习率可以稍低一些,学习率调整策略除非用户有比较强先验,否则建议取linear或cosine一类经典配置。LoRA秩值越大,理论上越接近于全参微调,调整alpha值大致等同于调整learning rate,目标模块为Auto相比于ALL,对应调整参数量一般更少,目前配置上百炼默认给了一个版本,无先验情况下可以先按该配置进行训练。

3.4 实践案例

以小学数学作业助手应用场景为例,用户构造了约1万条数据,出于效率考虑选择Qwen Turbo模型,基于该模型进行SFT,对应参数配置如下,在百炼上提交训练任务等待训练完成即可。

4. 能力评测

模型微调完成后,一般会根据具体场景和要求进行能力评测。一般用户进行SFT的诉求是想基于自有行业数据提升对应领域的能力,若用户有标准评测流程,可通过模型部署拿到api接口,接入到自有评价体系进行评测;若用户评测主要靠人工或模型标注,可通过百炼提供的人工评测或自动评测完成。此外,百炼评测模块也提供了如C-Eval、MMLU、GSM8K、BBH等多项评测基准,可直接选择模型提交job进行评测。

以本文使用的小学数学作业助手应用场景为例,考虑GSM8K评测数据集可用于衡量模型简单数学问答能力的强弱,因此可直接在百炼上选中模型和GSM8K评测数据集进行评测。

如下表所示,对比SFT前后模型表现,SFT后模型数学能力有一定提升。

用户使用的基模

基于3k条数据进行微调

基于10k条数据进行微调

GSM8K评测分数

75.74

76.35

76.8

5. 模型部署

用户微调并评测选择好模型后,可直接在百炼平台上进行部署,部署完毕即可通过API调用该模型应用于业务场景上,如下所示,在百炼体验界面上可选中对应模型自动生成API调用示例代码。

6. 常见问题

6.1 效果问题

LLM的SFT与传统机器学习场景类似,同样会面对下面几种失败情况:

  • 过拟合:由于训练样本较少、缺乏多样性、以及训练轮数过多的情况,导致模型在新样本上泛化能力较差,一般建议通过提升数据集的多样性来缓解该问题。
  • 欠拟合:由于LLM一般具有较大的参数规模,欠拟合的现象,一般是较少的训练轮数和较低的learning rate导致,而不是模型能力导致。
  • 灾难性遗忘:很多用户在使用LLM SFT场景下,会担心模型丢失通用能力,现阶段的方法一般是混合通用SFT数据的方式进行缓解,百炼平台提供数据混合的方案,用户可以混入通用数据集缓解通用能力丢失问题。

6.2 模型微调 vs. 知识库检索

当考虑采用模型微调还是知识库检索方案,可以考虑以下几个要素:

  • 任务场景:特定领域的任务场景,如任务分类、情感分析、文本排序等NLU任务,以及结构化数据提取、文章总结等NLG任务,一般采用模型微调是较好的选择,模型微调前可以先尝试in-context learning的方案,随着基础模型的能力提升,很多任务场景借助in-context learning可以取得较好的结果。
  • 知识更新:相比于采用模型微调更新领域知识,借助知识库检索的方案,能够较低成本支持外部知识的动态更新,以及缓解模型输出的幻觉问题;
  • 资源约束:相比于模型微调和部署的成本,知识库检索一般具有更低的使用成本。
  • 数据标注:模型微调往往依赖标签数据,在数据标注难以获取的情况下,一种方案是借助数据生成方式进行扩展,备选方式是采用in-context learning和知识库检索的方案。

当然模型微调和知识库检索,也并不是二选一的关系,很多复杂的业务场景,可以综合采用模型微调和知识库检索的技术方案,以客服场景为例,可以借助模型微调可以解决客服回答的语气、表达习惯、自我认知等问题,场景涉及的专业知识可以结合知识库,动态引入到模型上下文中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/883287.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

c++模拟真人鼠标轨迹算法

一.鼠标轨迹算法简介 鼠标轨迹底层实现采用 C / C语言,利用其高性能和系统级访问能力,开发出高效的鼠标轨迹模拟算法。通过将算法封装为 DLL(动态链接库),可以方便地在不同的编程环境中调用,实现跨语言的兼…

C++系列-Stackqueue

🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” Stack 在之前的例子中,我们用C语言实现过stack,大家有兴趣的可以翻一下我之前的文章。 大概意思如下: class stack{public://.......privat…

31214324

📢博客主页:https://blog.csdn.net/2301_779549673 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由 JohnKi 原创,首发于 CSDN🙉 📢未来很长&#…

JS面试真题 part6

JS面试真题 part6 26、如何判断一个元素是否在可视区域中27、什么是单点登录?如何实现28、 如何实现上拉加载,下拉刷新29、说说你对正则表达式的理解?应用场景?30、说说你对函数式编程的理解?优缺点 26、如何判断一个元…

2015年国赛高教杯数学建模B题互联网+时代的出租车资源配置解题全过程文档及程序

2015年国赛高教杯数学建模 B题 互联网时代的出租车资源配置 出租车是市民出行的重要交通工具之一,“打车难”是人们关注的一个社会热点问题。随着“互联网”时代的到来,有多家公司依托移动互联网建立了打车软件服务平台,实现了乘客与出租车司…

蓝桥杯1.小蓝的漆房

样例输入 2 5 2 1 1 2 2 1 6 2 1 2 2 3 3 3样例输出 1 2 import math import os import sys tint(input())#执行的次数 for j in range(t):n,kmap(int,input().split())#n为房间数 k为一次能涂的个数alist(map(int,input().split()))#以列表的形式存放房间的颜色maxvaluemath…

如何搭建Vue脚手架

Vue 脚手架是Vue官方提供的标准化开发工具(开发平台) 官方文档: Vue CLI 第一步(仅需第一次执行): 安装nodejs环境 官网下载nodejs: https://nodejs.org/en/download/ 第二步(仅需第一次执行): 全局安装vue/cli npm install -g vue/cli 第三步:切换到你需要创建项目的目录,…

Clion使用vcpkg管理C/C++包

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Clion安装vcpkg二、使用步骤1.切换到清单模式2.开始安装包 三、测试代码总结 前言 Linux上的库基本都可以通过apt或yum等包管理工具来在线安装包&#xff…

mariadb实现冷备份与恢复操作案例(物理冷备份,周期性备份)详解

文章目录 前置环境一、物理冷备份1.备份2.恢复检查结果 补充: 周期性恢复操作 前置环境 主机ipmariadb1192.168.10.11mariadb2192.168.10.12 mairadb1操作 安装mariadb yum -y install mariadb-server启动mariadb systemctl start mariadb这里只是演示备份与恢复…

cefsharp新版本OnBeforeResourceLoad 禁止http自动跳转https显示404错误解决办法 含代码

一、问题 因项目需要,域名没有ssl证书,结果http访问时被强制定向到https前缀,结果会显示404 测试版本cefsharp126.x (x64) 框架 CefSharp.WinForms.NETCore 二、代码(核心代码) 如果请求url是http,且目标是https时,则阻止请求 //判断请求变化 if (url.StartsWith(<…

初试Bootstrap前端框架

文章目录 一、Bootstrap概述二、Bootstrap实例1、创建网页2、编写代码3、代码说明4、浏览网页&#xff0c;查看结果5、登录按钮事件处理6、浏览网页&#xff0c;查看结果 三、实战小结 一、Bootstrap概述 大家好&#xff0c;今天我们将一起学习一个非常流行的前端框架——Boot…

Error: one input ui-file must be specified(问题已解决)

一、 项目场景问题描述 Error: one input ui-file must be specified pycharm IDE添加了外部工具。 QT Designer设计完成&#xff0c;生成界面ui文件&#xff0c; 3.运行pyuic5转换文件 方式一&#xff1a;选中ui文件 方式二:右击选中.ui文件。 报错&#xff1a;Error: o…

SpringCloud Alibaba五大组件之——Sentinel

SpringCloud Alibaba五大组件之——Sentinel&#xff08;文末附有完整项目GitHub链接&#xff09; 前言一、什么是Sentinel二、Sentinel控制台1.下载jar包2.自己打包3.启动控制台4.浏览器访问 三、项目中引入Sentinel1.在api-service模块的pom文件引入依赖&#xff1a;2.applic…

<Java>String类型变量的使用

两边有一个string就是连接&#xff0c;否则做加法 ‘ ’是char&#xff0c;“ ”是string&#xff0c;char能做加法&#xff0c;string只能连接

R包:ggheatmap热图

加载R包 # devtools::install_github("XiaoLuo-boy/ggheatmap")library(ggheatmap) library(tidyr)数据 set.seed(123) df <- matrix(runif(225,0,10),ncol 15) colnames(df) <- paste("sample",1:15,sep "") rownames(df) <- sapp…

NLP技术在营业选址中的实践与探索

传统营业选址面临的问题 在电信业务的服务流程中&#xff0c;用户装机地址的准确性和清晰度对于整个服务体验和运营效率起着至关重要的作用。然而&#xff0c;在实际操作中&#xff0c;装机地址的确定往往面临诸多挑战&#xff0c;这些问题不仅影响用户的服务体验&#xff0c;也…

wireshark使用要点

目录 IP过滤 端口过滤 内容过滤 过滤udp 过滤tcp IP过滤 ip.src XXX.XXX.XXX.XXX 只显示消息源地址为XXX.XXX.XXX.XXX的信息 ip.dst XXX.XXX.XXX.XXX 只显示消息目的地址为XXX.XXX.XXX.XXX的信息 ip.addr XXX.XXX.XXX.XXX显示消息源地址为XXX.XXX.XXX.XXX&#xff0…

通过 OBD Demo 体验 OceanBase 4.3 社区版

本文作者&#xff1a;马顺华 引言 OceanBase 4.3 是一个专为实时分析 AP 业务设计的重大更新版本。它基于LSM-Tree架构&#xff0c;引入了列存引擎&#xff0c;实现了行存与列存数据存储的无缝整合。这一版本不仅显著提升了AP场景的查询性能&#xff0c;同时也确保了TP业务场景…

抽象类、比较器和接口

一.抽象类 1.抽象类的概念&#xff1a;如果一个类中没有包含足够的信息来描述一个具体的对象&#xff0c;这样的类就是抽象类。&#xff08;图例说明&#xff1a;&#xff09; 2.抽象方法的概念&#xff1a;当一个方法被abstract来修饰&#xff0c;此时代表着这个方法可以不进…

leetcode-189:轮转数组

给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步: [5,6,7,1,2,3,4…