[论文解读] NAPS: Natural Program Synthesis Dataset
NAPS 引入了一个大规模的真实世界程序合成数据集,包含来自竞技编程的真人编写的题目描述和专家级解决方案,采用 UAST 格式代码及输入/输出示例。最佳基线模型准确率为 8.8%,凸显了该数据集的复杂性以及未来在从自然语言规范进行神经程序合成方面仍有巨大研究空间。
We present a program synthesis-oriented dataset consisting of human written problem statements and solutions for these problems. The problem statements were collected via crowdsourcing and the program solutions were extracted from human-written solutions in programming competitions, accompanied by input/output examples. We propose using this dataset for the program synthesis tasks aimed for working with real user-generated data. As a baseline we present few models, with the best model achieving 8.8% accuracy, showcasing both the complexity of the dataset and large room for future research.
研究动机与目标
- 创建一个基于真实竞技编程题目描述和专家解决方案的、真实且大规模的程序合成数据集。
- 支持使用自然语言规范而非合成或简化输入进行神经程序合成的研究。
- 为评估模型在包含变量、控制流和复杂逻辑的复杂真实编程任务上的表现提供基准。
- 支持未来在数据增强、少样本学习以及对未见问题结构的泛化能力方面的研究。
- 通过包含多样化的自然写作风格题目描述和完整程序解决方案,弥补现有数据集的不足。
提出的方法
- 通过从 CodeForces 收集完整程序解决方案,并将其转换为 UAST 格式,以统一不同编程语言的语法。
- 通过竞技程序员众包获取题目描述,采用指令式、高层次的写作风格,以提升可读性和泛化能力。
- 每个解决方案均配对输入/输出示例和模式定义,以支持基于测试的评估。
- 生成每份解决方案对应的 300 个合成题目描述,用于训练基线模型,模拟自然语言的多样性。
- 基线模型包括使用束搜索和持久化树数据结构实现内存高效解码的序列到序列与序列到树架构。
- 序列到树模型使用持久化树高效管理搜索过程中的多个候选程序,解码器在每一步扩展最左侧的未完成节点。
实验结果
研究问题
- RQ1神经模型能否泛化到由自然语言描述的复杂真实编程问题?
- RQ2使用真实人类编写的题目描述与使用合成或简化描述相比,模型性能有何差异?
- RQ3OOV(词汇表外)标记处理对程序合成准确率有何影响?
- RQ4使用持久化树的序列到树解码在多大程度上能提升程序合成的效率与准确率?
- RQ5合成程序对逻辑冗余的鲁棒性如何?即使存在错误语法,它们是否仍能通过测试用例?
主要发现
- 表现最佳的基线模型——采用 OOV 处理的序列到树模型,在测试集上达到 8.8% 的准确率,表明仍有巨大提升空间。
- 采用 OOV 复制机制的序列到树模型准确率为 7.9%,优于基线序列到序列模型(准确率为 0%)。
- 在 50% 准确率指标下,11.2% 的合成程序至少通过了半数测试用例,表明部分正确比完全正确更常见。
- 即使模型出现语法错误(如冗余的 if 语句),程序通常仍保持逻辑正确并能通过所有测试用例。
- 模型对题目描述中的冗长表达和罕见词汇高度敏感,表明人类写作风格的多样性仍是泛化能力面临的主要挑战。
- 该数据集包含 2,231 个训练样本和 485 个测试样本,另有 16,410 个未标注样本可用于预训练和数据增强。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。