
往期文章:大模型监督微调术SFT:开启AI应用新境界的独家秘方|基础篇(1)
本节关键点:质量 > 数量。
微调数据篇
在大模型的训练过程中,有一个决定性因素可以直接影响着模型的表现和泛化能力——那就是数据的质量与多样性。
毋庸置疑,对于 SFT 工作者而言,分析数据与清洗数据堪称我们工作的核心重头戏,占据了日常工作量的九成之多。
常常有人满怀期待地向我抛出这样一个问题:“你有没有一套神奇的、固定不变的微调模型参数,能够像魔法一样,让模型微调效果瞬间达到巅峰?” 每当此时,我都会微微一笑,缓缓地回答:“哦,朋友,我这可没混血王子的笔记”

要知道,每一个微调任务都是一个独一无二的。具体微调参数我只能根据经验给你一个大概的尝试,具体的效果我可没发保证(听起来有点像xx语录)。微调没有捷径,你只能根据微调后的结果去不断地分析问题,然后再去调整微调参数。当然这里有一个重要的前提--“你的训练数据是正确的”
数据的正确性: 数据的正确主要指两部分内容。
数据不要出现错误。这里主要指训练数据answer部分(prompt部分可以稍微有些瑕疵,看懂即可)。原因:最后计算loss时会把prompt隐藏;真实输入时用户的输入可能千奇百怪。但 answer 是尽量一个标点符号都不要有错误的,该中文引号就中文引号,该单引号就单引号,顺便可以把模型相关的无聊的输出去掉,保证模型答案的简洁性。
数据要尽可能多样。简单的讲就是把模型能遇到的各种任务类型都让它见一次。
如何保证数据的多样性
直接上总结:
数据的形式不能太单一,否则模型就难以从中发现规律。
关键信息在提示(prompt)中的位置要尽量随机分布。这样做的目的是防止模型在训练过程中偷懒,只关注提示中某些特定位置的词(token),而忽视了整个提示的内容。就像人一样,模型也有偷懒的倾向,如果提示中的关键信息位置过于固定,模型就容易只盯着那些位置,从而无法全面地理解和学习整个提示。
数据形式的多样化:
在设计提示(prompt)时,要避免使用过于单一的表达方式,例如“把中文句子A翻译成英文”。可以尝试使用不同的情境,比如:“假设你是一位餐厅服务员,客户要求你用英文推荐菜品,该怎么表达A?” 或者 “我是一名记者,正在撰写关于A的新闻报道,请帮我用标准英文写出来。” 这样做的目的是让模型能够理解更多样化的提示,而不仅仅是记住提示中的几个关键词,从而避免模型在训练时出现过拟合,提升其在不同场景中的泛化能力。
在设计提示(prompt)时,要确保提示的长度均衡,既包含短的提示,也有较长的提示。这样可以避免模型在处理较长提示时无法有效集中注意力。对于长提示,长度不仅仅是字面上的长,还应该确保关键信息分布在提示的不同位置,比如开头、中间或结尾。这样可以防止模型只关注提示的开始或结束部分,而忽视其他重要信息,从而避免在训练时出现 “偷懒” 现象,确保模型能够全面理解整个提示。
在设计回答(answer)时,要确保回答的长度均衡。不能让模型在输出几个词后就停止,应该提供一些示例,让模型学会输出较长的回答。这样做的目的是帮助模型更好地理解和执行类似 “不少于2000字” 这样的指令,否则模型可能很难按要求输出足够长的回答。
设计回答(answer)时,例如,千万不要在一万条训练数据中,重复使用相同的回答。因为回答会影响模型的损失(loss),如果回答过于单一,模型会容易过拟合,从而无法适应不同的输入和情境。
在设计整体 prompt + answer 时,模型需要具备在多轮对话中切换话题的能力。也就是说,有些问题是基于当前对话上下文(session)提出的,而有些问题则与之前的对话完全无关。模型需要学会判断每个问题是否与之前的对话有关。
例如,如果用户问 “你能推荐一家餐厅吗?” 而之前的对话没有提到餐厅,模型就应该知道这不是基于之前对话的内容。 此外,还要考虑系统(system)的作用。有些时候,系统的设置只是个形式,回答并不受其影响;但有些时候,系统的设置会直接影响回答。比如,如果系统设置了“自动回复”,那么回答可能是系统预设的,而不是用户期望的个性化回答。模型要学会识别并区分这些情况。
PS: 本节主要简单讲述了微调数据构建的思想,下一篇主要将数据构建的方法。
预计题目:大模型监督微调术SFT:开启AI应用新境界的独家秘方|数据篇(3)
老样子,如果你没找到,那么大概率是我还没写完。。。
