微信扫码
添加专属顾问
我要投稿
之前很多研究都是生成、发现、过滤高质量的通用指令微调数据,而大家对代码任务的越发关注,如何构建更好的代码指令调整数据也越发重要。
下面给大家带来一篇筛选高质量代码指令微调数据的文章,主要基于指令的复杂性、回复质量和指令的多样性三个维度来进行样本的筛选,同时也指出了当前部分代码指令数据在HumanEval上存在严重的数据泄露。
Paper: https://arxiv.org/abs/2409.03810
Github: https://github.com/banksy23/XCoder
Data-HF: https://huggingface.co/datasets/banksy235/XCoder-80K
数据筛选过程主要从三个维度(指令复杂性、响应质量和指令多样性)从数据池中选择样本。
对于一个数据池 ,首先使用复杂性评分器 和单元测试模型 来计算每个数据的复杂性评分 和质量评分 。然后,对复杂性评分和质量评分进行归一化得到 和 ,经过线性组合后,得到整体评分 ,最后将数据池 进行排序,并根据多样性进行迭代采样,直到筛选数据集 达到预计大小为止,算法流程如下图所示。
为了构建最佳的代码指令微调数据集,收集了各种可用的开源数据集,共2.5M样本。优于数据池过大,经过以下步骤过滤、去重,最终获得336K样本。
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+中大型企业
2025-04-03
Ray 在 Bilibili 的场景探索与落地实践
2025-04-03
Spring AI+DeepSeek R1搭建企业私有化模型工具(直接使用)
2025-04-02
一文看懂预训练、微调和上下文学习
2025-04-02
将复杂HTML变成AI易读Markdown | MCP精选集
2025-04-02
我让DeepSeek设计了一个智能运维平台 -- 如何做数据准备和模型训练
2025-04-02
微调大模型!ModelScope 算力,实现Qwen2.5微调模型
2025-04-01
Cursor是越来越难用了!逼着我写mdc文档比代码还多
2025-04-01
Docker部署Dify+RAGFlow避坑指南
2025-02-04
2025-02-04
2024-09-18
2024-07-11
2024-07-09
2024-07-11
2024-07-26
2025-02-05
2025-01-27
2025-02-01
2025-04-01
2025-03-31
2025-03-20
2025-03-16
2025-03-16
2025-03-13
2025-03-13
2025-03-11