微信扫码
与创始人交个朋友
我要投稿
数据合成是训练一个只有极少标注数据的小型模型的一种有前景的方法。数据合成的一种方法是利用大型语言模型的丰富知识,为小型模型合成伪训练样本,从而同时实现数据和计算的效率。然而,数据合成面临的一个关键挑战是,合成的数据集通常与真实任务数据分布存在较大的差异。因此,在本文中,我们提出了“逐步合成”(Synthesis Step by Step,简称S3)的数据合成框架,通过迭代地推断在合成数据集上训练的小型模型在小型真实验证数据集上的错误,利用大型语言模型缩小这一分布差距。在多个自然语言处理任务上进行的广泛实验证明,我们的方法通过减小合成数据集与真实数据之间的差距,显著提高了小型模型的性能,相较于几个基准模型,性能分别提高了9.48%(相对于ZeroGen)、2.73%(相对于GoldGen)和15.17%(相对于基于人工标注数据训练的小型模型)。
大型语言模型(LLMs)在各种任务上展现了有前景的零-shot性能,显示了它们作为通用模型的潜力。然而,由于模型体积庞大和推理延迟高,LLMs存在效率问题,这使得它们难以在实际应用中部署。因此,在许多资源受限的场景中,仍然更青睐于在任务特定数据上训练的小型模型,因为它们具有更少的参数,易于部署,并在特定下游任务中表现良好。
然而,为了适应特定任务,训练一个小型模型可能需要大量的人工标注数据,在许多下游任务中这种数据并不可用且注释成本高昂。这种数据效率问题使得微调小型模型变得具有挑战性。因此,许多不同的研究方法试图减少在特定任务上微调小型模型所需的数据量,包括知识蒸馏、数据增强、模块替换、半监督学习以及数据合成。
在本研究中,我们专注于数据合成,该方法从头开始生成数据和相应的标签。与半监督学习不同,后者依赖于未标记数据,这种方法更简单、更高效,尤其是在未标记数据稀缺的情况下。大多数NLP领域中用于数据合成的现有方法利用LLMs生成大量训练数据来训练小型模型。现有的数据集合成方法通常需要大量的合成数据才能在小型模型上取得相对良好的性能,例如ZeroGen(Ye等,2022b),有时需要多达100万条的合成数据记录。然而,这通常会导致在训练小型任务特定模型时额外的数据合成成本和计算成本。
直观地说,合成数据的质量,或者说合成数据与黄金任务数据相似程度,对小型模型的性能至关重要。然而,由于现实世界中特定任务的复杂性,合成数据往往在分布上存在差异。这在图1中可以清晰地看到。小型模型在合成数据上的训练准确性接近100%,但在真实世界数据上的测试准确性仍然较低。相比之下,当在人工标注数据上训练时,训练和测试准确性之间的差距要小得多。
为了减小分布差距并提高数据效率,我们提出了“逐步合成”(Synthesis Step by Step,简称S3),这是一个新颖的数据合成框架,通过动态优化合成数据集以高效地缩小分布差距。如图2所示,S3首先使用一种“解释后生成”的方法合成一个种子数据集,该方法首先促使LLMs为每个标签生成理由,然后将生成的理由和任务特定提示结合起来生成数据点。接着,S3通过迭代地在小型验证集上推断在种子数据集上训练的模型在真实任务数据分布中采样的假设的错误来优化种子数据集。
我们总结我们的贡献如下:(1)我们提出了一种动态数据合成的新观点,可以创建较小模型的训练数据,并可以通过添加更多数据进行优化;基于这个观点,我们提出了S3框架,可以使用LLM合成和优化伪数据,从而高效地缩小数据合成中的分布差距。 (2)我们对S3减小分布差距的有效性进行了理论分析。 (3)我们在三个主要的NLP任务上进行了广泛实验证明,在相对于数据平均只使用30.43%的情况下,相对于数据集合成的代表性基线ZeroGen(Ye等,2022b)取得了平均9.48%的性能提升。
在本节中,我们详细描述了提出的S3框架。S3的关键思想是首先通过促使LLMs合成一个种子数据集,然后通过在小型验证集上迭代地推断小型模型在黄金数据分布上产生的错误来逐步减小分布差距。S3包括以下步骤:
我们首先在第2.1节介绍一些背景和关键符号。然后在第2.2节(上述第1点)和第2.3节(上述第2、3、4点)分别描述了用于种子数据合成和基于迭代错误外推的合成的算法。最后,在第2.6节中,我们对所提出方法进行了理论解释。
2.1 背景 按照Sharp等人(2017)的做法,我们将LLM在提示输入T下的人类语言分布表示为PLLM(·|T)。小型模型是在我们合成的数据集上进行训练的计算效率模型。通常,小型模型包含较少的参数,易于在实际应用中训练和部署。我们将由数据集训练的小型模型表示为f(·|)。
种子数据被定义为我们S3框架的基本零-shot合成数据集。
我们在算法 1 中呈现了具有理由的种子数据合成的算法。在这里, 表示我们正在处理的任务中所有可能的标签集合; 表示理由合成的标签和任务描述性提示; 是将理由 和标签 包装在一起用于向LLM查询数据点的数据合成提示; 表示从LLM输出中进行 top-K 抽样,以获取特定标签的理由列表; 表示在集合 中均匀抽样 个不重复元素。生成的种子数据集表示为 。
例如,对于 IMDb(Maas等,2011)数据集,即一部关于电影评论的情感分析数据集, 为:"可能导致正面/负面电影评论的原因是什么。",而 为:"现在想象一下,你刚刚观看了一部表演出色、情节引人入胜、画面精美的电影。现在你应该写一篇关于这部电影的正面评论。"我们使用提示作为LLM的输入,并将目标输出作为合成的伪示例。这种“解释后生成”的方法使我们能够生成更多样化、信息丰富且现实的示例。
接下来,我们描述错误外推合成(EES)框架,该框架试图通过在小型验证集上迭代地推断在当前合成数据集上训练的小型模型的错误,从而逐步减小分布差距。这与传统的数据合成方法不同,在传统方法中,合成数据集在合成过程完成后是固定的,并用于训练小型模型。具体而言,EES过程推断了小型模型在真实世界验证数据集上产生的错误,以合成一些额外的数据来修复错误。
在EES过程中,我们使用两个不同的数据源:种子数据集 和一个小规模的人工标注的真实世界数据集,称为黄金数据,表示为 。在EES中,我们首先将黄金数据划分为一个验证数据集 和一个测试数据集 。我们使用 来查找和修复分布差距,使用 来评估小型模型的性能。
我们在算法2中展示了整个EES过程。循环开始于第2行的一轮表示一轮EES。R表示我们要执行的EES轮数;在我们的实现中,我们通常进行2轮实验。f表示小型模型;表示小型模型在第q轮EES中在黄金验证数据集上误分类的示例集。表示用于错误外推的提示。该提示要求LLM合成一个与相似且标签为的数据点。在我们的实现中,我们使用的提示是:"写一篇像《这部电影很棒》一样的正面电影评论。"表示我们基于对进行外推而在LLM上合成的第q + 1个附加数据集。 EES算法的关键步骤是使用当前合成的数据集训练小型模型(第6行),并利用LLM对误分类的数据进行外推以生成更多的训练数据(第8-10行)。这创造了一个更好反映真相的数据集。 总的来说,EES过程通过使用误分类的数据对分布差距建模,并利用LLM从中采样额外的数据点来减小分布差距。这个思想类似于梯度提升文献中对残差进行优化的思想。
为了清晰起见,我们在先前讨论的算法中专注于单句子任务。当转移到多句子任务时,需要进行一些小的修改。具体而言,对于复杂任务(例如问答),上下文句子可能非常长,阻止我们的提示适应LLM的输入限制。即使提示适应,为每个上下文句子生成理由可能成本过高。因此,在这些情况下,我们采用更传统的种子数据合成方法。
具体而言,给定一组条件上下文 (例如NLI中的前提和QA任务中的上下文和答案),我们按照以下步骤进行数据集合成:
在多句子任务中的EES过程中,我们只需要修改算法2中从第8行开始的for循环以适应多句子任务。修改后的第8行版本如算法3所示。
提示的设计对合成数据集的质量有很大影响。我们在表1中展示了用于生成理由、数据点和错误外推的提示模板。
在这一部分,我们通过首先澄清分析设置,然后分析分布差距问题以及我们的S3框架的有效性,详细分析了为什么我们的S3框架可以缩小零样本合成和实际分布之间的分布差距。
我们将数据示例的概率空间表示为 在这里,为了简单起见,我们将数据示例中的所有可能元素包装到一个变量中,而中的组件可以根据具体任务而变化,例如,在文本分类任务中,即其中是一段文本,是相应的标签。
我们假设金标数据集(表示为)是通过从真实世界分布中独立抽样次获得的。然后,我们还假设获得合成数据示例的过程是从中独立抽样。在分析部分,为了简单起见,我们将定义为数据示例集合上的分布,而不是人类语言空间。这种区别很重要,因为虽然文本数据是自然语言,但对于许多任务来说,标签可能不是。
同样,我们假设获得种子数据集的过程(表示为 ,其中 是种子数据点的数量),是从我们的种子数据分布 中抽取 个独立同分布的样本。
让我们首先回顾数据集合成方法中分布差异问题的起源:传统的数据合成方法,以及我们方法中的种子数据集合成阶段,都从固定的分布 中采样数据点。由于该分布是固定的且不同于任务数据分布 ,无论我们合成多少数据,合成的数据集都会受到一个固定的分布差异的影响。因此,在真实任务数据上,训练在合成数据集上的小型模型的测试性能受到了这一差异的限制。我们的方法,S3,旨在解决这一限制。
让我们假设小型模型完美地学习了合成数据集的分布。在这种情况下,小型模型在小型金标验证数据集上产生的错误可以代表 与 之间的分布差异。我们认为一个好的局部线性模型(LLM)能够从这些错误中完美地外推。这意味着LLM可以从两个分布之间的差异 中合成样本。形式上,EES过程的每一轮中合成的额外数据如下:
因此,通过从 中采样相同数量的数据点,并将它们与原始的种子数据分布 结合,混合数据集应当遵循以下分布:
其中 是组合的比例,可以直观地理解为额外数据和种子数据集的比例。这表明,理论上,我们可以通过简单地组合原始种子数据和通过EES合成的额外数据来恢复金标数据分布。然而,请注意在现实场景中我们无法保证LLM和小型模型的训练是完美的。因此,S3通过迭代重复这一过程,逐渐减小分布差异并优化混合数据集直至收敛。
我们进行实验,测试我们的方法在四个数据集上跨三个主要自然语言处理(NLP)任务的有效性。我们还进行了彻底的消融研究(第3.4节)、S3框架的可迁移性研究(第3.5节)以及对额外数据质量的研究(第3.6节)。
在这项研究中,我们评估了我们的S3在三个主要NLP任务上的性能:文本分类、自然语言推理(NLI)和问答(QA)。对于文本分类,我们使用了IMDb(Maas等,2011)数据集;对于NLI任务,我们使用了QNLI(Rajpurkar等,2016;Wang等,2018)和RTE(Bentivogli等,2009;Giampiccolo等,2007;Haim等,2006)数据集;对于QA任务,我们使用了Adversarial QA(Bartolo等,2020)数据集。
我们将我们的S3框架与以下基线进行比较:
本节提供了我们实验中S3的完整实施细节。我们将基于的GPT3.5作为所有合成工作的LLM,采用了核心抽样(nucleus sampling)进行解码,温度设置为0.9。我们使用Hugging Face Transformers库提供的DistilBERT-base-uncased作为小型模型。 我们对小型模型的微调进行了批次大小、学习率、权重衰减和迭代次数的超参数调整。
对于文本分类和NLI任务,我们使用准确率作为评估方法。对于QA任务,我们使用精确匹配(EM)和分数作为评估方法。为了实施S3方法的实验,我们将原始数据集的训练数据用作EES中的金标评估数据集(即,)。并且我们使用来自原始数据集的测试数据来测试我们模型的性能。
我们在表2中呈现了主要的实验结果。我们可以观察到,与ZeroGen相比,我们的S3框架有巨大的改进(平均提升了9.48%)。在NLI和QA任务中,性能差距尤为明显。此外,与ZeroGen相比,我们仅使用了平均30.43%的数据量,这可以被视为一项显著的改进。这种改进证明了初始种子数据合成方法以及在我们的S3中不断优化数据的思想的有效性。
然后,我们将S3与GoldGen基线进行比较,以测试在验证集上外推小型模型的错误而不是整个验证集的有效性。我们发现,S3的平均绝对性能提升为2.73%,优于GoldGen。这证实了通过直接外推金标数据的错误而不是整个数据集的外推的优势。
值得注意的是,与直接在完整的金标训练数据上微调小型模型相比,S3的结果相当有竞争力。具体而言,S3在IMDB和RTE上甚至优于金标数据性能。这证实了在实际应用中应用S3的潜力。
我们首先对S3的基于错误外推的合成(EES)框架进行了消融,仅使用基于第2.2节的种子数据进行合成。为了进行公平比较,我们确保训练数据集的规模大致相同。结果如表3所示。这个结果证明了我们对动态数据集和EES的看法的有效性。我们发现对于像QA和NLI这样更复杂的任务,我们的EES框架可以取得更大的改进,这证明了分布差异问题以及我们的EES框架缩小这一差异的能力。
然后,我们对S3框架在IMDb数据集上使用合理性进行数据集合成的消融进行了研究。结果如表4所示。我们发现使用理由进行数据集合成使LLM能够生成更高质量的数据集,从而在较低预算下(即更少的合成示例)提高小型模型的性能。
接下来,我们测试EES合成数据的可迁移性。结果如表5所示。 在这个测试中,我们将我们框架的种子数据集替换为Ye等人(2022b)合成的数据。 我们进行了两组测试。我们比较了直接添加在S3中合成的EES数据(+ourAdd)和使用由Ye等人(2022b)合成的数据训练的小型模型的变体。我们可以看到这两个变体都导致了类似的性能提升。这表明EES合成的数据可以有效地转移到其他零样本合成的数据集。我们认为这是因为不同零样本数据合成方法的分布差异相似。因此,EES方法合成的数据可以普遍有助于提升性能,这进一步证明了S3的潜力。
我们进行了这个实验来检查由EES合成的额外数据的质量。请注意,对于早期的LLM(如GPT2或T5),存在一种重复提示的趋势。如果LLM只是重复误分类的数据,那么就没有外推。因此,我们设计了以下实验来测试额外数据的质量: 句子编码:对于误分类数据和额外数据,我们使用DistilBERT对每个和进行编码。这导致编码后的句子分别表示为和,每个编码后的句子都在中(在DistilBERT中,)。
余弦相似度:然后,通过比较和之间的余弦相似度,我们衡量它们的语义相似性。高余弦相似度表示存在实质性的语义重叠。
编辑距离:此外,为了了解文本的独特性,我们计算了句子和之间的编辑距离。如果编辑距离接近句子长度,我们推断这些文本在构成上存在显著差异。结果如表6所示。
平均误分类数据长度(avg 长度)和平均生成数据长度(avg 长度)提供了解释编辑距离的上下文。这个结果表明,虽然误分类数据和额外生成的数据之间存在很高的语义相似性(由余弦相似性得分证明),但生成的句子并不仅仅是误分类样本的复制品(因为它们的编辑距离几乎等于整个句子的长度)。这个结果为新生成的数据的质量提供了额外的证据。
大多数机器学习方法所需的大量数据推动了许多研究人员探索数据集合成的概念。这旨在从大型预训练模型(例如LLMs)中生成数据集,以便将大型模型的丰富知识转移到小型模型。最初尝试实现这一目标的方法使用微调的生成模型生成数据。这些努力首先使用少量人工标注的数据(金标数据)对LLMs进行微调,然后将生成的数据与金标数据结合起来训练小型模型。其他研究人员试图为半监督学习合成大量数据。然而,这些方法仅适用于简单的文本分类任务,对于更复杂的任务如NLI或QA而言,证明了数据效率低下且无效。
LLMs提供的零样本性能的潜力导致一些研究人员考虑基于未微调LLMs的零样本数据集合成。然而,如图1所示,直接查询未微调的LLMs通常会导致数据存在很大的分布差距,并且通常效率低下。因此,一些研究尝试进行数据选择或数据增强。然而,它们纠正分布差距的能力仍有改进空间。
Brown等人(2020)提出,LLMs可以通过在提示中调整一些示例来更好地学习它们正在处理的任务。这种被称为上下文学习的范式特别吸引人,因为它消除了更新LLM参数的必要性。随后的研究侧重于优化提示模板和上下文示例的选择,以及学习带有上下文目标描述。上下文学习的关键思想是从类比中学习,与我们将误差外推以合成额外数据以填补分布差距的思想相一致。然而,大多数上下文学习方法设计用于少样本设置,而在我们的研究中,LLM不需要训练。我们探索LLM直接从错误外推的能力,为创建更有效的数据集提供了一个关键示例。
本文提出了一种基于动态数据集视角的“逐步合成”(S3)方法用于数据集合成。S3是一种新颖的数据集合成框架,缩小了纯LLMs合成数据集与真实基础数据分布之间的分布差距。S3首先使用具有理由的种子数据合成,以在种子数据中实现低分布差距。然后,通过在少量真实世界数据上迭代外推小型模型的错误来缩小这个分布差距。对四个常用数据集上三个主要NLP任务的广泛实验表明,与代表性基线相比,S3显著提高了平均仅有合成数据的三分之一的小型模型的性能。S3在许多实际应用中具有高度的潜力,因为它能够有效(即性能更好)且高效(即提高数据效率)地将极大模型(例如GPT 3.5)中的知识传递给小型模型(例如DistilBert),同时实现数据效率和计算效率。
原文链接:https://arxiv.org/pdf/2310.13671.pdf
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-03-30
2024-04-26
2024-05-10
2024-04-12
2024-05-28
2024-05-14
2024-04-25
2024-07-18
2024-04-26
2024-08-13
2024-12-22
2024-12-21
2024-12-21
2024-12-21
2024-12-21
2024-12-20
2024-12-20
2024-12-19