首页   

大模型微调(Fine-Tuning)全流程思考

Datawhale  · 科技自媒体  · 1 周前

主要观点总结

本文介绍了大模型微调的过程和相关要点,包括数据集的获取与构建、模型基底的比较、模型训练、效果的评估以及模型的发布等内容。

关键观点总结

关键观点1: 大模型微调的过程

文章介绍了大模型微调的全过程,包括数据集的准备、模型的训练、参数的调整等。

关键观点2: 数据集的获取与构建

文章提到了数据集的获取方式,包括从相关开源平台搜索并下载,尝试从网站上爬取,以及自行构建数据集等。

关键观点3: 模型基底的比较

文章强调了选择合适的模型基底的重要性,并介绍了如何在不同垂直领域进行测试与总结。

关键观点4: 模型训练

文章介绍了模型训练的过程,包括参数的选择、训练次数的控制等。

关键观点5: 效果的评估

文章提到了如何评估模型的效果,包括使用客观和主观的标准来衡量,并介绍了过拟合的概念及其解决方法。

关键观点6: 模型的发布

文章介绍了模型发布后的调用方式,以及相关成本和考虑因素。

关键观点7: 其他考虑因素

文章还提到了在实际过程中需要考虑的其他因素,如模型的每一次测试、训练的成本,以及如何将模型打造成商业产品等。


正文

 Datawhale分享 

作者:August

大模型微调的过程

💡建议严格按照此流程来,不要跳步,不然可能会做无用功。 
比如如果没有好好构建数据集,最后发现微调模型效果不佳是数据集的问题,就事倍功半了。 

方案的构思与落地:几种可能的选择

我有个问题,我现在写了一个prompt,用户可以自己输入内容,但我不想让用户看见这个prompt,只有一个输入区在那儿,要怎么实现呢? 
我怎么能够调用两个模型,让他们相互衔接呢? 
…… 
在正式开始之前,需要先想好以下问题: 
  • 自己想要做的到底是什么?它要达到什么效果?预期目标是什么?
  • 自己做的到底是一个广而泛之的大模型、还是一个封装好的产品(如智能体)?
  • 创新点是在于专业领域的深耕(意味着需要训练新模型)、还是已有内容的衔接(意味着调用已有模型,用到工作流),还是二者都有?
❓什么是Agent? 
——Agent指的是基于人工智能技术,尤其是大型语言模型(LLM),能够感知和理解环境,并采取行动以完成目标的智能实体 
在讯飞MaaS上,如果我们想做一个Agent,可以在大模型应用平台中实现。 
❓什么是workflow? 
——工作流(Workflow)是指完成特定任务或一系列任务的步骤和过程。在讯飞MaaS的大模型应用平台中有对应的模块。目前已经上线的节点有:大模型、代码、决策、分支器、变量提取器、文本拼接等等。 
如果你的idea需要训练新模型,那么可以继续往下。但如果你的idea只是涉及已有模型的流程拼接,则可以直接用workflow实现,不涉及以下过程。 

数据集的获取与构建

数据集的获取

练成数据集,微调就成功了一大半。 
——不要葱姜蒜老师 
对于新手而言,我们可以根据数据集的可获得性分为两种:公开已有的、难以获得的。 
❓如何获得公开已有的数据? 
——最简单的数据集获取方案是去相关开源平台搜索并下载,如:githubhugging face魔搭等平台。尤其是小说等文本类数据特别多。 
也可以尝试从网站上爬取,但需要一定技术支持。 
❓如果我需要的数据全网没有/难以获得怎么办? 
——自行构建数据集。 
然而,自行构建几百上千条数据集非常麻烦,如何能够快速实现这一过程?这里介绍两个思路 
  • 借助讯飞MaaS平台的数据增强功能。可以先尝试自己手搓50条数据,然后再借助讯飞MAAS平台【数据增强】功能让数据翻倍。
  • 借助大模型快速构建数据集。手搓了几十条数据后,把数据作为示例丢给大模型,让它输出类似的内容
    • ❗一开始不要让大模型生成太多,建议第一轮先让大模型生成20条,精读这20条,找大模型经常会犯的错误。然后把这些错误作为错误示例加入到Prompt中
    • 个人经验:大模型一轮可以做到生成200条及以上的数据
一个简单的Prompt示例(来自@August) 
参照示例,输出20个类似的“近期运气”问题给我,注意要生活化、语言不要太夸张,最好不要有场景、有类似于“在活动中”、“在比赛中”之类的定语与状语;语句不要太累赘、尤其是不要有太多定语,正常人不这样说话。示例:我这个季度顺利吗?我这个季度会发财吗?最近有哪些事情在等着我?最近会发生什么事情?近期我能否被幸运之神垂青?

数据的清洗

