WHAT MAKES GOOD DATA FOR ALIGNMENT? A COMPREHENSIVE STUDY OF AUTOMATIC DATA SELECTION IN INSTRUCTION TUNING

文章标题:什么构成好的对齐数据?一项关于指令微调中自动数据选择的综合研究
作者/机构
- Wei Liu (上海科技大学)
- Weihao Zeng (北京邮电大学)
- Keqing He (美团)
- Yong Jiang (阿里巴巴集团)
- Junxian He (香港科技大学)

A1 主要贡献

本文旨在系统性地探究指令微调中“好数据”的特征,并基于此提出一种自动、高效的数据选择方法,以提升大型语言模型(LLM)对齐的效率。

图1:数据选择方法图示。我们从复杂度、质量和多样性三个维度衡量数据。I和R分别代表指令和响应。对于EVOL COMPLEXITY和EVOL QUALITY,我们首先遵循Xu等人(2023)的方法,通过演化来收集不同复杂度或质量的样本,然后我们让ChatGPT(本文中的“ChatGPT”指gpt-3.5-turbo-0613)对一个小型种子数据集的同一数据样本的变体进行排序和打分,并基于这些分数训练我们自己的复杂度和质量打分器。在最后一步,我们利用训练好的打分器,采用“分数优先,多样性感知”的方法来选择“好”的数据样本,详见§3。
图1:数据选择方法图示。我们从复杂度、质量和多样性三个维度衡量数据。I和R分别代表指令和响应。对于EVOL COMPLEXITY和EVOL QUALITY,我们首先遵循Xu等人(2023)的方法,通过演化来收集不同复杂度或质量的样本,然后我们让ChatGPT(本文中的“ChatGPT”指gpt-3.5-turbo-0613)对一个小型种子数据集的同一数据样本的变体进行排序和打分,并基于这些分数训练我们自己的复杂度和质量打分器。在最后一步,我们利用训练好的打分器,采用“分数优先,多样性感知”的方法来选择“好”的数据样本,详见§3。

A3 背景知识/关键Observation/设计原则

2.1 数据选择问题

数据选择问题的形式化定义。为了研究对齐最优数据的特性,本文在数据选择的框架内进行分析。在此背景下,我们深入研究了各种评估数据的指标,并利用这些指标选择一个数据子集进行指令微调。最终的对齐性能作为目标指标能否识别有效指令微调数据样本的指示器。形式上,给定一个大型指令微调数据池 $X = \{x_1, x_2, \cdots , x_n\}$,其中 $x_i$ 代表一个指令-响应对形式的独立数据样本。我们的目标是使用一个表示为 $\pi$ 的选择策略,从 $X$ 中选择一个大小为 $m$ 的子集 $S^{(m)}_\pi$。$m$ 是子集的大小,与指令微调中消耗的计算量成正比,因此我们也称 $m$ 为数据预算。通常,我们定义一个指标来评估数据,并根据该指标选择数据样本。将指令微сил后的对齐性能表示为 $Q$,数据预算为 $m$ 的最优数据选择策略 $\pi^*$ 满足:

公式
公式

在接下来的实证研究中,我们将通过根据特定指标选择 $S^{(m)}_\pi$ 并在其上执行指令微调,来探索各种数据评估指标及其相应的数据选择策略。

A2 方法细节

2.3 复杂度视角 – EVOL COMPLEXITY

复杂度在指令微调中的重要性。通常认为,长、难、复杂的数据样本对指令微调更有益(引用自【索引37,A preliminary study of the intrinsic relationship between complexity and alignment,2023,ArXiv】和【索引4,Instruction mining: High-quality instruction data selection for large language models,2023,ArXiv】)。例如,【索引35,Wizardlm: Empowering large language models to follow complex instructions,2023,ArXiv】通过提示ChatGPT“演化”数据样本以刻意增加其复杂度,从而产生了SOTA的开源对齐模型WizardLM。本节系统地研究了评估数据复杂度的各种指标,旨在确定对指令遵循能力贡献最大的复杂度概念。具体来说,我们只考虑复杂度维度,并将选择策略 $\pi_{complexity}$ 定义为选择具有最高复杂度分数的 $m$ 个样本。

