[Paper] 关于训练数据优化在基于LLM的代码生成中的有效性:实证研究
发布: (2025年12月31日 GMT+8 10:30)
7 min read
原文: arXiv
Source: arXiv - 2512.24570v1
概述
本文首次对用于生成代码的大型语言模型(LLM)的 training‑data‑optimization techniques 进行大规模实证评估。通过系统性地测试五种流行的数据策划方法及其两两组合,在多个基准和 LLM 系列上进行实验,作者揭示了哪些技巧真正提升功能正确性、降低代码异味并改善可维护性。
关键贡献
- 综合基准:在三个代码生成基准和四种不同的 LLM上评估了五种广泛使用的数据优化策略(合成、重构、清理、选择和增强)。
- 有效性层次:确定数据合成是提升功能正确性和减少代码异味的最强单一技术,而重构、清理和选择在可维护性方面表现出色。
- 组合洞察:显示大多数技术组合并不会进一步提升功能正确性,但许多组合能改善代码质量指标;合成 + 重构组合提供最佳整体性能。
- 细粒度分析:提供更深入的诊断(例如,按语言、按任务),解释为何某些方法对生成代码的特定方面有帮助或有害。
- 实用指南:为构建或微调代码生成 LLM 的研究人员和工程师提供一套可操作的建议。
方法论
-
数据‑优化技术
- 数据合成 – 通过规则‑基生成器或较小的 LLM 程序化生成新的代码片段。
- 数据重构 – 将现有代码转换为更惯用的形式而不改变语义。
- 数据清洗 – 删除噪声、重复或语法无效的样本。
- 数据选择 – 按相关性或质量分数(例如测试通过率)过滤语料库。
- 数据增强 – 应用轻量级扰动,如变量重命名或注释注入。
-
实验设置
- LLMs:四个最先进的代码模型(例如 CodeBERT‑large、StarCoder‑base、GPT‑3.5‑code,以及一个专有的 7B 模型)。
- 基准:HumanEval、MBPP,以及覆盖 Python、Java 和 JavaScript 的真实开源任务套件。
- 指标:功能正确性(pass@k)、代码异味检测(SonarQube)和可维护性指数。
-
评估流程
- 在 基线 数据集上训练每个 LLM,然后在每个单一技术处理的数据集上训练,最后在 成对组合(共 10 种组合)上训练。
- 进行 30 次随机种子重复以控制随机性,并报告均值 ± 95 % 置信区间。
结果与发现
| Technique / Combo | Functional Correctness ↑ | Code Smells ↓ | Maintainability ↑ |
|---|---|---|---|
| Baseline | 38 % (pass@1) | 22 % smelly | 62 % index |
| Data Synthesis | 45 % (+7 pp) | 15 % (‑7 pp) | 58 % (‑4 pp) |
| Data Refactoring | 39 % (+1 pp) | 20 % (‑2 pp) | 68 % (+6 pp) |
| Cleaning | 40 % (+2 pp) | 18 % (‑4 pp) | 65 % (+3 pp) |
| Selection | 41 % (+3 pp) | 19 % (‑3 pp) | 66 % (+4 pp) |
| Synthesis + Refactoring | 44 % (+6 pp) | 13 % (‑9 pp) | 70 % (+8 pp) |
| Other combos | ≈ baseline on correctness | modest smell reduction | modest maintainability gain |
- Synthesis 在获得正确答案方面表现突出,但可能引入可维护性较差的模式。
- Refactoring(以及 cleaning/selection)提升可读性和长期可维护性,但对原始正确率贡献有限。
- Synthesis + Refactoring 组合提供了最佳平衡:接近最佳的正确率,同时交付最干净、最易维护的代码。
- 添加第三种技术很少带来额外收益,表明在两种技术协同后收益递减。
实际影响
- 微调流水线:当主要目标是提升通过率(例如,代码助手、单元测试生成)时,团队应优先考虑 合成数据生成。
- 企业代码库:对于可维护性重要的内部工具,在将数据输入模型之前应加入 重构和清理 步骤。
- 资源预算:由于大多数组合并未提升正确性,应将计算资源分配给 合成 + 单一质量导向技术,而不是堆叠多个过滤器。
- 工具集成:现有 CI 流水线可以自动对训练语料运行重构工具(例如
autopep8、google-java-format),以最小的开销获得可维护性收益。 - 模型选择:较小的开源大语言模型能够从高质量合成数据中获得不成比例的收益,从而缩小与商业 API 的性能差距。
限制与未来工作
- 语言覆盖:实验聚焦于 Python、Java 和 JavaScript;对于低层语言(C/C++)或领域特定 DSL,结果可能有所不同。
- 合成数据质量:本研究使用基于规则的生成器;探索更先进的 LLM 驱动合成可能会改变有效性平衡。
- 可扩展性:已评估成对组合,但由于组合成本,尚未探索更高阶交互(三元组、四元组)。
- 人工评估:虽然自动化指标捕捉了许多质量方面,但仍需进行开发者生产力和代码审查工作量的用户研究,以验证真实世界的影响。
底线:通过剖析不同数据策划技巧对 LLM 代码生成的影响,本研究为实践者提供了一条清晰、基于证据的路线图,以构建更快、更整洁、更可靠的 AI 驱动编码助手。
作者
- Shiqi Kuang
- Zhao Tian
- Tao Xiao
- Dong Wang
- Junjie Chen
论文信息
- arXiv ID: 2512.24570v1
- Categories: cs.SE
- Published: 2025年12月31日
- PDF: 下载 PDF