Skip to main content
QUICK REVIEW

[论文解读] Automated Correction for Syntax Errors in Programming Assignments using Recurrent Neural Networks

Sahil Bhatia, Rishabh Singh|arXiv (Cornell University)|Mar 19, 2016
Software Engineering Research参考文献 19被引用 71
一句话总结

本文提出一种基于循环神经网络(RNN)的方法,通过从正确学生提交代码中学习有效标记序列,自动为学生编程作业中的语法错误生成修复建议。该方法在来自edX MOOC的超过14,000个含错误的提交中,实现了31.69%的完全修复率和6.39%的部分修复率,证明了使用深度学习解决自动化反馈系统中此前被忽视的一类错误的可行性。

ABSTRACT

We present a method for automatically generating repair feedback for syntax errors for introductory programming problems. Syntax errors constitute one of the largest classes of errors (34%) in our dataset of student submissions obtained from a MOOC course on edX. The previous techniques for generating automated feed- back on programming assignments have focused on functional correctness and style considerations of student programs. These techniques analyze the program AST of the program and then perform some dynamic and symbolic analyses to compute repair feedback. Unfortunately, it is not possible to generate ASTs for student pro- grams with syntax errors and therefore the previous feedback techniques are not applicable in repairing syntax errors. We present a technique for providing feedback on syntax errors that uses Recurrent neural networks (RNNs) to model syntactically valid token sequences. Our approach is inspired from the recent work on learning language models from Big Code (large code corpus). For a given programming assignment, we first learn an RNN to model all valid token sequences using the set of syntactically correct student submissions. Then, for a student submission with syntax errors, we query the learnt RNN model with the prefix to- ken sequence to predict token sequences that can fix the error by either replacing or inserting the predicted token sequence at the error location. We evaluate our technique on over 14, 000 student submissions with syntax errors. Our technique can completely re- pair 31.69% (4501/14203) of submissions with syntax errors and in addition partially correct 6.39% (908/14203) of the submissions.

研究动机与目标

  • 为大规模在线编程课程中语法错误缺乏自动化反馈的问题提供解决方案,此类错误占学生提交量的34%。
  • 开发一种无需依赖抽象语法树(AST)的修复技术,因为AST在程序格式错误时无法获取。
  • 利用大规模正确学生提交代码训练序列模型,以预测修复错误所需的语法正确标记序列。
  • 通过提供自动化、实时的反馈,提升编程教育的可及性和可扩展性。
  • 探索RNN在建模代码结构方面的潜力,以支持超越功能正确性的教学反馈。

提出的方法

  • 在给定编程作业的所有语法正确学生提交代码上训练循环神经网络(RNN),以学习有效标记序列的语言模型。
  • 对于存在语法错误的学生提交,将标记序列中错误位置之前的前缀作为RNN的输入,以预测纠正后的标记序列。
  • 通过在错误位置替换或插入预测的标记序列生成候选修复方案,再使用编译器验证以确保语法正确性。
  • 仅选择能使程序成功编译的修复方案,作为建议修复返回给学生。
  • 采用束搜索策略,探索多个高概率的标记序列预测,以提升修复覆盖率。
  • 将模型集成到可扩展至数千名学生提交的反馈处理管道中,适用于在线教育平台。

实验结果

研究问题

  • RQ1在正确学生代码上训练的序列模型,能否有效预测错误提交中语法错误的修复方案?
  • RQ2RNN-based语言模型在多大程度上能从真实学生实现中学习到有效代码序列的句法模式?
  • RQ3与传统编译器错误提示或基于AST的反馈系统相比,所提方法在修复语法错误方面的有效性如何?
  • RQ4该模型能否在入门级编程作业中泛化到多样的学生编码风格和错误模式?
  • RQ5仅依赖前缀上下文进行修复预测存在哪些局限性?未来模型如何引入未来上下文以提升准确性?

主要发现

  • 所提出的基于RNN的方法成功修复了31.69%(14,203份中的4,501份)存在语法错误的学生提交,展现出较高的实际应用价值。
  • 另有6.39%(14,203份中的908份)的提交实现了部分修复,表明该方法能够处理复杂或多重错误。
  • 模型性能显著受限于其仅依赖前缀上下文的特性,未能考虑未来标记,从而影响修复准确率。
  • 当前系统无法处理单个提交中的多个语法错误,因为修复一个错误可能使其他错误仍存在,需递归应用修复。
  • 即使语法正确,仍存在生成语义错误修复的风险,凸显未来扩展中需增加语义验证的必要性。
  • 该方法在edX、Coursera和Udacity等MOOC平台中具有强大的集成潜力,可显著扩展入门级编程课程的自动化反馈能力。

更好的研究,从现在开始

从论文设计到论文写作,大幅缩短您的研究时间。

无需绑定信用卡

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