摘要
数据合成是训练一个只有极少标注数据的小型模型的一种有前景的方法。数据合成的一种方法是利用大型语言模型的丰富知识,为小型模型合成伪训练样本,从而同时实现数据和计算的效率。然而,数据合成面临的一个关键挑战是,合成的数据集通常与真实任务数据分布存在较大的差异。因此,在本文中,我们提出了"逐步合成"(Synthesis Step by Step,简称S3)的数据合成框架,通过迭代地推断在合成数据集上训练的小型模型在小型真实验证数据集上的错误,利用大型语言模型缩小这一分布差距。在多个自然语言处理任务上进行的广泛实验证明,我们的方法通过减小合成数据集与真实数据之间的差距,显著提高了小型模型的性能,相较于几个基准模型,性能分别提高了9.48%(相对于ZeroGen)、2.73%(相对于GoldGen)和15.17%(相对于基于人工标注数据训练的小型模型)。
1 引言
大型语言模型(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%的性能提升。
2 方法论
在本节中,我们详细描述了提出的S3框架。S3的关键思想是首先通过促使LLMs合成一个种子数据集,然后通过在小型验证集上迭代地推断小型模型在黄金数据分布上产生的错误来逐步减小分布差距。S3包括以下步骤:
- 种子数据生成:我们利用LLM来分析我们正在处理的任务,然后合成该任务的可能理由列表。如果任务难以分析,我们可以跳过此步骤。然后,我们将合成的理由、可能的上下文句子和标签组合在一个提示中,引导LLM合成数据集。
- 小型模型训练:使用合成数据集训练小型模型,然后在真实世界验证数据上验证小型模型,并获得小型模型的误分类数据,将它们用作错误。
- 错误外推:使用LLM推断小型模型的错误,并使用错误中的信息合成额外的数据。
- 合并和重复:将额外的数据集与原始数据集组合成小型模型的新合成训练数据集,然后重复步骤2和3多轮,直到小型模型的性能收敛。
我们首先在第2.1节介绍一些背景和关键符号。然后在第2.2节(上述第1点)和第2.3节(上述第2、3、4点)分别描述了用于种子数据合成和基于迭代错误外推的合成的算法。最后,在第2.6节中,我们对所提出方法进行了理论解释。
2.1 背景 按照Sharp等人(2017)的做法,我们将LLM在提示输入T下的人类语言分布表示为PLLM(·|T)。小型模型是在我们合成的数据集上进行训练的计算效率模型。通常,小型模型包含较少的参数,易于在实际应用中训练和部署。我们将由数据集 <math xmlns="http://www.w3.org/1998/Math/MathML"> D t r a i n \mathcal{D}{train} </math>Dtrain训练的小型模型表示为f(·| <math xmlns="http://www.w3.org/1998/Math/MathML"> D t r a i n \mathcal{D}{train} </math>Dtrain)。
2.2 具有理由的种子数据合成
种子数据被定义为我们S3框架的基本零-shot合成数据集。
我们在算法 1 中呈现了具有理由的种子数据合成的算法。在这里, <math xmlns="http://www.w3.org/1998/Math/MathML"> γ \gamma </math>γ 表示我们正在处理的任务中所有可能的标签集合; <math xmlns="http://www.w3.org/1998/Math/MathML"> T r a t i o n ( y ) \mathcal{T}{ration}(y) </math>Tration(y) 表示理由合成的标签和任务描述性提示; <math xmlns="http://www.w3.org/1998/Math/MathML"> T q u e r y ( 1 ) ( r , y ) \mathcal{T}{query}^{(1)}(\boldsymbol{r},y) </math>Tquery(1)(r,y) 是将理由 <math xmlns="http://www.w3.org/1998/Math/MathML"> r \boldsymbol{r} </math>r 和标签 <math xmlns="http://www.w3.org/1998/Math/MathML"> y y </math>y 包装在一起用于向LLM查询数据点的数据合成提示; <math xmlns="http://www.w3.org/1998/Math/MathML"> t o p K topK </math>topK 表示从LLM输出中进行 top-K 抽样,以获取特定标签的理由列表; <math xmlns="http://www.w3.org/1998/Math/MathML"> U i ( S ) U_i(S) </math>Ui(S) 表示在集合 <math xmlns="http://www.w3.org/1998/Math/MathML"> S S </math>S 中均匀抽样 <math xmlns="http://www.w3.org/1998/Math/MathML"> i i </math>i 个不重复元素。生成的种子数据集表示为 <math xmlns="http://www.w3.org/1998/Math/MathML"> D s e e d = { X s e e d , V s e e d } \mathcal{D}{seed}=\{\mathcal{X}{seed},\mathcal{V}_{seed}\} </math>Dseed={Xseed,Vseed}。
例如,对于 IMDb(Maas等,2011)数据集,即一部关于电影评论的情感分析数据集, <math xmlns="http://www.w3.org/1998/Math/MathML"> T r a t i o n ( y i = p o s i t i v e / n e g a t i v e ) \mathcal{T}{ration}(y_i=positive/negative) </math>Tration(yi=positive/negative) 为:"可能导致正面/负面电影评论的原因是什么。",而 <math xmlns="http://www.w3.org/1998/Math/MathML"> T ‾ q u e r y ( r c u r r , p o s i t i v e ) \overline{\mathcal T}{query}(\boldsymbol{r}_{curr},positive) </math>Tquery(rcurr,positive) 为:"现在想象一下,你刚刚观看了一部表演出色、情节引人入胜、画面精美的电影。现在你应该写一篇关于这部电影的正面评论。"我们使用提示作为LLM的输入,并将目标输出作为合成的伪示例。这种"解释后生成"的方法使我们能够生成更多样化、信息丰富且现实的示例。
2.3 错误外推的数据集优化
接下来,我们描述错误外推合成(EES)框架,该框架试图通过在小型验证集上迭代地推断在当前合成数据集上训练的小型模型的错误,从而逐步减小分布差距。这与传统的数据合成方法不同,在传统方法中,合成数据集在合成过程完成后是固定的,并用于训练小型模型。具体而言,EES过程推断了小型模型在真实世界验证数据集上产生的错误,以合成一些额外的数据来修复错误。
在EES过程中,我们使用两个不同的数据源:种子数据集 <math xmlns="http://www.w3.org/1998/Math/MathML"> D s e e d \mathcal{D}{seed} </math>Dseed 和一个小规模的人工标注的真实世界数据集,称为黄金数据,表示为 <math xmlns="http://www.w3.org/1998/Math/MathML"> D g o l d \mathcal{D}{gold} </math>Dgold。在EES中,我们首先将黄金数据划分为一个验证数据集 <math xmlns="http://www.w3.org/1998/Math/MathML"> D g o l d ( v a l ) \mathcal{D}{gold}^{(val)} </math>Dgold(val) 和一个测试数据集 <math xmlns="http://www.w3.org/1998/Math/MathML"> D g o l d ( t e s t ) \mathcal{D}{gold}^{(test)} </math>Dgold(test)。我们使用 <math xmlns="http://www.w3.org/1998/Math/MathML"> D g o l d ( v a l ) \mathcal{D}{gold}^{(val)} </math>Dgold(val) 来查找和修复分布差距,使用 <math xmlns="http://www.w3.org/1998/Math/MathML"> D g o l d ( t e s t ) \mathcal{D}{gold}^{(test)} </math>Dgold(test) 来评估小型模型的性能。
我们在算法2中展示了整个EES过程。循环开始于第2行的一轮表示一轮EES。R表示我们要执行的EES轮数;在我们的实现中,我们通常进行2轮实验。f表示小型模型; <math xmlns="http://www.w3.org/1998/Math/MathML"> D m i s ( q ) D^{(q)}{mis} </math>Dmis(q)表示小型模型在第q轮EES中在黄金验证数据集上误分类的示例集。 <math xmlns="http://www.w3.org/1998/Math/MathML"> T m i s ( 1 ) ( x m i s , y m i s ) T^{(1)}{mis}(x_{mis}, y_{mis}) </math>Tmis(1)(xmis,ymis)表示用于错误外推的提示。该提示要求LLM合成一个与 <math xmlns="http://www.w3.org/1998/Math/MathML"> x m i s x_{mis} </math>xmis相似且标签为 <math xmlns="http://www.w3.org/1998/Math/MathML"> y m i s y_{mis} </math>ymis的数据点。在我们的实现中,我们使用的提示是:"写一篇像《这部电影很棒》一样的正面电影评论。" <math xmlns="http://www.w3.org/1998/Math/MathML"> D a d d ( q + 1 ) D^{(q+1)}{add} </math>Dadd(q+1)表示我们基于对 <math xmlns="http://www.w3.org/1998/Math/MathML"> D m i s ( q ) D^{(q)}{mis} </math>Dmis(q)进行外推而在LLM上合成的第q + 1个附加数据集。 EES算法的关键步骤是使用当前合成的数据集训练小型模型(第6行),并利用LLM对误分类的数据进行外推以生成更多的训练数据(第8-10行)。这创造了一个更好反映真相的数据集。 总的来说,EES过程通过使用误分类的数据对分布差距建模,并利用LLM从中采样额外的数据点来减小分布差距。这个思想类似于梯度提升文献中对残差进行优化的思想。
2.4 多句子任务的特殊处理
为了清晰起见,我们在先前讨论的算法中专注于单句子任务。当转移到多句子任务时,需要进行一些小的修改。具体而言,对于复杂任务(例如问答),上下文句子可能非常长,阻止我们的提示适应LLM的输入限制。即使提示适应,为每个上下文句子生成理由可能成本过高。因此,在这些情况下,我们采用更传统的种子数据合成方法。
具体而言,给定一组条件上下文 <math xmlns="http://www.w3.org/1998/Math/MathML"> C = c 1 , ⋅ ⋅ ⋅ , c m C = c_1, · · · , c_m </math>C=c1,⋅⋅⋅,cm(例如NLI中的前提和QA任务中的上下文和答案),我们按照以下步骤进行数据集合成:
- 从C中均匀抽样当前上下文 <math xmlns="http://www.w3.org/1998/Math/MathML"> c c u r r c_{curr} </math>ccurr 和当前目标标签 <math xmlns="http://www.w3.org/1998/Math/MathML"> y c u r r y_{curr} </math>ycurr,将它们组合成一个种子数据合成提示 <math xmlns="http://www.w3.org/1998/Math/MathML"> T q u e r y ( 2 ) ( c c u r r , y c u r r ) T^{(2)}{query}(c{curr}, y_{curr}) </math>Tquery(2)(ccurr,ycurr)。
- 通过 <math xmlns="http://www.w3.org/1998/Math/MathML"> T q u e r y ( 2 ) ( c c u r r , y c u r r ) T^{(2)}{query}(c{curr}, y_{curr}) </math>Tquery(2)(ccurr,ycurr) 从LLM中合成目标句子(例如NLI中的假设和QA中的问题)。合成的数据表示为 <math xmlns="http://www.w3.org/1998/Math/MathML"> ( c c u r r , x s y n , y c u r r ) (c_{curr}, x_{syn}, y_{curr}) </math>(ccurr,xsyn,ycurr)。
- 重复上述步骤,直到我们有足够的种子数据 <math xmlns="http://www.w3.org/1998/Math/MathML"> D s e e d = ( C s e e d , X s e e d , Y s e e d ) D_{seed} = (C_{seed}, X_{seed}, Y_{seed}) </math>Dseed=(Cseed,Xseed,Yseed)。
在多句子任务中的EES过程中,我们只需要修改算法2中从第8行开始的for循环以适应多句子任务。修改后的第8行版本如算法3所示。
2.5 提示工程
提示的设计对合成数据集的质量有很大影响。我们在表1中展示了用于生成理由、数据点和错误外推的提示模板。
2.6 理论分析
在这一部分,我们通过首先澄清分析设置,然后分析分布差距问题以及我们的S3框架的有效性,详细分析了为什么我们的S3框架可以缩小零样本合成和实际分布之间的分布差距。
我们将数据示例的概率空间表示为 <math xmlns="http://www.w3.org/1998/Math/MathML"> P = ( S , Σ ) ; \mathcal{P}=(\mathcal{S},\Sigma); </math>P=(S,Σ); 在这里,为了简单起见,我们将数据示例中的所有可能元素包装到一个变量 <math xmlns="http://www.w3.org/1998/Math/MathML"> s ∈ S s\in S </math>s∈S中,而 <math xmlns="http://www.w3.org/1998/Math/MathML"> s s </math>s中的组件可以根据具体任务而变化,例如,在文本分类任务中,即 <math xmlns="http://www.w3.org/1998/Math/MathML"> s = ( x , y ) s=(x,y) </math>s=(x,y)其中 <math xmlns="http://www.w3.org/1998/Math/MathML"> x x </math>x是一段文本, <math xmlns="http://www.w3.org/1998/Math/MathML"> y y </math>y是相应的标签。
我们假设金标数据集(表示为 <math xmlns="http://www.w3.org/1998/Math/MathML"> { S i ( g o l d ) } i = 1 n g o l d \{S_{i}^{(gold)}\}{i=1}^{n{gold}} </math>{Si(gold)}i=1ngold)是通过从真实世界分布 <math xmlns="http://www.w3.org/1998/Math/MathML"> P D ∈ P \mathbb{P}D\in\mathcal{P} </math>PD∈P中独立抽样 <math xmlns="http://www.w3.org/1998/Math/MathML"> n g o l d n{gold} </math>ngold次获得的。然后,我们还假设获得合成数据示例的过程是从 <math xmlns="http://www.w3.org/1998/Math/MathML"> P L L M ∈ P \mathbb{P}{LLM}\in\mathcal{P} </math>PLLM∈P中独立抽样。在分析部分,为了简单起见,我们将 <math xmlns="http://www.w3.org/1998/Math/MathML"> P L L M \mathbb{P}{LLM} </math>PLLM定义为数据示例集合 <math xmlns="http://www.w3.org/1998/Math/MathML"> S S </math>S上的分布,而不是人类语言空间。这种区别很重要,因为虽然文本数据是自然语言,但对于许多任务来说,标签可能不是。
同样,我们假设获得种子数据集的过程(表示为 <math xmlns="http://www.w3.org/1998/Math/MathML"> { S i } i = 1 n 1 \{S_i\}{i=1}^{n_1} </math>{Si}i=1n1,其中 <math xmlns="http://www.w3.org/1998/Math/MathML"> n 1 n_1 </math>n1 是种子数据点的数量),是从我们的种子数据分布 <math xmlns="http://www.w3.org/1998/Math/MathML"> P L L M ( 0 ) \mathbb{P}{LLM}^{(0)} </math>PLLM(0) 中抽取 <math xmlns="http://www.w3.org/1998/Math/MathML"> n 1 n_1 </math>n1 个独立同分布的样本。
让我们首先回顾数据集合成方法中分布差异问题的起源:传统的数据合成方法,以及我们方法中的种子数据集合成阶段,都从固定的分布 <math xmlns="http://www.w3.org/1998/Math/MathML"> P L L M ( 0 ) \mathbb{P}_{LLM}^{(0)} </math>PLLM(0) 中采样数据点。由于该分布是固定的且不同于任务数据分布 <math xmlns="http://www.w3.org/1998/Math/MathML"> P D \mathbb{P}_D </math>PD,无论我们合成多少数据,合成的数据集都会受到一个固定的分布差异的影响。因此,在真实任务数据上,训练在合成数据集上的小型模型的测试性能受到了这一差异的限制。我们的方法,S3,旨在解决这一限制。
让我们假设小型模型完美地学习了合成数据集的分布。在这种情况下,小型模型在小型金标验证数据集上产生的错误可以代表 <math xmlns="http://www.w3.org/1998/Math/MathML"> P D \mathbb{P}{D} </math>PD 与 <math xmlns="http://www.w3.org/1998/Math/MathML"> P L L M ( 0 ) \mathbb{P}{LLM}^{(0)} </math>PLLM(0) 之间的分布差异。我们认为一个好的局部线性模型(LLM)能够从这些错误中完美地外推。这意味着LLM可以从两个分布之间的差异 <math xmlns="http://www.w3.org/1998/Math/MathML"> P D − P L L M ( 0 ) \mathbb{P}D-\mathbb{P}{LLM}^{(0)} </math>PD−PLLM(0) 中合成样本。形式上,EES过程的每一轮中合成的额外数据如下:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> P a d d : = P L L M ( ⋅ ∣ P D − P L L M ( 0 ) ) \mathbb{P}{add}:=\mathbb{P}{LLM}(\cdot|\mathbb{P}{D}-\mathbb{P}{LLM}^{(0)}) </math>Padd:=PLLM(⋅∣PD−PLLM(0))
因此,通过从 <math xmlns="http://www.w3.org/1998/Math/MathML"> P a d d P_{add} </math>Padd 中采样相同数量的数据点,并将它们与原始的种子数据分布 <math xmlns="http://www.w3.org/1998/Math/MathML"> P L L M ( 0 ) P_{LLM}^{(0)} </math>PLLM(0) 结合,混合数据集应当遵循以下分布:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> P L L M ( 1 ) : = p ⋅ P a d d + ( 1 − p ) P L L M ( 0 ) ≈ P D \mathbb{P}{LLM}^{(1)}:=p\cdot\mathbb{P}{add}+(1-p)\mathbb{P}{LLM}^{(0)}\approx\mathbb{P}{D} </math>PLLM(1):=p⋅Padd+(1−p)PLLM(0)≈PD
其中 <math xmlns="http://www.w3.org/1998/Math/MathML"> p ∈ [ 0 , 1 ] p\in[0,1] </math>p∈[0,1] 是组合的比例,可以直观地理解为额外数据和种子数据集的比例。这表明,理论上,我们可以通过简单地组合原始种子数据和通过EES合成的额外数据来恢复金标数据分布。然而,请注意在现实场景中我们无法保证LLM和小型模型的训练是完美的。因此,S3通过迭代重复这一过程,逐渐减小分布差异并优化混合数据集直至收敛。
3 实验
我们进行实验,测试我们的方法在四个数据集上跨三个主要自然语言处理(NLP)任务的有效性。我们还进行了彻底的消融研究(第3.4节)、S3框架的可迁移性研究(第3.5节)以及对额外数据质量的研究(第3.6节)。
3.1 设置
3.1.1 数据集
在这项研究中,我们评估了我们的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)数据集。
3.2 基线
我们将我们的S3框架与以下基线进行比较:
- ZeroGen:ZeroGen是由Ye等人提出的基本数据合成方法(2022b)。它既不使用合成数据的理由,也不试图减小分布差异。需要注意的是,ZeroGen也使用相同的小验证集来调整超参数。
- GoldGen:该基线对整个金标验证数据进行外推,而不是考虑小模型产生的错误。我们进一步使用此基线来测试S3框架中错误外推思想的有效性。我们保持合成数据集的规模相同,以便与S3进行公平比较。
- ProGen:该基线由Ye等人提出(2022a),类似于EES,它也考虑了训练反馈。然而,该框架仅适用于文本分类任务,而且不使用LLM的理由进行数据合成。
- Gold Data:我们还包括一个基线,该基线在原始金标数据上对小模型进行训练,作为参考。
3.2.1 实施细节
本节提供了我们实验中S3的完整实施细节。我们将基于的GPT3.5作为所有合成工作的LLM,采用了核心抽样(nucleus sampling)进行解码,温度设置为0.9。我们使用Hugging Face Transformers库提供的DistilBERT-base-uncased作为小型模型。 我们对小型模型的微调进行了批次大小、学习率、权重衰减和迭代次数的超参数调整。
3.2.2 评估方法
对于文本分类和NLI任务,我们使用准确率作为评估方法。对于QA任务,我们使用精确匹配(EM)和 <math xmlns="http://www.w3.org/1998/Math/MathML"> F 1 F1 </math>F1分数作为评估方法。为了实施S3方法的实验,我们将原始数据集的训练数据用作EES中的金标评估数据集(即, <math xmlns="http://www.w3.org/1998/Math/MathML"> D g o l d ( e v a l ) \mathcal{D}_{gold}^{(eval)} </math>Dgold(eval))。并且我们使用来自原始数据集的测试数据来测试我们模型的性能。
3.3 实验结果
我们在表2中呈现了主要的实验结果。我们可以观察到,与ZeroGen相比,我们的S3框架有巨大的改进(平均提升了9.48%)。在NLI和QA任务中,性能差距尤为明显。此外,与ZeroGen相比,我们仅使用了平均30.43%的数据量,这可以被视为一项显著的改进。这种改进证明了初始种子数据合成方法以及在我们的S3中不断优化数据的思想的有效性。
然后,我们将S3与GoldGen基线进行比较,以测试在验证集上外推小型模型的错误而不是整个验证集的有效性。我们发现,S3的平均绝对性能提升为2.73%,优于GoldGen。这证实了通过直接外推金标数据的错误而不是整个数据集的外推的优势。
值得注意的是,与直接在完整的金标训练数据上微调小型模型相比,S3的结果相当有竞争力。具体而言,S3在IMDB和RTE上甚至优于金标数据性能。这证实了在实际应用中应用S3的潜力。
3.4 消融研究
3.4.1 EES消融
我们首先对S3的基于错误外推的合成(EES)框架进行了消融,仅使用基于第2.2节的种子数据进行合成。为了进行公平比较,我们确保训练数据集的规模大致相同。结果如表3所示。这个结果证明了我们对动态数据集和EES的看法的有效性。我们发现对于像QA和NLI这样更复杂的任务,我们的EES框架可以取得更大的改进,这证明了分布差异问题以及我们的EES框架缩小这一差异的能力。
3.4.2 使用合理性进行种子数据合成的消融
然后,我们对S3框架在IMDb数据集上使用合理性进行数据集合成的消融进行了研究。结果如表4所示。我们发现使用理由进行数据集合成使LLM能够生成更高质量的数据集,从而在较低预算下(即更少的合成示例)提高小型模型的性能。
3.5 EES数据的可迁移性
接下来,我们测试EES合成数据的可迁移性。结果如表5所示。 在这个测试中,我们将我们框架的种子数据集替换为Ye等人(2022b)合成的数据。 我们进行了两组测试。我们比较了直接添加在S3中合成的EES数据(+ourAdd)和使用由Ye等人(2022b)合成的数据训练的小型模型的变体。我们可以看到这两个变体都导致了类似的性能提升。这表明EES合成的数据可以有效地转移到其他零样本合成的数据集。我们认为这是因为不同零样本数据合成方法的分布差异相似。因此,EES方法合成的数据可以普遍有助于提升性能,这进一步证明了S3的潜力。
3.6 额外数据质量研究
我们进行了这个实验来检查由EES合成的额外数据的质量。请注意,对于早期的LLM(如GPT2或T5),存在一种重复提示的趋势。如果LLM只是重复误分类的数据,那么就没有外推。因此,我们设计了以下实验来测试额外数据的质量: 句子编码:对于误分类数据 <math xmlns="http://www.w3.org/1998/Math/MathML"> D m i s D_{mis} </math>Dmis和额外数据 <math xmlns="http://www.w3.org/1998/Math/MathML"> D a d d \mathcal{D}{add} </math>Dadd,我们使用DistilBERT对每个 <math xmlns="http://www.w3.org/1998/Math/MathML"> x m i s x{mis} </math>xmis和 <math xmlns="http://www.w3.org/1998/Math/MathML"> x a d d x_{add} </math>xadd进行编码。这导致编码后的句子分别表示为 <math xmlns="http://www.w3.org/1998/Math/MathML"> z m i s z_{mis} </math>zmis和 <math xmlns="http://www.w3.org/1998/Math/MathML"> z a d d z_{add} </math>zadd,每个编码后的句子都在 <math xmlns="http://www.w3.org/1998/Math/MathML"> R d \mathbb{R}^d </math>Rd中(在DistilBERT中, <math xmlns="http://www.w3.org/1998/Math/MathML"> d = 768 d=768 </math>d=768)。
余弦相似度:然后,通过比较 <math xmlns="http://www.w3.org/1998/Math/MathML"> z m i s z_{mis} </math>zmis和 <math xmlns="http://www.w3.org/1998/Math/MathML"> z a d d z_{add} </math>zadd之间的余弦相似度,我们衡量它们的语义相似性。高余弦相似度表示存在实质性的语义重叠。
编辑距离:此外,为了了解文本的独特性,我们计算了句子 <math xmlns="http://www.w3.org/1998/Math/MathML"> x m i s x_{mis} </math>xmis和 <math xmlns="http://www.w3.org/1998/Math/MathML"> x a d d x_{add} </math>xadd之间的编辑距离。如果编辑距离接近句子长度,我们推断这些文本在构成上存在显著差异。结果如表6所示。
平均误分类数据长度(avg <math xmlns="http://www.w3.org/1998/Math/MathML"> x m i s x_{mis} </math>xmis长度)和平均生成数据长度(avg <math xmlns="http://www.w3.org/1998/Math/MathML"> x a d d x_{add} </math>xadd长度)提供了解释编辑距离的上下文。这个结果表明,虽然误分类数据和额外生成的数据之间存在很高的语义相似性(由余弦相似性得分证明),但生成的句子并不仅仅是误分类样本的复制品(因为它们的编辑距离几乎等于整个句子的长度)。这个结果为新生成的数据的质量提供了额外的证据。
4 相关工作
4.1 数据集合成
大多数机器学习方法所需的大量数据推动了许多研究人员探索数据集合成的概念。这旨在从大型预训练模型(例如LLMs)中生成数据集,以便将大型模型的丰富知识转移到小型模型。最初尝试实现这一目标的方法使用微调的生成模型生成数据。这些努力首先使用少量人工标注的数据(金标数据)对LLMs进行微调,然后将生成的数据与金标数据结合起来训练小型模型。其他研究人员试图为半监督学习合成大量数据。然而,这些方法仅适用于简单的文本分类任务,对于更复杂的任务如NLI或QA而言,证明了数据效率低下且无效。
LLMs提供的零样本性能的潜力导致一些研究人员考虑基于未微调LLMs的零样本数据集合成。然而,如图1所示,直接查询未微调的LLMs通常会导致数据存在很大的分布差距,并且通常效率低下。因此,一些研究尝试进行数据选择或数据增强。然而,它们纠正分布差距的能力仍有改进空间。
4.2 上下文学习
Brown等人(2020)提出,LLMs可以通过在提示中调整一些示例来更好地学习它们正在处理的任务。这种被称为上下文学习的范式特别吸引人,因为它消除了更新LLM参数的必要性。随后的研究侧重于优化提示模板和上下文示例的选择,以及学习带有上下文目标描述。上下文学习的关键思想是从类比中学习,与我们将误差外推以合成额外数据以填补分布差距的思想相一致。然而,大多数上下文学习方法设计用于少样本设置,而在我们的研究中,LLM不需要训练。我们探索LLM直接从错误外推的能力,为创建更有效的数据集提供了一个关键示例。
5 结论
本文提出了一种基于动态数据集视角的"逐步合成"(S3)方法用于数据集合成。S3是一种新颖的数据集合成框架,缩小了纯LLMs合成数据集与真实基础数据分布之间的分布差距。S3首先使用具有理由的种子数据合成,以在种子数据中实现低分布差距。然后,通过在少量真实世界数据上迭代外推小型模型的错误来缩小这个分布差距。对四个常用数据集上三个主要NLP任务的广泛实验表明,与代表性基线相比,S3显著提高了平均仅有合成数据的三分之一的小型模型的性能。S3在许多实际应用中具有高度的潜力,因为它能够有效(即性能更好)且高效(即提高数据效率)地将极大模型(例如GPT 3.5)中的知识传递给小型模型(例如DistilBert),同时实现数据效率和计算效率。
关于我们
🌟『大模型的艺术』🌟 --- 深入探索大模型的奥秘!我们专注于解析大模型的基础原理、实用操作指南和广泛应用。🚀 欢迎关注我们微信公众号,大模型的艺术。一起学习大模型的原理及探索大模型的应用落地,欢迎交流。如果你有什么想问想说的,可以在评论区留言或者后台直接留言,我们会第一时间进行回复。
关注后回复【论文】:即可免费领取NLP必读经典论文,包括attention,bert,word2vec等必读论文。还有2023最新的LLMs相关论文,包括RLHF最新最全最高引论文!多达100多篇全部需要收费的论文,回复即可免费获取!
🔍 每期内容,您将发现:
🧠 最新的大模型训练技巧:让复杂知识变得易于理解。
📚 精选训练资料:涵盖工程实践、技术总结到行业动态。
🎓 行业应用案例:看看大模型如何在不同领域大放异彩。
📖 免费资源:NLP学习资源、视频教程、PDF电子书等,一网打尽。
🌈 关注我们,让最前沿的技术触手可及,与我们一起,您不仅获得知识,还能享受到学习的乐趣和实战的便利。我们致力于提供最新、最实用的信息,帮助您领先一步!💡
🔥 独家资源等你来领!🔥关注后:
回复【白皮书】即可获得世界经济论坛关于AIGC/LLM如何重塑我们工作的白皮书,看看你的工作未来有多少内容会被影响吧。
回复【论文】:即可免费领取NLP必读经典论文,包括attention,bert,word2vec等必读论文。还有2023最新的LLMs相关论文,包括RLHF最新最全最高引论文!多达100多篇全部需要收费的论文,回复即可免费获取!
回复【提示】:可免费领取提示工程指南,包括prompt工程基本提示,prompt工程高级提示,prompt工程Chatgpt提示,prompt工程Midjounery提示,prompt工程StableDiffusion提示,等等。让你从小白直接成为提示工程师的全套提示资料!