AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


如何获取高质量数据进行代码指令调优?
发布日期:2024-09-10 03:17:02 浏览次数: 1591


之前很多研究都是生成、发现、过滤高质量的通用指令微调数据,而大家对代码任务的越发关注,如何构建更好的代码指令调整数据也越发重要。

下面给大家带来一篇筛选高质量代码指令微调数据的文章,主要基于指令的复杂性、回复质量和指令的多样性三个维度来进行样本的筛选,同时也指出了当前部分代码指令数据在HumanEval上存在严重的数据泄露。

Paper: https://arxiv.org/abs/2409.03810
Github: https://github.com/banksy23/XCoder
Data-HF: https://huggingface.co/datasets/banksy235/XCoder-80K

数据筛选

数据筛选过程主要从三个维度(指令复杂性、响应质量和指令多样性)从数据池中选择样本。

对于一个数据池 ,首先使用复杂性评分器 和单元测试模型 来计算每个数据的复杂性评分 和质量评分 。然后,对复杂性评分和质量评分进行归一化得到 ,经过线性组合后,得到整体评分 ,最后将数据池 进行排序,并根据多样性进行迭代采样,直到筛选数据集 达到预计大小为止,算法流程如下图所示。

  • 复杂性评分器:利用self-instruct方法获取一个小规模的种子数据 ,然后根据WizardCoder方法进行提示词 次深度进化,产生 轮次数据,将轮次是为复杂性的度量值,训练复杂性评分器。
  • 单元测试模型:代码通过测试用例数量可以作为响应质量的度量,利用6k数据训练LLaMA3-70B-Base模型来作为单元测试模型。在测试过程中,单元测试模型为每个训练样本生成12个测试用例,并执行单元测试程序,将通过的测试用例数量作为质量评分。
  • 多样性采样:迭代式从数据池中选择样本 ,当该样本对数据集 多样性做成贡献时,填入数据集 。样本 的多样性的贡献采用 表示,当 为真时,值等于1,被填入数据集 为样本 中最近样本之间的嵌入距离, 为超参数(0.945)。

效果分析

为了构建最佳的代码指令微调数据集,收集了各种可用的开源数据集,共2.5M样本。优于数据池过大,经过以下步骤过滤、去重,最终获得336K样本。

  • 选取学术工作数据集:Magicoder-OSS-Instruct、Magicoder-Evol-Instruct和Code-Feedback
  • 选择了长度最长的200K个样本
  • 选择复杂性评分最高的200K个样本
  • 去重

LLaMA3-8B-Base上采用Xcoder数据进行了实验,如下表所示,在仅使用40K数据在LiveCodeBench和BigCodeBench上就取得了优于基线的性能;增加到80K数据时,指标持续提高。

基于LLaMA3-70B-Base在Xcoder数据上训练了XCoder-70B模型,成为效果最佳的开源的代码大模型。

HumanEval上不是最优,是因为Magicoder-Evol-Instruct和Codefuse-Evol-Instruct数据在HumanEval存在数据泄露情况。

并提出了TLI(测试泄露指标)来量化训练集对测试集泄露数据程度。主要对两个数据集生成n-gram片段,并测量每个测试样本的n-gram片段与所有训练样本的n-gram片段之间的重叠情况,其中,测试样本中的公共n-gram片段个数与测试样本中的总n-gram片段个数的比率作为测试样本 与训练样本 之间的相似度分数。所有测试集中的相似度分数的平均值作为TLI值,其中,TLI值越高,泄露风险越大。

消融实验,三个维度的指标对于最终数据的选择均有益。

针对复杂性评估,可以发现杂性评分器 > 指令长度 > 困惑度 > 随机。

针对单元测试模型,可以发现训练的Llama3-70模型由于GPT4模型。

并且Xcoder选择10K数据的训练效果,就堪比随机选择160K数据效果。

同时,分析了XCoder的数据组成,重新评估了不同数据源的优势和劣势。


53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询