Skip to main content
QUICK REVIEW

[论文解读] sk_p: a neural program corrector for MOOCs

Yewen Pu, Karthik Narasimhan|arXiv (Cornell University)|Jul 11, 2016
Software Testing and Debugging Techniques被引用 4
一句话总结

该论文提出 sk_p,一种用于 MOOC 的神经程序修正器,利用在正确 Python 程序上训练的 seq2seq 模型,生成并验证语法和语义错误的候选修复方案。其在 MOOC 作业上的修正率达到 29%,优于需要手动错误建模的最先进方法,通过数据驱动、生成式修正方式,无需符号分析或预定义搜索空间。

ABSTRACT

We present a novel technique for automatic program correction in MOOCs, capable of fixing both syntactic and semantic errors without manual, problem specific correction strategies. Given an incorrect student program, it generates candidate programs from a distribution of likely corrections, and checks each candidate for correctness against a test suite. The key observation is that in MOOCs many programs share similar code fragments, and the seq2seq neural network model, used in the natural-language processing task of machine translation, can be modified and trained to recover these fragments. Experiment shows our scheme can correct 29% of all incorrect submissions and out-performs state of the art approach which requires manual, problem specific correction strategies.

研究动机与目标

  • 为解决在 MOOC 中,特别是在入门级编程课程中,为学生错误程序提供准确、自动反馈的挑战。
  • 消除先前基于符号程序合成方法所需的、问题特定的手动错误模型。
  • 开发一种可扩展的数据驱动方法,利用大量正确学生提交代码的语料库,训练神经模型以实现程序修正。
  • 通过生成模型从可能的修正中采样,而非枚举庞大的搜索空间,实现实时、快速的修正。
  • 证明在 MOOC 程序修正背景下,一个简单、局部的语法模型可优于更复杂的语义感知模型。

提出的方法

  • 在正确学生程序的标记化语句上训练修改后的 seq2seq 神经网络,以学习常见代码片段。
  • 使用类似 skipgram 的上下文窗口——仅在错误位置前后各一个语句——进行局部生成候选修正。
  • 通过从模型学习到的可能修正分布中采样,为每个错误语句生成候选程序。
  • 使用手工编写的测试套件对每个候选程序进行验证,以检查正确性,采用枚举与检查相结合的策略。
  • 利用模型的生成特性,避免定义和排序庞大显式补丁搜索空间的需求。
  • 在正确程序语料库上端到端训练模型,正确性通过与验证阶段相同的测试套件进行验证。

实验结果

研究问题

  • RQ1一个纯粹基于语法、局部的神经模型是否能在无需符号分析的情况下,有效修正学生程序中的语法和语义错误?
  • RQ2数据驱动的生成式方法在多大程度上能超越需要手动指定错误模型的符号方法?
  • RQ3最小上下文(前后各一个语句)是否足以在 MOOC 中实现准确的程序修正?
  • RQ4在正确程序上训练的模型是否能泛化到修复与任何训练样本都不完全匹配的错误程序?
  • RQ5在真实 MOOC 环境中,神经修正系统的性能与最先进的符号方法和基于聚类的方法相比如何?

主要发现

  • sk_p 在 MITx 的 6.00x 课程中 7 个 Python 编程作业上,修正了所有错误学生提交代码的 29%。
  • 在 3 个共享基准上,sk_p 的平均准确率达到 35%,略高于最先进自动评分系统(Autograder)的 30% 准确率,后者依赖手动错误建模。
  • 系统每份提交的平均运行时间为 5.6 秒,证明其在 MOOC 反馈中具备实时可行性。
  • 该模型成功识别并修正了非平凡的语义错误,例如错误的循环结构,通过生成语义上有效的替代方案。
  • 该方法发现了“新颖”的修正——即训练集中不存在的有效修复方案——证明其泛化能力超越了简单的模板匹配。
  • 尽管结构简单且缺乏语义分析,该局部、基于标记的模型仍表现出具有竞争力的性能,表明 MOOC 代码中的语法模式对修正具有高度预测性。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。