原始数据集并不符合模型训练可以接受的形式,因此需要对原始数据进行清理,处理为模型可以学习的格式。 
在讯飞MaaS平台中,微调数据集通常以AIpaca的形式构建。具体内容详见讯飞开放平台说明。 

AIpaca

特点:结构简单,适用于文本生成、翻译、总结等任务,尤其是单轮的、任务导向的指令微调 
  • instruction任务的指令,类似于用户的直接输入
  • input任务所需的输入内容。通常情况下为空(因为若任务是开放式的,或者不需要明确输入,可以为空字符串)
  • output在给定指令和输入的情况下,模型需要生成的期望输出,也就是对应的正确结果或参考答案。
  • system可以理解成模型的预先Prompt
[  {    "instruction": "人类指令(必填)",    "input": "人类输入(选填)",    "output": "模型回答(必填)",    "system": "系统提示词(选填)",    "history": [      ["第一轮指令(选填)", "第一轮回答(选填)"],      ["第二轮指令(选填)", "第二轮回答(选填)"]    ]  }]
简单来说,这个结构可以理解为:请大模型记住现在的角色history,当用户输入类似于instruction内容的时候,大模型需要返回类似于output的结果 
相当于帮助大模型建立了问题-回答之间的映射关系。 
  • 可以把数据集理解为给模型的练习题
  • instruction+input = 问题
  • output = 答案

模型基底的比较

在正式开始调试模型前,特别重要的是选择一个合适的模型基底。尽管讯飞MaaS平台已经对模型擅长的内容有了一些介绍,但具体到各个垂直领域,还是需要自行测试与总结。 
其中,讯飞MaaS平台上提供的Llama3模型主要基于英文语料(训练语料中只有0.2%是中文)所以经常会有同学有以下问题: 
❓如何实现Llama3的输出是中文? 
——输入自己的中文数据集,然后选择全参数微调,然后再次进行lora训练。 
同时,也可以在自己的中文数据集的system部分加入“请输出中文”(但目前讯飞MaaS平台好像不支持这个) 

模型训练

构建好数据集、选择好模型基底后,可以开始训练模型啦! 

参数的选择

在训练模型的过程中,有很多参数可以选择。 
💡个人的经验是,需要尤其注意其中的“训练次数”!若数据集超过10000了,训练次数最高也要低于5,不然会出现过拟合问题(下章) 

效果的评估

大家都说效果不好,那你的预期目标效果是什么呢? 
——葱姜蒜煎蛋老师 
对于模型效果的评估,我们可以用客观+主观的标准来衡量。尤其要注意出现过拟合问题。 
❓什么是过拟合? 
——过拟合指的是模型学习数据时,不仅记住了数据中的细节,还把偶然出现、不重要的东西(即“噪声”)同时记住了。 
当出现过拟合问题的时候,可以考虑 
  • 数据集问题:提升数据集质量/数据集过多
  • 微调问题:学习轮次与数据条数不匹配,学习轮次过多

主观的标准:根据自己对产品的预期,确定预期目标效果的评估框架。这是最重要的 
客观的标准:查看loss曲线。 
Loss曲线是用于评估模型学习状态(学习损失)的曲线。 
你的loss曲线调到0.1、0.2了,肯定不行呀 
——葱姜蒜煎蛋老师 

理想的拟合状态

有待提升的拟合状态

以下内容来自Cheng Xiaojuan的笔记机器学习术语表 
表现1:loss下降的非常平缓,以至于似乎并没有下降,这说明模型根本没从数据中学到东西(欠拟合)。 
 
表现2:曲线振荡 
表现3:模型急剧跳跃 
表现4:loss值过低,快到0.2、0.3了(来自@August) 

模型的发布

模型做好发布后,可以直接调用API,请求地址如下: 
wss://xingchen-api.cn-huabei-1.xf-yun.com/v1.1/chat
调用API可参考以下文档:开源大模型 Web API文档 

还有更多需要考虑……

目前得益于讯飞MaaS平台的开放性和公益性,模型的训练、发布、调用很多都不需要考虑成本问题。 
然而在实际过程中,模型的每一次测试、训练等都是有成本的。如果想把模型打造成一个商业产品,则一定需要考虑成本问题。 
你的模型商业成本是多少?已经最低了吗? 
比如: 
❓如果有两种技术实现路径,第一个路径是用一个模型、一次实现,但是Prompt超级长(差不多2000字)、另一个是用workflow,涉及到2~3个模型,整个workflow的prompt字数可能在1000以内。一般哪个路径更便宜呢? 
——费用主要看模型的输入输出的token,如果都差不多的话,那价格也差不多。
作者主页:https://blog.csdn.net/weixin_45092438/category_12856410.html

一起“三连

© 2024 藏经阁
删除内容请联系邮箱 2879853325@qq.com