跳到主要内容

你的合成训练数据正在向均值坍缩

· 阅读需 9 分钟
Tian Pan
Software Engineer

你需要更多的训练数据,于是你生成了它们。模型编写了几千个例子来填补数据集中的空白——边缘案例、代表性不足的意图,以及你真实日志从未涵盖的长尾数据。你抽检了一个样本。每个例子看起来都不错:语法正确、符合主题、标签准确。你将这一批数据加入到微调集中,然后继续工作。

三轮迭代之后,你的模型在那些你特意生成数据来覆盖的案例上表现反而变差了。并不是灾难性的变差——只是悄无声息地、均匀地变得平庸。以前偶尔能奏效的稀有意图现在完全失效了。用户实际输入的措辞被误读。而你的质量检查中没有任何一项发现异常,因为你生成的每一个独立案例确实都很正常。

失败不在于任何单个案例,而在于分布。合成数据在没有现实锚点的情况下被生成和反复生成,会向均值收缩——而长尾部分,即你求助于合成数据的根本原因,是首先消失的部分。

为什么生成的数据会丧失方差

当语言模型被要求生成一个例子时,它会从其学习到的分布中采样。该分布有一个中心——最可能的、最通用的措辞——以及长尾——罕见的、令人惊讶的、尴尬的案例。当你在任何合理的温度(temperature)下进行生成时,你从中心抽样的频率远高于长尾。这不是 Bug,这就是从概率分布中采样的本质。

因此,第一代合成数据的长尾就已经比生成器训练时所用的真实数据要薄了。每个例子都是合理的,但“集合”变窄了。以第一代为种子或上下文生成第二轮,长尾会再次变薄。这个过程是乘法效应。研究递归训练的研究人员发现,即使混合中只有极小比例(约为千分之一)的合成数据,也足以开始这种偏移,而且这种效应会随着每一代用合成数据取代真实数据(而不是与之共存)而叠加。

结果呈现出一种可识别的形态。早期,长尾消失:稀有事件从数据集中消失,而主体看起来仍然健康。随后,整个分布收敛到一个方差极小的萎缩核心——平淡、同质、自信地平庸。已发表的文献称之为“模型塌缩”(model collapse),2024 年发表在《Nature》上的一项被引用最多的研究清晰地证明了这一点:在模型输出上进行递归训练,会导致“不可逆的缺陷”累积,原始内容分布的长尾首先消失。

这里有一个值得说明的重要细微差别,因为这个术语常被滥用。2025 年的一篇立场论文指出,模型塌缩“并非你想象的那样”——完全的、灾难性的塌缩是一个特定的、不切实际的设置下的属性,即每一代都“完全取代”真实数据。大多数现实中的流水线是累积而非取代,这大大减缓了衰减。这令人宽慰,但并不代表警报解除。累积减缓了塌缩,但并不能阻止合成数据本身内部的多样性侵蚀。你的流水线可能远未达到灾难性塌缩,但仍可能在悄悄流失你为此付费的长尾覆盖。

陷阱:只评测质量,从不评测多样性

这是大多数团队都会犯错的地方,这首先是一个度量错误,其次才是建模错误。

当你验证一批合成数据时,你几乎肯定会检查“质量”。这个例子语法正确吗?标签正确吗?作为裁判的 LLM(LLM-as-judge)给出的评分高吗?语法检查器或预训练的鉴别器会通过它吗?这些都是针对单个案例的检查。每一个检查都可能对完美的分布和塌缩的分布给出完全相同的评分,因为塌缩在单个案例层面是不可见的。

质量是单个样本的属性。多样性是集合的属性。你无法通过逐点检查来检测收缩的分布,就像你无法通过检查每个人的回答是否真实来检测调查是否存在偏见一样。一批 5,000 个语法完美、标签正确、近乎雷同的案例会通过你所有的质量关卡,但几乎不会教给你的模型任何东西。

