基于模式知识组件从学生代码提交中生成个性化工作示例
论文信息
标题: Personalized Worked Example Generation from Student Code Submissions using Pattern-based Knowledge Components
作者: Griffin Pitts, Muntasir Hoq, Peter Brusilovsky, et al.
发布日期: 2026-04-27
arXiv ID: 2604.24758v1
PDF链接: 下载PDF
研究背景与动机
在编程教育领域,自适应练习系统已成为提升学习效率的关键工具,其核心在于为学生提供与当前理解水平相匹配的教学内容。然而,现有系统大多依赖由领域专家预先编写并固化的样例库与练习库。这类“一刀切”式的资源存在两大痛点:其一,创建和维护高质量样例需要巨大的人工投入,难以覆盖学生可能产生的全部逻辑错误和中间方案;其二,学生提交的部分正确或含有典型错误的代码,往往无法直接对应到库中已有的样例,导致系统只能给出泛泛的反馈或跳转至关联度较低的教学内容。当教师无力持续扩充资源库时,他们只能接受一种粗粒度的个性化,学生接收到的学习内容无法精准连接他们正在攻克的概念难点。
知识组件(Knowledge Components,KC)是自适应学习系统中的经典抽象,它将特定领域的知识或技能拆解为可追踪的原子单元。传统KC多由人工定义,例如“for循环的边界条件判断”“数组索引从0开始”等,这使得KC体系的构建仍然高度依赖专家、迁移性差。近年来的研究表明,直接从学生数据中自动挖掘KC,尤其是基于结构模式的KC,能更真实地反映学生在代码中表现出的理解偏差与常见误区。本文正是在此脉络下,提出一套从学生代码提交中抽取“模式化知识组件”,并用其驱动生成模型,以自动生成个性化工作样例(worked example)的方法。工作样例作为展示完整解题步骤和推理过程的教学内容,对初学者构建正确心智模型至关重要。论文的动机是:能否让机器从学生错误中“读懂”他们缺失或混淆的KC,并据此自动生成针对性强的样例,从而实现大规模、低成本的个性化学习支持?
核心方法:从代码到模式,从模式到样例
该论文提出的流水线由两个关键模块构成:基于抽象语法树(AST)的模式化KC抽取,以及以KC为条件的生成模型。整个过程以一道编程题目及其所有学生提交代码为输入,最终输出的是为不同学生群体定制的工作样例。
基于AST的模式化KC抽取
程序代码天然具有结构化的语法,AST能够剥除变量命名、空白格式等表层差异,保留程序的骨架结构。研究者首先将每位学生的提交代码解析为AST,然后通过子树挖掘或频繁子图发现技术,寻找在多个提交中反复出现的结构模式。例如,在一道循环累加的题目中,许多学生的错误可能表现为“循环体内缺少更新累加变量的语句”,这在AST上体现为一个for语句节点下缺失某个赋值子树的模式。另一种常见的部分解决方案模式是“只实现了循环结构但累加初值设置错误”,AST会反映出二叉树结构的特定形态。
这些频繁出现的子树模式会被聚类并精炼为知识组件。具体而言,一个模式可能对应于一个典型错误(如“遗忘更新”),也可能对应学生已部分掌握的、非最优但可运行的中间方案(如“使用多重if代替循环”)。该过程完全自动,无需人工标注KC标签,且能捕捉到连教师都未必预想到的微妙错误模式。抽取到的KC可附带自然语言描述,如将模式转换为“在循环内未改变变量值”之类的可读短语,以便后续生成模型理解。
KC条件驱动的样例生成
获得学生代码中隐现的KC后,下一步是让生成模型依据这些KC产生对应的工作样例。研究者采用的生成模型架构并未在原摘要中详细披露,但可以推知是一种可接受条件输入的大型语言模型或编码器—解码器模型。该模型在设计上接收两部分信息:一是问题陈述本身,为生成内容划定问题域;二是从学生提交中提取出的、与该学生最相关的KC集合,作为聚焦主题的“舵盘”。
生成过程的关键在于如何将结构化KC“注入”模型。一种可能的做法是将KC转化为提示文本(如“请生成一个解释为何循环变量在循环体内未被正确更新的工作原理示例”),并将其与问题陈述拼接,再送入预训练语言模型进行生成。另一种更精细的方案是使用软提示或适配器模块,把KC嵌入到高维向量空间,与模型的隐含状态交融,实现更平滑的条件控制。无论哪种实现,目标都是让模型在生成工作样例时,不仅覆盖问题本身的解法,更要突出对特定逻辑错误的解析和对比,使样例直接回扣学生遇到过的问题。
论文对比输出时设置了基线条件:一种是不使用KC的纯粹基于问题陈述的生成;另一种可能是使用随机或通用KC的生成。通过专家评估,KC条件生成的样例在“主题聚焦度”和“与学习者潜在逻辑错误的相关性”两个维度上均表现出优势。这表明,结构模式中蕴含的信息能有效为生成模型导航,使其产出的内容从原本较宽泛的正确解法展示,变为更贴近学生认知痛点的、具有靶向解释性质的工作样例。
创新点与贡献
本研究的创新之处体现在三个层次。
第一,将KC的获取从人工定义推向了完全自动的数据驱动范式。过去基于代码的KC常依赖于教师的经验性标注或对正确答案的规则拆解,本条流水线通过AST级别的频繁模式挖掘,不仅省去了人力,还能发现那些隐性、非直觉的错误模式集合。这使得KC的粒度更贴合真实学习轨迹。
第二,首次将模式化KC作为生成式教育内容的控制条件。以往的编程教学生成多聚焦于利用题目描述产生解答或反馈,但并未显式利用学生错误中隐含的知识结构去调节生成方向。论文证明,以KC为条件的生成能显著提升生成样例的针对性和教学相关性,为生成式人工智能在自适应教育领域的落地开辟了新的接口。
第三,构建了从大规模代码数据中提取KC并即时驱动内容生成的闭环框架。该框架理论上可部署到任何在线编程评测平台,持续从新提交中更新KC库,并动态生成个性化样例,使得系统能够在不依赖人工扩充图书馆的情况下维持高度的个性化覆盖,真正迈向“规模化个性化学习”。
实验结果分析
论文采用专家评估而非自动化指标来评测生成质量,这是教育内容生成的合理选择,因为样例的教学适切性难以用BLEU或ROUGE等机器翻译指标简单度量。评估邀请了具有编程教学经验的专家,从几个维度对比基线模型和KC条件模型的输出:主题聚焦度(生成内容是否紧密围绕某个明确的知识点)、对逻辑错误的针对性(能否直击学生提交中显现的特定误解)、清晰度和教学有效性等。
结果表明,KC条件生成的样例在这些维度上获得了一致更高的评分。尤其值得注意的是,在实际学生错误模式的指引下,样例不再只是展示“正确解法”的静态文本,而是能够包含“常见错误对比分析”“为什么某条路径行不通”等元素,这与学习科学中提倡的“错误样例”教学策略不谋而合。基线模型常常生成一个泛化的标准解答,而KC条件模型生成的样例则更有可能讨论循环边界条件混淆、变量作用域误用等紧扣学生代码事实的主题。这种细微但关键的差异,正是专家判定其更“相关”和“聚焦”的根源。
研究也暴露出一些局限性:评估样本量有限,且与真实学生学习效果的结合尚属空白。此外,对于某些极为稀疏的模式,其提取的KC可能不可靠,进而影响生成质量。但总体而言,实验结果提供了有力的原理性证据,支持KC引导生成的方向。
实践应用建议与未来方向
对于在线编程学习平台和智能辅导系统,这项研究提供了可操作的落地路径。
即时反馈生成: 在学生提交代码后,系统可实时解析其AST并与当前KC库匹配,选出最能解释其可能的错误模式的KC,然后用生成模型产生简短的工作样例或提示,嵌入到反馈界面中。这比仅显示“答案错误”或直接展示标准答案更能促进学生的自我解释和深层理解。
题库动态扩展: 教育者可以利用该框架半自动生成扩题库。系统先自动生成一批样例,教师只需做筛选和微调,极大降低内容开发成本。同时,通过持续收集学生提交,KC库会演化,使样例能覆盖更新、更细粒度的知识点。
结合学习路径推荐: 可为每位学生建立KC掌握图谱,当发现某个KC长期处于未掌握状态,便动态生成一系列由浅入深的工作样例,形成一条针对性微学习路径。
未来研究可以在多个维度展开。一是引入更复杂的KC表示,例如将逻辑错误与程序执行语义相结合,使用符号执行或数据流分析来增强模式描述,使生成模型能产出包含动态执行对比的样例。二是升级生成模型,采用最新的大语言模型(如代码领域的Code Llama、StarCoder等),并探索在条件嵌入中融入对正确解法的对比信息,强化样例中的“纠错”属性。三是开展受控的用户实验,测量学生在实际学习中的概念掌握度、迁移能力及保持率,验证学习科学层面的有效性。此外,还可以扩展到多语言、多范式场景,并探究如何将KC生成与自动程序修复(APR)技术相融合,为学生生成同时包含修复建议和原理讲解的综合内容。
总结与展望
这篇论文为个性化编程教育内容生成开辟了一条新路:通过挖掘代码结构模式自动提炼知识组件,并以此为条件驱动生成模型,实现了从“为学生生成解答”到“针对学生思维生成教学”的质变。它巧妙地融合了教育数据挖掘与生成式人工智能,在降低专家依赖的同时,使个性化学习能够真正规模化。
展望未来,随着教育大模型与细粒度学习分析技术的持续演进,类似的方法将有可能从编程教育拓展至数学证明、工程设计等更多结构化问题领域。当生成模型不仅知道“正确答案是什么”,更能从学生的错误痕迹中读出“为什么错了”时,教育人工智能就向真正的因材施教迈出了坚实一步。这项研究正是这方向上一个明亮而务实的路标。