大模型微调的过程
💡建议严格按照此流程来,不要跳步,不然可能会做无用功。
比如如果没有好好构建数据集,最后发现微调模型效果不佳是数据集的问题,就事倍功半了。
方案的构思与落地:几种可能的选择
我有个问题,我现在写了一个prompt,用户可以自己输入内容,但我不想让用户看见这个prompt,只有一个输入区在那儿,要怎么实现呢?
-
自己想要做的到底是什么?它要达到什么效果?预期目标是什么?
-
自己做的到底是一个广而泛之的大模型、还是一个封装好的产品(如智能体)?
-
创新点是在于专业领域的深耕(意味着需要训练新模型)、还是已有内容的衔接(意味着调用已有模型,用到工作流),还是二者都有?
——Agent指的是基于人工智能技术,尤其是大型语言模型(LLM),能够感知和理解环境,并采取行动以完成目标的智能实体
在讯飞MaaS上,如果我们想做一个Agent,可以在大模型应用平台中实现。
——工作流(Workflow)是指完成特定任务或一系列任务的步骤和过程。在讯飞MaaS的大模型应用平台中有对应的模块。目前已经上线的节点有:大模型、代码、决策、分支器、变量提取器、文本拼接等等。
如果你的idea需要训练新模型,那么可以继续往下。但如果你的idea只是涉及已有模型的流程拼接,则可以直接用workflow实现,不涉及以下过程。
数据集的获取与构建
数据集的获取
对于新手而言,我们可以根据数据集的可获得性分为两种:公开已有的、难以获得的。
——最简单的数据集获取方案是去相关开源平台搜索并下载,如:github、hugging face、魔搭等平台。尤其是小说等文本类数据特别多。
然而,自行构建几百上千条数据集非常麻烦,如何能够快速实现这一过程?这里介绍两个思路
-
借助讯飞MaaS平台的数据增强功能。可以先尝试自己手搓50条数据,然后再借助讯飞MAAS平台【数据增强】功能让数据翻倍。
-
借助大模型快速构建数据集。手搓了几十条数据后,把数据作为示例丢给大模型,让它输出类似的内容
-
❗一开始不要让大模型生成太多,建议第一轮先让大模型生成20条,精读这20条,找大模型经常会犯的错误。然后把这些错误作为错误示例加入到Prompt中
-
个人经验:大模型一轮可以做到生成200条及以上的数据
参照示例,输出20个类似的“近期运气”问题给我,注意要生活化、语言不要太夸张,最好不要有场景、有类似于“在活动中”、“在比赛中”之类的定语与状语;语句不要太累赘、尤其是不要有太多定语,正常人不这样说话。示例:我这个季度顺利吗?
我这个季度会发财吗?
最近有哪些事情在等着我?
最近会发生什么事情?
近期我能否被幸运之神垂青?
数据的清洗
原始数据集并不符合模型训练可以接受的形式,因此需要对原始数据进行清理,处理为模型可以学习的格式。
在讯飞MaaS平台中,微调数据集通常以AIpaca的形式构建。具体内容详见讯飞开放平台说明。
AIpaca
特点:结构简单,适用于文本生成、翻译、总结等任务,尤其是单轮的、任务导向的指令微调
-
instruction任务的指令,类似于用户的直接输入
-
input任务所需的输入内容。通常情况下为空(因为若任务是开放式的,或者不需要明确输入,可以为空字符串)
-
output在给定指令和输入的情况下,模型需要生成的期望输出,也就是对应的正确结果或参考答案。
-
[
{
"instruction": "人类指令(必填)",
"input": "人类输入(选填)",
"output": "模型回答(必填)",
"system": "系统提示词(选填)",
"history": [
["第一轮指令(选填)", "第一轮回答(选填)"],
["第二轮指令(选填)", "第二轮回答(选填)"]
]
}
]
简单来说,这个结构可以理解为:请大模型记住现在的角色history,当用户输入类似于instruction内容的时候,大模型需要返回类似于output的结果
模型基底的比较
在正式开始调试模型前,特别重要的是选择一个合适的模型基底。尽管讯飞MaaS平台已经对模型擅长的内容有了一些介绍,但具体到各个垂直领域,还是需要自行测试与总结。
其中,讯飞MaaS平台上提供的Llama3模型主要基于英文语料(训练语料中只有0.2%是中文)所以经常会有同学有以下问题:
——输入自己的中文数据集,然后选择全参数微调,然后再次进行lora训练。
同时,也可以在自己的中文数据集的system部分加入“请输出中文”(但目前讯飞MaaS平台好像不支持这个)
模型训练
构建好数据集、选择好模型基底后,可以开始训练模型啦!
参数的选择
💡个人的经验是,需要尤其注意其中的“训练次数”!若数据集超过10000了,训练次数最高也要低于5,不然会出现过拟合问题(下章)
效果的评估
对于模型效果的评估,我们可以用客观+主观的标准来衡量。尤其要注意出现过拟合问题。
——过拟合指的是模型学习数据时,不仅记住了数据中的细节,还把偶然出现、不重要的东西(即“噪声”)同时记住了。
主观的标准:根据自己对产品的预期,确定预期目标效果的评估框架。这是最重要的
Loss曲线是用于评估模型学习状态(学习损失)的曲线。
理想的拟合状态
有待提升的拟合状态
以下内容来自Cheng Xiaojuan的笔记和机器学习术语表
表现1:loss下降的非常平缓,以至于似乎并没有下降,这说明模型根本没从数据中学到东西(欠拟合)。
表现4:loss值过低,快到0.2、0.3了(来自@August)
模型的发布
模型做好发布后,可以直接调用API,请求地址如下:
调用API可参考以下文档:开源大模型 Web API文档
还有更多需要考虑……
目前得益于讯飞MaaS平台的开放性和公益性,模型的训练、发布、调用很多都不需要考虑成本问题。
然而在实际过程中,模型的每一次测试、训练等都是有成本的。如果想把模型打造成一个商业产品,则一定需要考虑成本问题。
❓如果有两种技术实现路径,第一个路径是用一个模型、一次实现,但是Prompt超级长(差不多2000字)、另一个是用workflow,涉及到2~3个模型,整个workflow的prompt字数可能在1000以内。一般哪个路径更便宜呢?
——费用主要看模型的输入输出的token,如果都差不多的话,那价格也差不多。
作者主页:https://blog.csdn.net/weixin_45092438/category_12856410.html
(文:Datawhale)