利用基于模式的知识组件从学生代码提交中生成个性化工作示例
Personalized Worked Example Generation from Student Code Submissions using Pattern-based Knowledge Components
论文信息
标题: 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
3 分钟速览
研究问题 这篇论文要解决编程教学中,如何根据学生提交的代码自动生成个性化且针对性强的 “样例”(worked examples)的问题。传统方法依赖固定题库或通用生成,难以精确匹配学生的具体逻辑错误。
核心方法 作者从学生代码的抽象语法树中,通过注意力网络和聚类技术提取出 “模式型知识组件”(pattern-based KCs),然后将这些代表学生薄弱点的 KC 作为约束条件,指导大语言模型生成针对性的代码示例和解释。
关键结果 专家评估显示,相比未使用 KC 指导的基线模型,加入知识组件的生成式样例在学生相关性评分上提高了 22%,差异具有统计显著性 (,见表 2)。
主要局限 生成质量高度依赖于 KC 发现管道的准确性和粒度。当一个学生提交映射到多个 KC 目标时,模型有时无法清晰涵盖所有目标,可能导致步骤结构略显拥挤(论文 4.2 节)。
适合读者 对人工智能教育(AIED)、编程教学自动化、学习@规模(L@S)以及大语言模型个性化内容生成感兴趣的研究者、教育技术开发者和计算机科学教育者。
论文背景和研究动机
在入门编程课程中,编样例是一种核心教学活动。它通过展示相似问题、正确代码及逐步解释,帮助学生建立程序思维。认知负荷理论指出,精心设计的样例能够将中间步骤外显化,减少初学者不必要的推理负担,从而更有效地学习。然而,制作高质量的样例既昂贵又耗时。教师需要构建正确解、切分逻辑步骤、撰写清晰且符合初学者认知水平的解释。即使有大型题库,要从中找到与特定学生当前遇到的困难、逻辑错误和技能水平精确匹配的样例,依然极具挑战性。
另一方面,大语言模型为按需生成样例提供了可能。已有研究表明,LLM 生成的样例具有合理的结构和清晰的解释,学生也认为它们有帮助。但过往方法普遍缺乏对学习者差异的深度适应:它们可能引入新手不熟悉的概念,或者未能直接针对学生代码中反映出的具体误解。例如,一个学生因运算符优先级理解有误而出错,但系统可能只生成一个关于循环的通用程序样例,错失了修正其核心误解的教学时机。为了解决这一精准性不足的问题,本研究提出将 LLM 生成与一种能捕捉学生代码中具体逻辑模式的知识组件结合起来。
核心方法和技术细节
本研究的核心思路是,用从学生代码中自动提取的 “模式型知识组件” 作为桥梁,连接学生的错误与 LLM 生成的教学内容。整个方法分为三个主要阶段。
1. 模式型知识组件的发现与标注
这一阶段利用了已有工作(Hoq et al., 2025b)提出的管道。首先,系统将学生的 Java 程序解析为抽象语法树,并提取出各种候选子树。一个名为 SANN 的神经网络会学习预测程序是否正确,并为每个子树分配注意力权重,从而识别出对程序对错影响最大的关键结构。例如,在图 1 的案例中,模型会高亮显示 if (i == 0 && nums[i] == 5 || nums[i] == 5 && nums[i-1] != 4) 这类结合了 && 和 || 的复杂条件判断子树。
接着,系统对这些高注意力子树进行标准化处理,将变量名、常量等替换为占位符,以提取其逻辑骨架。然后,一个变分自编码器学习这些标准化子树的向量表示,并对正确提交中的子树向量进行 K 均值聚类。这样,每个簇代表了一类在正确代码中反复出现的编程模式,构成了一个 KC。最后,任何学生提交中的高注意力子树都会被映射到最近的簇,从而为该生打上一组 KC 标签。为了让这些标签能被 LLM 理解,研究者还增加了一个步骤:利用 GPT 模型为每个 KC 生成简短的人类可读标签和一句话描述,例如 “布尔运算符优先级:学生在一个条件中混合使用&&和||但未加括号,导致其真实意图可能与 Java 的求值顺序不符”。
2. KC 条件下的样例生成
研究者为每个学生提交生成两个编辑样例版本。首先,他们构建了一个共享的提示词模板,设定 LLM 扮演编程入门导师的角色,任务是:根据问题陈述和学生代码,推断学生的困难点,并为一个 “类似但不同” 的新问题生成编辑样例,其中包含 3-10 个代码与解释配对的步骤。在基准版本中,提示词仅包含问题和学生代码。在 KC 条件下,提示词则额外提供了上一步提取出的所有 KC 标签及其描述,并明确指示 LLM 需将这些 KC 作为约束,来推断学生的逻辑错误,并确保生成的样例代码和解释必须涵盖和练习这些 KC 目标。所有生成的样例均使用 GPT-5.2 模型。
3. 专家评估
两位专家根据一份改编的量规,对总共 200 个生成的样例(100 个基准, 100 个 KC 条件)进行了双盲评估。量规包含五个核心维度:格式合规、解释清晰度、代码正确性、步骤结构合理性,以及与学生(基于其提交)的相关性。对于 KC 条件下的输出,额外增加了一个 “KC 覆盖率” 指标,用于评判提供的 KC 目标是否在样例代码和解释中得到了明确体现。
创新点和贡献
本研究主要有三大创新和贡献。首先,它提出了一种新颖的个性化内容生成框架,将可解释的学生认知状态(KC)作为生成式 AI 的直接约束条件。与通用提示或简单的技能水平分级不同,该方法利用从代码中挖掘的具体模式来引导学生建模。其次,研究将抽象语法树模式发现技术,实用化为一个端到端的个性化内容生成管道。整个过程从代码分析到 KC 提取、自然语言标注,最后再到条件生成,实现了自动化。最后,研究通过严格的专家评估,为这种 “以学生代码模式为靶点” 的生成策略提供了有效性的实证证据。
实验结果分析
实验结果直接回应了两个研究问题。
针对RQ1(质量与相关性),KC 引导的生成样例在 “学生相关性” 上取得了显著提升,平均分从基线的 1.67 提升至 1.89,证明其更准确地命中了学生提交中暗示的逻辑错误。同时,在 “解释清晰度” 上也有提高(1.81 vs. 1.94, ),说明针对 KC 的解释让内容对新手更友好。在格式和正确性上,两者均表现优异,无显著差异(见表 2)。这表明,KC 约束在显著增强针对性的同时,并未牺牲内容的基本质量和准确性。但一个值得注意的权衡是,KC 条件下的输出在 “步骤结构” 上分数略有下降(1.99 vs. 1.94, ),趋势性的不显著。这可能是由于 LLM 试图将多个 KC 塞入少数几个步骤中,导致步骤边界变得模糊。
针对RQ2(KC 覆盖率),结果非常积极。KC 覆盖率评分均值高达 1.92,92% 的样例完全满足了 “在代码和解释中明确涵盖所有 KC” 的标准。仅有 8 例为部分覆盖,主要是当学生提交映射到多个 KC 时,生成的样例可能只重点解释最核心的一个,而对其他 KC 仅简要提及。图 1 展示了一个成功案例,其中来自学生代码的 “布尔运算符优先级”KC,被明确地融入到一个新的计数问题中,并在步骤 3 的解释和代码注释里通过强制加括号的方式被重点澄清和练习。
实践建议
对于想要应用或改进此类系统的开发者和教育者,建议如下:
- 构建学生认知画像的管道:利用 AST 分析自动从学生代码中挖掘高频、高注意力的模式,这些模式是认知建模的宝贵信号。可以优先将注意力权重高的子树簇作为知识组件的候选,它们往往代表学生普遍挣扎或容易出错的关键知识单元。
- 设计精细的约束生成提示词:仅仅将 KC 标签放入提示词可能不够。从研究中 “步骤结构” 评分的轻微下降和部分 KC 覆盖不全的现象可知,提示词需要包含更强的约束指令。例如,明确要求 “为每个 KC 目标至少分配一个独立的、有明确边界的步骤”,并 “在解释中显式引用 KC 标签和对应代码行”,以防止模型将所有内容杂糅在一起。
- 建立 KC 优先级的决策机制:当学生代码触发多个 KC 时,简单的堆砌式提示可能使模型顾此失彼。一个实用的策略是,在主提示词之前加入一个排序步骤。可以根据子树的注意力权重高低或 KC 与学生错误代码的关联紧密度,为 KC 设定优先级,并指示模型 “优先处理权重最高的 KC,在主要步骤中深度讲解,其余 KC 可在辅助步骤中提及”。这能有效缓解多目标导致的生成质量下降问题。