跳到主要内容

合成种子数据:在首批千名用户到来之前启动微调

· 阅读需 10 分钟
Tian Pan
Software Engineer

有数据时,微调模型很容易。残酷之处在于产品诞生之前的那个时刻:你需要个性化来吸引用户,但又需要用户才能积累个性化数据。大多数团队要么完全跳过微调("以后再加"),要么花数周手工收集标注样本。两种方式都行不通。前者产出一个用户一眼就能看穿的通用模型,后者慢到等你有了数据,任务早已演变。

合成种子数据能解决这个问题——但前提是你必须清楚它在哪里会失效。

冷启动问题比看起来更棘手

显而易见的问题是你没有任何训练样本。不那么显眼的问题是:即便你能从演示、内部试点或利益相关者的演练中凑出十到二十个样本,它们也往往存在覆盖坍塌:这些样本反映的是幸福路径,是你已经预料到的场景。真实的用户行为更杂乱、更多变,并且常常以你无法预见的方式出乎意料。

当你在一个狭窄的种子集上微调时,模型只学会了在这个分布的窄切片上表现优异。它能处理你演示过的场景,在其他相邻场景上全面失败。这个问题往往在上线六周后才暴露,用户开始抱怨模型"总是给出同一类答案"。

这就是合成种子数据的目标——不是简单地复制你已有的样本,而是生成一套多样化的样本,在你真正了解用户空间之前,就覆盖你预期用户会占据的那个空间。

生成你的前500–1,000个样本

基础技术是带显式多样性压力的少样本提示。取十到十五个手工制作或从早期测试者处收集的种子示例,提示一个有能力的前沿模型生成相同格式的新样本,但明确要求它系统性地变化:不同的用户意图、不同的措辞方式、不同的具体程度、不同的错误情形。

关键词是"系统性地变化"。若没有显式的多样性压力,大多数模型会聚集在它们与该任务关联的典型措辞上。你最终会得到五百个本质上是同一个样本加上细微词汇替换的结果——在此基础上微调,教出来的模型只是自信地平庸。

实践中,这意味着围绕变化轴来设计生成提示:

  • 意图变化:对于客服任务,分别生成表达沮丧、困惑、紧迫感和随意询问的样本。
  • 复杂度变化:将简单的单句查询与需要模型同时追踪多个约束的多从句请求配对。
  • 领域子覆盖:对于编程助手,明确覆盖不同语言、调试场景、架构问题和文档请求。

Self-Instruct方法论——斯坦福Alpaca等模型的基石——用175个种子样本生成了52,000个指令-回复对,成本不到500美元。质量参差不齐,但即使是5.2万个多样化的嘈杂样本,也明显优于在175个精良样本上微调的模型。在生成阶段,规模和多样性比完美更重要。完美来自过滤。

多样性采样:不要测量你以为自己在测量的东西

朴素的质量指标是覆盖率:你的生成样本是否跨越了预期输入空间?朴素的多样性指标可能是独特n-gram比率或词汇量大小。两种度量都会误导你。

问题在于LLM系统性地过度生成常见的、典型的措辞,同时生成边缘情况和低频模式不足——恰恰是区分有效微调与噪声的那些模式。一个数据集可以有很高的n-gram多样性,同时在语义空间的一个狭窄带中密集聚集。

自适应覆盖采样(ACS) 通过图方法解决这个问题:在生成样本上构建相似性图,然后用贪心最大覆盖来选择子集。反直觉的发现是,目标覆盖率低于1.0——通常是0.7–0.9——比使用全部生成样本产生更好的模型。原因是完整覆盖迫使你将低质量异常值和好样本一起纳入,而选择性覆盖让你能丢掉噪声。

一个实践中有效的更简单启发式方法:使用ROUGE-L相似度去重。丢弃任何与现有样本的最高ROUGE-L得分超过0.7的生成样本。这能消除近似重复,同时保留语义变化。虽不复杂,但快速、确定,能捕获最严重的同质化失败。

三层质量过滤器

原始生成输出不是训练数据,需要过滤后才能用于微调。

加载中…
Let's stay in touch and Follow me for more thoughts and updates