所以,要衡量集合。这方面的工具已经成熟且运行成本低廉:

  • N-gram 多样性 —— distinct-n(唯一 n-gram 与总数的比例)和 self-BLEU(每个生成的文本与该批次其余部分的相似程度)。这些可以捕捉到词汇同质化:在不同案例中反复出现的相同措辞。它们计算速度快,是首选的计算指标。
  • 基于嵌入的多样性 —— 使用 sentence-transformer 对每个案例进行编码,计算平均成对余弦相似度。这可以捕捉到 n-gram 漏掉的语义塌缩:那些没有共享单词但表达相同意思的案例。一个批次可能具有很高的词汇多样性,但在语义上仍然狭隘。
  • 基于参考的散度 —— 使用 MAUVE 等散度指标将合成分布与预留的“真实”数据样本进行比较。这是真正回答你所关心的问题的指标:不是“这个批次是否多样?”,而是“这个批次的多样性是否与现实世界一致?”

2025 年一篇关于衡量合成数据集多样性的论文尖锐地指出:启发式指标和朴素聚类经常“无法捕捉底层分布的多样性”。一种更可靠的方法是使用 LLM 根据提取的语义标准对语料库进行聚类,并将多样性得分报告为不同聚类与样本的比例。你不需要完全照搬那套流程,但你需要“某种”作用于集合的指标,在每一批数据上进行计算,并作为一个有人负责的数字进行长期跟踪。没有负责人的多样性得分,注定会发生偏移。

将生成锚定到现实,并审计长尾

知道分布正在收缩并不等同于修复它。以下是三种实践方法,大致按影响力排序:

从真实示例中播种,而不是从先前的合成输出中。 崩溃的机制是递归——以合成数据为条件的合成数据。通过将每一轮生成锚定到真实的种子示例(特别是从长尾中提取的真实示例)来打破循环。不要让第 N 轮的输出成为第 N+1 轮的输入。关于“累积与替换”的研究是这里的核心发现:与真实数据混合并锚定到真实数据的合成数据保持稳定;而取代真实数据的合成数据则会退化。将你的真实语料库视为现实锚点,并让它保持在循环中。

为生成时的多样性而设计,而不仅仅是质量。 关于多样性的研究表明,生成提示词(prompts)至关重要。单一的提示模板会产生单一的模式。改变提示词:轮换显式的人格设定、写作风格、难度级别、场景框架;以更高的温度(temperature)进行采样以覆盖长尾;使用多个生成模型,这样你就不会继承单个模型的中心倾向。更好的生成模型也会产生明显更多样化的输出——生成器自身的质量是你从中提取多样性的上限。

将审计长尾覆盖范围作为一个单独的检查项。 你的整体多样性得分可能看起来很健康,但你需要的特定罕见案例仍然缺失——平均值被大多数数据所主导。所以,请指名长尾。枚举合成数据本应覆盖的代表性不足的意图、边缘案例和罕见表达,并直接检查每一个的覆盖情况。这是一个将整个流水线关联回其原始目的的检查:你生成合成数据是为了覆盖长尾,因此长尾就是你需要验证的对象。

并且要刻意规划真实数据与合成数据的比例。多样性文献中反复出现的发现是,真实 token 和合成 token 的平衡混合优于以合成为主的混合,而且过度加权合成数据会因冗余而降低性能。更多的合成数据并不等于更多的信息。超过某个点后,它只是相同信息的重新表述。

合成数据是有保质期的

最有用的思维模型是:合成数据是补充,而不是替代。它在填补特定的、已知的空白方面确实很有价值——但它不是一种可以在不补充真实数据源的情况下持续提取的再生资源。

补充剂是有保质期的。针对当今真实分布生成的合成批次会随着你的用户、你的产品以及世界的变化而过时。定期针对新鲜的真实数据重新进行锚定,否则它会慢慢停止描述任何存在的事物。相比之下,替代品是你因为合成数据更便宜而停止收集真实数据时的选择——而这正是崩溃研究警告过的“替换机制”。

因此,这种自律是微小且具体的。在每一批次上测量多样性,而不仅仅是质量。将其作为一个由专人长期关注的指标进行追踪。将真实数据作为锚点保留在循环中,永远不要让合成输出自我递归。指名审计长尾。并且把每一批合成数据都视为有有效期的,因为事实确实如此。

做到这一点,合成数据就会如你所愿:填补空白。忽略它,你得到的数据库每个季度看起来都在扩大,但教给模型的东西却越来越少——一堆看似完美但正静悄悄地向均值坍缩的示例。

References:Let's stay in touch and Follow me for more thoughts and updates