论文链接:https://arxiv.org/abs/2202.06417
GitHub 仓库:https://github.com/OFA-Sys/DiverseEvol
提高大型语言模型(LLM)的指令遵循能力主要需要大量的指令调整数据集。然而,这些数据集的庞大数量带来了相当大的计算负担和标注成本。为了研究一种标注效率高的指令调整方法,使模型本身能够主动采样同样有效甚至更有效的子集,作者引入了一种自进化机制 DIVERSEEVOL。在这一过程中,模型会反复增强其训练子集,以完善自身性能,而无需人类或更高级 LLM 的干预。该数据采样技术的关键在于提高所选子集的多样性,因为模型会根据其当前的嵌入空间选择与任何现有数据点最不同的新数据点。三个数据集和基准的广泛实验证明了 DIVERSEEVOL 的有效性。与在全部数据上进行微调相比,在不到 8% 的原始数据集上训练的模型保持或提高了性能。作者还提供了经验证据来分析指令数据多样性的重要性,以及迭代方案相对于一次性采样的重要性。
方法:DIVERSEEVOL
迭代指令数据选择
目标是将指令数据挖掘正规化,使其成为一个迭代过程,按照一定的策略从庞大的源指令数据集中逐步提取指令。给定一个指令响应对集合,表示为 Z = { ( x i , y i ) } i ∈ N Z = \{(x_i, y_i)\}_{i \in N} Z={(xi,yi)}i∈N ,其中每个 (xi, yi) 代表一个特定的指令响应对,定义 N = { 1 , … , n } N = \{1, \ldots, n\} N={ 1,…,n} 为初始源代码指令数据集的大小。
迭代过程围绕两个数据容器展开:截至迭代步骤 t 的训练数据池 P t P_t Pt 和未选择数据点容器 Q t Q_t Qt。在每次迭代 t 中,选择函数(即策略)A 决定将哪些数据点 S = { s j } j ∈ K , K = { 1 , … , k } S = \{s_j\}_{j \in K}, \ K = \{1, \ldots , k\} S={ sj}j∈K, K={ 1,…,k},被整合到下一步的训练数据池 P t + 1 P_{t+1} Pt+1中。扩大后的模型库将作为下一次模型迭代 M t + 1 M_{t+1}