复杂度度量的基线方法。本文研究了以下几种现有的复杂度度量方法作为基线:(1)随机选择;(2)指令长度,使用指令的长度作为复杂度的度量;(3)响应的困惑度(Perplexity),使用预训练模型以零样本方式计算响应的困惑度,高困惑度通常意味着样本的难度较大;(4)直接打分(Direct Scoring)(引用自【索引5,Alpagasus: Training a better alpaca with fewer data,2023,ArXiv】),直接提示ChatGPT对指令的难度和复杂度进行打分;(5)指令节点(Instruction Node)(引用自【索引37,A preliminary study of the intrinsic relationship between complexity and alignment,2023,ArXiv】),使用ChatGPT将指令转换为语义树,并采用树中节点的数量作为复杂度度量;(6)Instag Complexity(引用自【索引20,#instag: Instruction tagging for analyzing supervised fine-tuning of large language models,2023,ArXiv】),首先利用ChatGPT根据语义和意图对样本进行标记,然后基于ChatGPT的标签训练一个基于LLaMA的标注器来标记数据,他们使用标签数量作为复杂度的代理。我们采用了他们公开的LLaMA-2 7B标注器模型进行数据标注。(7)IFD(引用自【索引15,From quantity to quality: Boosting llm performance with self-guided data selection for instruction tuning,2023a,ArXiv】),一种基于响应损失计算的新复杂度指标。我们注意到,直接打分和指令节点方法不具备可扩展性,因为它们需要ChatGPT标注整个数据池,成本高昂。为节省成本,我们从每个数据池中随机抽取50K样本,并应用这两个基线方法。这些基线方法的相关提示词见附录E.1。

提出Evol Complexity方法。受Evol-Instruct利用ChatGPT演化样本使其更复杂的启发,我们提出了EVOL COMPLEXITY,一种基于演化的复杂度度量方法。具体来说,我们收集一个小型种子数据集 $D = \{(I^{(0)}_1, R^{(0)}_1), \cdots, (I^{(0)}_N, R^{(0)}_N)\}$,其中 $(I^{(0)}_k, R^{(0)}_k)$ 代表一个指令-响应对。对于每个指令样本 $I^{(0)}_k$,我们使用来自【索引35,Wizardlm: Empowering large language models to follow complex instructions,2023,ArXiv】的“深度演化提示”(In-Depth Evolving Prompt,详见附录E.2),通过增加约束、深化、具体化和增加推理步骤等技术来增强其复杂度。经过 $M$ 次迭代后,我们为 $I_k$ 获得了一组不同复杂度的指令,即 $\{I^{(0)}_k, \cdots, I^{(M)}_k\}$。这里我们设置 $M=5$,总共获得6个变体。

基于演化变体的排序与打分。如图1左侧所示,我们接着要求ChatGPT对这6个样本进行排序和打分(提示词见附录E.2),从而获得与指令对应的复杂度分数 $c$。我们强调,与直接打分不同,我们在一个提示中向ChatGPT提供所有6个样本——这些样本代表同一原始样本的不同演化阶段,这种打分方案有助于ChatGPT捕捉它们之间微小的复杂度差异,从而使复杂度分数能够实现更细粒度的区分。我们发现这至关重要,否则ChatGPT倾向于给大多数样本分配相似的分数,如附录B所示。

训练复杂度打分器。在获得ChatGPT对小型种子数据集的评分后,我们使用这些分数来训练一个LLaMA-1 7B模型,使其能够根据输入的指令预测复杂度分数。在多轮对话中,我们对每一轮单独评分,并将它们的总和作为最终分数。在本文中,我们使用从Alpaca数据集(引用自【索引28,Stanford alpaca: An instruction-following llama model,2023】)中随机抽取的2K个样本作为种子数据集。

复杂度实验结果。表2展示了使用各种复杂度指标从 $X_{sota}$ 和 $X_{base}$ 中选择6K数据样本的结果。我们的Evol-Complexity方法带来了最佳的对齐性能。我们观察到,虽然Instag Complexity在 $X_{sota}$ 上表现良好,但其在 $X_{base}$ 上的性能仅略好于随机选择。相比之下,EVOL COMPLEXITY在两个数据集上均取得了优异的性能,表明其在不同数据池中具有很强的鲁棒性。我们的方法与严重依赖ChatGPT标注的方法(如Direct Scoring和Instruction Node)相比也具有显著优势。结果还表明,指令长度并不是对齐所偏好数据的良好指标。有趣的是,困惑度这个直观的复杂度度量,其结果远差于随机选择基线。通过进一步调查,我们发现具有高困惑度的样本通常响应非常短。

表2:不同复杂度指标的MT-bench得分。所有方法均选择6K样本。“Pool=50K”表示数据选择在一个50K大小的子集中进行,因为使用ChatGPT标注整个数据池的成本过高。我们包含了我们的方法在50K数据池上的结果,以便与基线进行公平比较。
表2:不同复杂度指标的MT-bench得分。所有方法均选择6K样本。“Pool=50K”表示数据选择在一个50K大小的子集中进行,因为使用ChatGPT标注整个数据池的成本过高。我们包含了我们的方法在50K数据池上的结果,以便与基线进行公平比较。

2.4 质量视角 – EVOL QUALITY

质量在指令微调中的重要性。通常,能够提供准确、详细和有用响应的LLM更受人们青睐,正如【索引38,Judging llm-as-a-judge with mt-bench and chatbot arena,2023,ArXiv】所指出的。在本节中,我们进行了一项受控研究,以检验用于评估样本质量的各种指标。与EVOL COMPLEXITY类似,我们设计了一种基于质量的选择策略 $\pi_{quality}$,使我们能够根据不同的度量选择质量得分最高的 $m$ 个样本。接下来,我们将介绍所考察的基线方法和我们新提出的质量评估方法。

质量度量的基线方法。我们检验了以下作为质量评估基线的现有方法:(1)随机选择;(2)响应长度(Response Length),将响应的长度作为质量指标;(3)直接打分(Direct Scoring)(引用自【索引5,Alpagasus: Training a better alpaca with fewer data,2023,ArXiv】),提示ChatGPT直接评估响应对指令的准确性。相关提示词见附录E.3。

提出Evol Quality方法。与EVOL COMPLEXITY类似,我们引入EVOL QUALITY来增强质量度量的辨别力。对于一个给定的数据样本 $(I^{(0)}_k, R^{(0)}_k)$,我们提示ChatGPT进行演化,包括增强帮助性、增加相关性、丰富深度、培养创造性和提供额外细节。经过 $M$ 次迭代后,对于相同的指令 $I^{(0)}_k$,我们为 $R_k$ 获得了一组不同质量的响应,表示为 $\{R^{(0)}_k, \cdots, R^{(M)}_k\}$。与EVOL COMPLEXITY类似,我们设置 $M=5$。

基于演化变体的排序与打分。如图1中部所示,我们接着指示ChatGPT根据响应质量对这些响应进行排序和打分,从而获得每个响应对应的质量分数 $q$(提示模板见附录E.4)。与Evol Complexity类似,这种打分方法能够帮助ChatGPT辨别不同质量响应之间的细微差异,从而提供更细致的质量分数区分,如附录B所示。我们利用从种子数据集派生的分数来微调一个LLaMA-1 7B模型,使其能够根据给定的指令-响应对预测质量分数。种子数据集与EVOL COMPLEXITY使用的相同,即从Alpaca数据集中随机抽取的2K个样本。

质量实验结果。表3分别展示了从 $X_{sota}$ 和 $X_{base}$ 中选择前6K数据的实验结果。我们提出的EVOL QUALITY方法在对齐性能上始终表现出优越性。我们注意到,质量方差较大的数据池 $X_{base}$ 更容易受到质量指标的影响,这是直观的,因为这类数据池中存在许多低质量样本,会显著损害性能。这一结果表明,质量是一个必要的考虑维度,尤其是在处理含有大量低质量样本的数据池时。我们还观察到,响应长度与最终的对齐性能正相关,但对于像 $X_{sota}$ 这样已经具有高质量的数据集,其影响并不显著。

表3:不同质量度量的MT-bench得分。所有方法选择6K样本进行训练。“Pool=50K”表示数据选择在一个50K大小的子集中进行,因为使用ChatGPT标注整个数据池的成本过高。我们包含了我们的方法在50K数据池上的结果,以便与基线进行公平比较。
表3:不同质量度量的MT-bench得分。所有方法选择6K样本进行训练。“Pool=50K”表示数据选择在一个50K大小的子集中进行,因为使用ChatGPT标注整个数据池的成本过高。我们包含了我们的方法在50K数据池上的结果,以便与基线进行公平比较。

2.5 多样性视角 – 一种基于嵌入的方法

多样性在指令微调中的重要性。作为一项通用原则,一个先进的LLM应该能够熟练处理来自人类的各种请求。因此,用于指令微调的数据最好能保持最大的多样性。然而,真实世界的数据常常表现出冗余性(引用自【索引1,Semdedup: Data-efficient learning at web-scale through semantic deduplication,2023,ICLR Workshop】)。在本研究中,我们通过进行受控实验来探索数据多样性对对齐的影响,并引入一种简单而有效的策略 $\pi_{diversity}$,以在所选数据子集中保持多样性和简洁性。

多样性选择的实验设置。在这项工作中,我们提出了一种迭代方法来确保所选数据的多样性。该迭代方法从数据池 $X$ 中逐一挑选样本 $x_i$ 加入已选数据集 $S$,当 $x_i$ 对 $S$ 有多样性贡献时才加入。这个过程持续进行,直到达到预算 $m$ 或 $X$ 中所有 $x_i$ 都被遍历。为明确起见,我们将一个新考虑的样本 $x_i$ 带来的多样性收益形式化为一个指示函数 $\mathbf{1}[F(x_i, S)]$,仅当 $F(x_i, S)$ 为真时等于1,否则为0。$F$ 是我们稍后将定义的函数,用于评估 $x_i$ 相对于已选数据集 $S$ 是否表现出多样性。只有当 $\mathbf{1}[F(x_i, S)]$ 等于1时,$x_i$ 才会被添加到 $S$ 中。其他设置细节见附录A。

多样性度量的基线方法。除了随机选择,我们还评估了Instag diversity(引用自【索引20,#instag: Instruction tagging for analyzing supervised fine-tuning of large language models,2023,ArXiv】),该方法被设计为迭代地确保所选数据集内的多样性。它利用 $S$ 的标签集增长作为定义函数 $F$ 的度量。具体来说,它将 $F_t$ 定义为 $|T_S \cup T_{x_i}| > |T_S|$,其中 $T_S$ 代表 $S$ 中所有标签的集合,而 $T_{x_i}$ 代表与 $x_i$ 相关联的标签。

提出Repr Filter方法。我们检验了我们提出的基于嵌入的方法,称之为Repr Filter。具体来说,我们使用样本 $x_i$ 与其在 $S$ 中最近邻之间的距离作为定义 $F$ 的度量。我们利用LLaMA-1 13B模型对句子进行编码并计算余弦距离 $d$,然后定义 $F := d < \tau$,其中 $\tau \in (0, 1)$ 是一个阈值超参数。这意味着,当 $x_i$ 与其最近邻的嵌入距离小于一个阈值时,我们认为 $x_i$ 可以增加 $S$ 的多样性。在数据选择过程中,我们首先根据我们将在§3.1中详述的复杂度和质量分数对数据池 $X$ 进行排序,然后逐一检查每个样本,如果 $d < \tau$,则将 $x_i$ 放入 $S$ 中,其中 $S$ 初始化为空。这个过程在 $S$ 的大小达到数据预算 $m$ 时停止。在本文所有相关实验中,我们将阈值 $\tau$ 设置为0.9,同时在附录C.1中提供了关于 $\tau$ 和不同句子表示的分析结果。

多样性实验结果。表4分别展示了在 $X_{sota}$ 和 $X_{base}$ 上不同多样性策略的结果。将随机选择与另外两种确保多样性的策略进行比较,用随机选择数据训练的模型性能显著低于其他模型,这证明了多样性的关键作用。并且我们的方法在两个数据池上都能胜过Instag Diversity。

表4:不同多样性度量的MT-bench得分。所有方法选择6K样本进行指令微调。
表4:不同多样性度量的MT-bench得分。所有方法选择6K样本进行指令微调。

3.1 方法

分数优先,多样性感知的数据选择策略。尽管有多种方法可以结合复杂度、质量和多样性度量,但我们旨在保持其尽可能简单以实用。直观上,我们希望选择具有高复杂度和高质量分数的样本,同时保持集合的多样性。为此,我们提出了一种“分数优先,多样性感知”的数据选择策略,表示为 $\pi_{DEITA}$。我们的策略引入了一个新的evol分数 $s$,它通过将复杂度分数 $c$ 与质量分数 $q$ 相乘来结合复杂度和质量,即 $s := c \times q$。对于多轮对话,我们为每一轮计算这个分数,并将它们相加得到整个对话的最终分数。接下来,我们使用 $s$ 对 $X$ 中的所有样本进行排序,得到排序后的数据池 $X^* = (x^*_1, x^*_2, \dots, x^*_n)$,其中 $x^*_0$ 代表evol分数最高的样本。从 $S^\pi_{1_{DEITA}} = (x^*_0)$ 开始,我们按照REPR FILTER策略,从 $X^*/S^\pi_{DEITA}$ 中逐一迭代选择数据,并丢弃 $S^\pi_{DEITA}$ 的冗余样本。通过整合evol分数和REPR FILTER,我们的方法保证了最终数据集的复杂度、质量和多样性。我们的数据选择方法在图1的右侧部分进行了图示,并在算法1中进行了总结。

算法 1 分数优先,多样性感知的数据选择
1: 输入: 数据池 X, 数据预算 m
2: 输出: 选择的子集 S^{(m)}_{π_{DEITA}}
3: 初始化空数据集 S^{(m)}_{π_{DEITA}}
4: 使用组合的复杂度分数和质量分数 s = q * c 对 X 进行排序;
5: 得到排序后的数据池 X*;
6: for 每个样本 x ∈ X* do
7:     // d(x, S) 表示 x 与 S 中最近邻居的距离
8:     if d(x, S^{(m)}_{π_{DEITA}}) < τ then
9:         S^{(m)}_{π_{DEITA}} ← S^{(m)}_{π_{DEITA}} ∪ {x}
10:    else
11:        Continue
12:    end if
13:    X ← X \ {x}
14:    if |S^{(m)}_{π_{DEITA}}| 等于 m then
15:        Break
16:    end if
17: end for

训练DEITA。我们使用选定的包含 $m$ 个样本的数据集来训练DEITA。我们将得到的模型表示为DEITA_m。在本文中,我们分别基于LLaMA-1-13B、LLaMA-2-13B和Mistral-7B训练DEITA模型,训练细节在附录A中描述。

A4 实验环境

A4 实验结果

本文通过一系列实验验证了DEITA数据选择方法的有效性。

A5 结论

本文深入探讨了什么构成好的对齐数据这一问题。研究通过在复杂度、质量和多样性三个维度上进行受控实验,提出了用于自动数据选择的新方法。基于这些方法筛选出的数据,我们训练了DEITA模型。实验结果表明,DEITA能够以10倍的训练样本量,达到或超过当前最先进的开源模型的性能。我们公开发布了所筛选的数据集,以帮助研究社区更高效地对齐模型。

A6 附录

A 实验设置细节

B 案例研究

表8和表9分别展示了使用直接打分法和我们提出的排序与打分法对复杂度和质量进行评分的实例。对这些实例的分析表明,直接打分法倾向于给出相似且过高的分数。相比之下,我们的方法能够辨别不同样本间复杂性或质量的细微差异,从而提供具有明显区分度的分数。

表8:不同方法生成的复杂度分数案例,包括直接打分法和我们提出的排序与打分法。
表8:不同方法生成的复杂度分数案例,包括直接打分法和我们提出的排序与打分法。

表9:不同方法生成的质量分数案例,包括直接打分法和我们提出的排序与打分法。
表9:不同方法生成的质量分数案例,包括直接打分法和我们提出的排序与打分法。

C 分析

C.1 Repr Filter分析

图4:在Xsota中设置不同τ和利用不同句子表示的结果
图4:在Xsota中设置不同τ和利用不同句子表示的结果

D 人工评估

表10:人工评估结果。Vicuna代表Vicuna-13B-v1.3模型。DEITA和随机选择都使用6K训练样本,而Vicuna则在125K样本上训练。骨干模型是LLaMA1-13B。
表10:人工评估结果。Vicuna代表Vicuna-13B-v1.3模型。DEITA和随机选择都使用6K训练样本,而Vicuna则在125K样本上训练。骨干模型是LLaMA1-13B。

图5:我们的一个标注提示和界面示例。
图5:我们的一个标注提示和界面示例。

E 提示词示例

E.1 复杂度基线

表11展示了Direct Scoring和Instruction Node等基线作为复杂度指标所使用的提示词。

表11:复杂度基线对应的提示模板,包括Direct Scoring和Instruction Node。
表11:复杂度基线对应的提示模板,包括Direct Scoring和Instruction Node。

E.2 EVOL COMPLEXITY

表12:用于增加指令复杂度的提示,包括增加约束和深化。
表12:用于增加指令复杂度的提示,包括增加约束和深化。

表13:用于增加指令复杂度的提示,包括具体化和增加推理步骤。
表13:用于增加指令复杂度的提示,包括具体化和增加推理步骤。

表14:用于对不同复杂度的指令进行排序和评分的提示。
表14:用于对不同复杂度的指令进行排序和评分的提示。

E.3 质量基线

表15展示了Direct Scoring等基线作为质量指标所使用的提示词。

表15:质量基线对应的提示模板,包括Direct Scoring。
表15:质量基线对应的提示模板,包括Direct Scoring。

E.4 EVOL QUALITY

表16:用于提高响应质量的提示,包括增强帮助性、增加相关性和丰富深度。
表16:用于提高响应质量的提示,包括增强帮助性、增加相关性和丰富深度。

表17:用于提高响应质量的提示,包括培养创造性和提供额外细节。
表17:用于提高响应质量的提示,包括培养创造性和提供额外细节。

表18:用于对不同质量的响应进行排序和评分的提示。
表18:用于对不同质量的响应进行排序和评分的提示。

方法细节中的引用汇总