利用基于模式的知识组件从学生代码提交中生成个性化工作示例

Personalized Worked Example Generation from Student Code Submissions using Pattern-based Knowledge Components

arXiv: 2604.24758v1

论文信息

标题: 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%,差异具有统计显著性 (p=0.001p = 0.001,见表 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, p=0.027p=0.027),说明针对 KC 的解释让内容对新手更友好。在格式和正确性上,两者均表现优异,无显著差异(见表 2)。这表明,KC 约束在显著增强针对性的同时,并未牺牲内容的基本质量和准确性。但一个值得注意的权衡是,KC 条件下的输出在 “步骤结构” 上分数略有下降(1.99 vs. 1.94, p=0.076p=0.076),趋势性的不显著。这可能是由于 LLM 试图将多个 KC 塞入少数几个步骤中,导致步骤边界变得模糊。

针对RQ2(KC 覆盖率),结果非常积极。KC 覆盖率评分均值高达 1.92,92% 的样例完全满足了 “在代码和解释中明确涵盖所有 KC” 的标准。仅有 8 例为部分覆盖,主要是当学生提交映射到多个 KC 时,生成的样例可能只重点解释最核心的一个,而对其他 KC 仅简要提及。图 1 展示了一个成功案例,其中来自学生代码的 “布尔运算符优先级”KC,被明确地融入到一个新的计数问题中,并在步骤 3 的解释和代码注释里通过强制加括号的方式被重点澄清和练习。

实践建议

对于想要应用或改进此类系统的开发者和教育者,建议如下:

  1. 构建学生认知画像的管道:利用 AST 分析自动从学生代码中挖掘高频、高注意力的模式,这些模式是认知建模的宝贵信号。可以优先将注意力权重高的子树簇作为知识组件的候选,它们往往代表学生普遍挣扎或容易出错的关键知识单元。
  2. 设计精细的约束生成提示词:仅仅将 KC 标签放入提示词可能不够。从研究中 “步骤结构” 评分的轻微下降和部分 KC 覆盖不全的现象可知,提示词需要包含更强的约束指令。例如,明确要求 “为每个 KC 目标至少分配一个独立的、有明确边界的步骤”,并 “在解释中显式引用 KC 标签和对应代码行”,以防止模型将所有内容杂糅在一起。
  3. 建立 KC 优先级的决策机制:当学生代码触发多个 KC 时,简单的堆砌式提示可能使模型顾此失彼。一个实用的策略是,在主提示词之前加入一个排序步骤。可以根据子树的注意力权重高低或 KC 与学生错误代码的关联紧密度,为 KC 设定优先级,并指示模型 “优先处理权重最高的 KC,在主要步骤中深度讲解,其余 KC 可在辅助步骤中提及”。这能有效缓解多目标导致的生成质量下降问题。