数据合成是训练一个只有极少标注数据的小型模型的一种有前景的方法。数据合成的一种方法是利用大型语言模型的丰富知识,为小型模型合成伪训练样本,从而同时实现数据和计算的效率。然而,数据合成面临的一个关键挑战是,合成的数据集通常与真实任务数据分布存在较大的差异。因此,在本文中,我们提出了“逐步合成”(Synthesis Step by Step,简称S3)的数据合成框架,通过迭代地推断在合成数据集上训练的小型模型在小型真实验证数据集上的错误,利用大型语言模型缩小这一分布差距。在多个自然语言处理任务上进行的广泛实验证明,我们的方法通过减小合成数据集与真实数据之间的差距,显著提高了小型模型的性能,相较于几个基准模型,性能分别提高了9.48%(相对于ZeroGen)、2.73%(相对于GoldGen)和15.17%(相对于基于人工标注数据训练的小型模型)。
为了减小分布差距并提高数据效率,我们提出了“逐步合成”(Synthesis Step by Step,简称S3),这是一个新颖的数据合成框架,通过动态优化合成数据集以高效地缩小分布差距。如图2所示,S3首先使用一种“解释后生成”的方法合成一个种子数据集,该方法首先促使LLMs为每个标签生成理由,然后将生成的理由和任务特定提示结合起来生成数据点。接着,S3通过迭代地在小型验证集上推断在种子数据集上训练的模型在真实任务数据分布中采样的假设的错误来优化种子数据集。
本节提供了我们实验中S3的完整实施细节。我们将基于的GPT3.5作为所有合成工作的LLM,采用了核心抽样(nucleus sampling)进行解码,温度设置为0.9。我们使用Hugging Face Transformers库提供的DistilBERT-base-uncased作为小型模型。
我们对小型模型的微调进行了批次大小、学习率、权重衰减和迭代次数的超参数调整。