大模型SFT数据选择方法综述

文摘   2024-10-30 21:00   美国  

数据选择方法

一个包含n个实例的指令数据集X = {x₁, x₂, …, xₙ},每个xᵢ 代表一条指令微调数据。为了使用指定的指令数据选择方法π 从 X 中选择一个大小为 m 的子集 S(m),我们接着使用预定义的评估指标Q来评估S(m)ₗ 的质量。通过评估指标测量获得的子集质量可以衡量所选择的指令数据选择方法的有效性。
指令数据选择方法的分类基于该方法使用的评分规则以及它采用的模型基础。这些方法可以分为以下4类:
  1. 指标体系方法
  2. 可训练的LLMs方法
  3. 强大的LLM方法
  4. 小模型方法
基于指标体系的方法
采用指标体系的方法直接识别多个指标 I₁, I₂, …, Iₙ,从而建立一个全面的指标集。该指标集中的每个指标都有特定的计算公式。值得注意的是,某些指标可能利用深度学习技术从数据集中提取特征,这本质上也是指标形式。这些指标有助于为数据实例计算单独的分数,表示为scoreᵢⱼ = Iᵢ(xⱼ)。这些分数随后在开发更强大的指标集系统发挥重要作用。

一旦建立,指标体系可以直接直接用于计算数据集X中的每个数据实例的分数。通过建立适当的阈值,该系统可以根据各自的分数选择性的包含数据:

[Cao et al., 2023]INSTRUCTMINING

这是一种基于线性规则的方法,用于评估指令数据的质量。该方法最初识别了关键的自然语言指标,如指令长度、困惑度、奖励分数、KNN-i等。这些指标随后用于开发线性方程。
为了探讨数据质量与这些指标之间的相关性,并定义方程的参数,进行了全面的微调实验。不同质量的数据被划分为多个子集,组合后用于大模型的微调。每个子集的质量标签是通过评估模型在测试集上的表现得出的。最小二乘法被应用于这些实验结果,以估计INSTRCTMINING中的参数。这涉及到拟合一个线性方程,以评估模型在测试集上的损失。
确定参数后,可以利用该公式计算指令的质量,从而促进数据选择。

[Wei et al., 2023] InstructionGPT-4

这是一种用于多模态大模型微调的数据选择方法。它在多项评估中超过了MiniGPT-4,且使用的数据量更少。

第一步,使用CLIP分数、指令长度等指标。视觉和文本数据被编码为向量,然后进行降维,这些视为特定的指标这些指标被组合成一个向量e。该向量随后被输入到可训练的数据选择器中,例如多层感知机或自注意力网络。这种方法在计算质量标签与[Cao et al., 2023] 相似,采用聚类算法将数据集划分成多个子集。在微调和评估每个子集后分配质量标签。
[Zhou et al., 2023b] DQ方法

这是一种用于大规模计算视觉数据集的创新数据压缩技术,但也适应于大语言模型领域。该方法包括几个关键步骤:

首先定义一个增益函数P(x),其中包含一个特征函数f(.)---类似于指标----并使用当前子集S和整个数据集D。该增益函数本质上形成一个指标集函数G(.)

然后,每次选择增益函数值最大的实例x加入到子集中,直到满足某个条件停止,再从剩余的数据重复上述过程,数据集被迭代地划分为不重叠的子集。随后,从每个子集均匀选择一个代表性样本,确保覆盖整个数据集,同时优化数据的多样性。

这种方法有限考虑维持数据集的整体多样性。

基于可训练的LLMs方法

大型语言模型可作为一个可训练的数据选择器,为每个指令微调数据打分,该方法不仅专注分析单个指令数据,还强调了数据选择与用于微调的大型模型功能同步的重要性。

[Li et al., 2023a] IFD方法
该方法假设大型语言模型(LLM)可以通过精心挑选的数据来初步学习识别指令,从而增强其评估更大数据集质量和估计指令之难度的能力。

最初,该方法通过在一个小的、聚类的指令数据子集上微调LLM,以培养其基本的指令执行技能。随后引入了一个新指标”指令执行难度(IFD)”,用于评估响应特定指令的难度。IFD通过比较模型在无指令情况下的响应质量来衡量指令执行的挑战。

[Li et al., 2023b] 指令反向翻译(Instruction Backtranslation)方法

用于生成和筛选指令。该方法首先使用一个基础的指令执行模型和网络语料库,模型为每个网络文档生成指令,形成一个数据集。接着,模型使用种子指令进行微调,以获得基本的能力。模型会自主为每条指令评分,超过设定阈值的指令将形成高分子集,用于进一步的微调。这个迭代过程提高了指令生成和筛选的效率。

[Li et al., 2023c] Nuggets 框架

该框架采用了双阶段方法。首先,它使用多种预定义任务来评估大型语言模型(LLM)在多个场景下的能力,这个过程称为零样本评分(zero-shot scoring)。随后,将指令数据集中的每个条目作为独特的提示,以单样本的方式使用。这些提示在预定义任务之前呈现,并重新评估 LLM 的表现,这一步称为单样本评分(one-shot scoring)。

该方法利用单样本评分和零样本评分之间的差异来计算每个指令的最终“黄金评分”(gold score)。在获得所有指令的黄金评分后,得分最高的指令子集被选为“黄金子集”,该子集直接用于模型的微调。该方法充分利用了大型模型固有的上下文学习能力。

[Wu et al., 2023] DIVERSEEVOL 机制

这是一种创新的迭代数据选择策略。该极致利用LLaMa等大型模型为指令数据生成嵌入向量。通过使用k-center-greedy算法来确保在选择用于微调llama模型的数据子集的多样性。这个过程会反复进行,逐步扩大选择的子集,最终生成一个高质量的指令数据集。

[Chen et al., 2023c] TEGIT 方法

这是一种生成优质指令微调数据的新方法。该方法中特别值得注意的是其筛选指令数据的方法。利用ChatGPT,将一个小型文档集转换为适合指令的格式,形成一个元数据集。这个数据集用于训练两个llama2模型,其中一个充当任务生成器,另外一个作为任务判别器。生成器的作用是从提供的文本中设计任务,而判别器则评估这些任务,确保其质量。

[Kung et al., 2023] 主动指令微调(Active Instruction Tuning)方法

这是一种独特的策略,专注于任务敏感性选择,旨在通过使用更少的任务来增强大型模型的微调效果,同时提高模型在任务之外的泛化能力。该技术引入了**提示不确定性(Prompt Uncertainty)**的概念,其确定方式是通过随机删除原始指令中的词生成 k 条扰动指令,然后对这些 k 条扰动指令的 LLM 输出概率偏差进行平均。那些表现出更高提示不确定性的任务优先用于指令微调,将提示不确定性的大小作为衡量任务不确定性的标准。

基于小模型的方法

使用外部小模型来作为评分器的方法,或使用小型模型将指令embedding后进行进一步处理。

[Du et al., 2023] MoDS 方法

专注于通过三个标准进行指令选择:质量(指令数据的保真度)、覆盖范围(指令类型的多样性)和必要性(指令对 LLM 微调的影响)。该过程分为四个关键步骤:

首先,利用奖励模型(OpenAssistant开发的reward-model-deberta-v3-large-v22模型)评估指令数据集的质量,选择一个子集 Dh,包含超过预定义质量阈值的指令。

其次,利用 k-center-greedy 算法识别种子指令,确保从指令数据集中选择出多样且具代表性的样本。

第三,使用种子指令对预训练的 LLM 进行微调。

随后,将该优化后的模型应用于 Dh,生成一个新的数据集 D_inference。

然后,使用奖励模型评估该数据集,该模型通过关注低得分的指令来识别对 LLM 学习至关重要的指令。建立一个阈值以选择增强指令数据,这些数据专门用于提高模型的性能。

最后,将种子指令与增强指令数据结合,形成一个高质量的指令子集,以便有效地对 LLM 进行微调。

[Chen et al., 2023a]Coreset-based数据选择方法

该方法有效地减少了所需的训练数据量,同时保持或潜在地增强模型性能。

首先,通过预训练的语言模型(如 BERT)获得样本的embedding;

然后对这些embedding应用无监督聚类来选择中心点;

最后使用 KCenterGreedy算法从给定数据集中检索核心样本;

基于强大的LLMs方法

使用像GPT-4和ChatGPT这样强大的大语言模型作为数据选择器的方法,该方法主要涉及设计提示模板,并利用LLMs的能力来评估指令数据的质量。

[Chen et al., 2023b] ALPAGASUS

这是一种创新的数据过滤方法,旨在提高指令执行任务(Instruction-Following Task, IFT)数据整理的效率和准确性。该方法通过向 ChatGPT 提供精心设计的提示,评估每个数据元组(包括指令、输入和响应)的质量。

该方法主要关注排除低于预定义质量阈值的元组。当将此过滤过程应用于大量数据集时,发现数据中有相当一部分存在质量问题。值得注意的是,应用基于 LLM 的过滤过程后,所开发的模型的性能超过了使用未过滤数据集并基于指令微调的原始模型。

[Lu et al., 2023] 自动化指令标记方法(INSTAG)

该方法利用 ChatGPT 为指令生成详细的开放式标签,以增强子集的多样性和复杂性。这个过程包括用反映每个指令语义和意图的标签对数据进行注释,并对这些标签进行规范化,以实现基于标签的选择方法。

该方法遵循一种优先考虑复杂性的多样化采样策略。它首先按照标签数量的降序对查询进行排序,然后根据标签的独特性迭代地将查询添加到子集中,直到子集达到预期的大小 N。最终的结果是一个经过精心策划的查询集,具有更多的标签,表明其复杂性和多样性更高。

[Xu et al., 2023b] LIFT方法

为了提高数据集的分布范围和质量,减少样本的冗余。该方法分为两个阶段:扩展数据集分布和策划数据集的多样性和质量。首先,利用ChatGPT生成多样化的指令并将它们向量化,从而增强数据集。然后,基于行方差选择一个子集。其次,ChatGPT根据准确性、可解释性、清晰度、难度和长度等指标对指令进行评分。基于这些评分,重新选择初始子集。

[Liu et al., 2023] DEITA方法
该方法采用多方面策略来选择指令数据,重点关注复杂性、质量和多样性。复杂性描述了指令的长度、难度和复杂程度等因素,而质量则体现了输出的准确性。利用WizardLM技术,该方法采用ChatGPT来增强指令,随后对增强后的指令进行复杂性和质量评估。评估过程包括使用专门训练的复杂性评分器对指令进行复杂性评分,并评估输出质量。数据集中的每条指令都会被赋予复杂性得分(c)和质量得分(q),然后通过将这两个指标相乘来计算综合得分。之后,根据这些综合得分对数据集进行组织,并将其向量化以供进一步分析。
为了确保多样性,该方法会创建一个子集,该子集通过添加与其中最近邻样本距离超过设定阈值(τ)的样本来构建。这一过程会持续进行,直到子集达到预定大小。

[Zhao et al., 2023] tree-instruct方法

该方法通过提升指令的复杂性来提高其质量。[Liu et al., 2023]采用此方法来衡量指令的复杂性,并为指令过滤设定了阈值。Tree-instruct利用GPT-4为指令数据生成语义解析树,并使用树中节点的数量作为衡量复杂性的指标。通过向树中添加节点来增加复杂性,然后利用GPT-4将新的树转换回自然语言,从而生成新的高质量指令。
[Yu et al., 2023] WaveCoder
这是一个通过指令改进技术增强的以代码为中心的LLM(大型语言模型)。其训练过程包含了生成的数据,其中数据过滤阶段尤为重要。在数据生成之后,一个基于LLM的判别器(利用GPT-4)根据既定的标准(这些标准被细分为子主题)对指令数据进行评估。这种方法使得过滤过程得到了更精细的控制,有效地剔除了低质量的指令实例。

备注:进群,进入大模型技术群

id:baobaogpt,记得备注呦

包包算法笔记
大模型技术和行业认知
 最新文章