跳转至

Automated Knowledge Component Generation and Interpretable Knowledge Tracing in Coding Problems

会议: ACL2026 Findings
arXiv: 2502.18632
代码: https://github.com/umass-ml4ed/kcgen-kt
领域: 教育AI / 知识追踪
关键词: Knowledge Component, Knowledge Tracing, 编程教育, LLM, 可解释学生建模

一句话总结

这篇论文用 LLM 自动为开放式编程题生成和聚类 Knowledge Components,并提出 KCGen-KT 将学生在每个 KC 上的掌握度转成 soft token 输入 Llama 3,在 CodeWorkout 和 FalconCode 上同时提升正确率预测与学生代码生成。

研究背景与动机

领域现状:知识追踪需要估计学生对细粒度知识点的掌握情况,常依赖 Knowledge Components 作为技能标签。传统 KC 通常由教师或领域专家编写,并手工标注到题目上。

现有痛点:人工 KC 设计成本高、容易有偏差,而且开放式编程题比选择题更难标注。一个编程题可能有多种正确解法,不同解法涉及不同技能;学生错误也多样,不能像多选题那样只看固定选项。

核心矛盾:知识追踪模型需要细粒度、可解释、可迁移的 KC;但越细粒度的 KC,人工设计和标注越昂贵。现有自动 KC 生成多集中在多选题,对开放式学生代码提交支持不足。

本文目标:作者希望用 LLM 自动生成编程题所需 KC,并让这些自然语言 KC 描述直接帮助知识追踪模型预测学生未来答题正确性和代码提交,同时保留“学生在哪些 KC 上掌握较弱”的解释。

切入角度:论文把 KC 生成和 KT 建模连成一个闭环:先用学生真实正确代码帮助 LLM 找出题目技能,再把技能描述和学生 mastery 作为 LLM 输入的一部分,用于预测下一次作答。

核心 idea:用 LLM 生成可读 KC,用聚类控制抽象层级,再把每个学生对 KC 的掌握程度投影成可微 soft text tokens,使 LLM-based KT 同时获得语义知识和可解释学生状态。

方法详解

整体框架

方法分两段、连成一个闭环。第一段是自动 KC 生成与标注 pipeline:对每道编程题采样多样化的正确学生提交,提示 GPT-4o 生成必要的 KC,再用 Sentence-BERT embedding + 层次凝聚聚类把相似 KC 合并,最后让 GPT-4o 给每个 cluster 命名并把题目映射到 cluster,得到 Q-matrix。第二段是 KCGen-KT 模型:它为每个学生维护一份「在各 KC 上的 mastery 向量」,把 mastery 值转成 soft token,连同下一道题的题面和 KC 描述一起喂给 Llama 3,同时预测「下一次作答是否正确」和「学生可能提交的代码」。

%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400, 'subGraphTitleMargin': {'top': 8, 'bottom': 16}}}}%%
flowchart TD
    A["编程题 + 学生提交"] --> S1
    subgraph S1["LLM-based KC 生成与聚类"]
        direction TB
        B["CodeBERT 聚类采样多样化正确解法"] --> C["GPT-4o 生成 KC<br/>(思维链 + few-shot 示例)"]
        C --> D["Sentence-BERT + 层次凝聚聚类<br/>控制抽象层级"]
        D --> E["GPT-4o 命名 cluster → Q-matrix"]
    end
    S1 --> S2
    subgraph S2["KC Mastery Soft Token 转换"]
        direction TB
        F["LSTM 更新知识状态 h_t"] --> G["线性层 + sigmoid<br/>→ mastery 向量 m_t"]
        G --> H["插值 true/false 嵌入<br/>→ soft token s_t"]
    end
    S2 --> I["Llama 3<br/>(题面 + KC 描述 + mastery soft token)"]
    subgraph S3["多任务 KT 目标与可解释正则"]
        direction TB
        J["正确性预测"]
        K["学生代码生成"]
        L["KC mastery 正则"]
    end
    I --> J
    I --> K
    I --> L

关键设计

1. LLM-based KC Generation and Clustering:从多样化正确解法里抽出可读且粒度可控的 KC

开放式编程题没法像选择题那样标注——同一题有多种正确思路,只看题干或单个解法会漏掉必要技能,而让 LLM 自由生成又容易产出过细、重复、不可泛化的 KC。本文的做法是先用 CodeBERT embedding 给正确学生代码聚类,从不同代码簇里采样代表性解法(兼作 few-shot 示例),让 GPT-4o 用思维链基于题目和这些多样解法生成 KC;再用 Sentence-BERT 把 KC 描述向量化,经层次凝聚聚类(Hierarchical Agglomerative Clustering, HAC)合并相似技能,最后由 GPT-4o 给每个 cluster 命名、并把题目映射到 cluster 标签得到 Q-matrix。聚类这一步正是用来控制抽象层级,把 LLM 容易发散的细碎技能收敛成稳定、可复用的 KC 集合。

2. KC Mastery Soft Token Conversion:把连续的掌握度接进 LLM 的文本空间

LLM 擅长读文本描述,但学生对某个 KC 的「掌握程度」是个连续值,没法当普通文本 token 直接输入。模型先用 LSTM 更新一个 512 维学生知识状态 \(h_t\),经线性层 + sigmoid 得到 \(k\) 维 mastery 向量 \(m_t\in[0,1]^k\);对第 \(j\) 个 KC,用 \(s_t^j=m_t^j\cdot emb^{true}+(1-m_t^j)\cdot emb^{false}\) 把掌握度插值成一个 soft token。这个 soft token 既保留了「掌握多少」的连续信息、又可微,于是 mastery 状态就能端到端融进 LLM 的表示空间,而不必离散化丢信息。

3. 多任务 KT 目标与可解释正则:让预测准的同时,画像也讲得通

光优化预测精度,学到的 hidden state 可能完全不可解释。KCGen-KT 同时挂三个目标:正确性预测拿 Llama 3 的 hidden states 做 sigmoid 分类,代码预测让 Llama 3 token-by-token 生成学生代码,再加一条 KC 正则——用相关 KC mastery 的平均值去预测正确性,强行把「KC 掌握度高 ↔ 答对概率高」绑在一起。总损失为 \(\mathcal{L}_{KCGen-KT}=\lambda(\mathcal{L}_{CodeGen}+\mathcal{L}_{CorrPred})+(1-\lambda)\mathcal{L}_{KC}\)。这条 KC loss 是可解释性的关键:它逼着 mastery 向量真正对应教育意义上的「学生在哪些技能上弱」,而不是退化成一堆只为拟合的黑箱数字。

损失函数 / 训练策略

训练目标三部分:正确性预测的 BCE loss、代码生成的 token-level 负对数似然、以及 KC mastery 与正确性之间的 BCE 正则。模型基于 instruction-tuned Llama 3 8B,用 LoRA 微调 + 8-bit 量化;KCGen-KT 里 Llama 3 学习率 1e-5、LSTM 5e-4、mastery 线性层 1e-4。实验在 5 个随机 train-validation-test split 上重复。

实验关键数据

主实验

两个数据集都是真实开放式编程提交:CodeWorkout 包含 246 名学生、50 道 Java 题和 10,834 次 first submissions;FalconCode 包含 3,267 名学生、157 道 Python 题和 28,617 次 first submissions。

数据集 方法 AUC F1 Accuracy CodeBLEU
CodeWorkout Code-DKT 0.766 0.672 0.724 -
CodeWorkout TIKTOC* 0.788 0.666 0.726 0.507
CodeWorkout KCGen-KT (Human KCs) 0.797 0.706 0.727 0.557
CodeWorkout KCGen-KT (Generated KCs) 0.816 0.727 0.746 0.580
FalconCode Code-DKT 0.709 0.552 0.617 -
FalconCode TIKTOC* 0.728 0.585 0.633 0.427
FalconCode KCGen-KT (Human KCs) 0.752 0.599 0.700 0.473
FalconCode KCGen-KT (Generated KCs) 0.771 0.645 0.712 0.498

LLM 生成 KC 在两个数据集、正确性预测和代码生成任务上都超过人工 KC,且论文报告相对基线提升具有统计显著性(p < 0.05)。

消融实验

配置 AUC F1 Accuracy CodeBLEU 说明
KCGen-KT 0.812 0.723 0.724 0.569 CodeWorkout 消融基线
w/o Correct Sol. 0.789 0.674 0.704 0.529 不给正确学生解法,KC 不完整
w/ Incorrect Sol. 0.773 0.651 0.700 0.516 加错误解法反而引入噪声
w/o KC Loss 0.791 0.680 0.709 0.540 可解释 mastery 正则有贡献
w/o ICL Ex. 0.782 0.677 0.705 0.539 少了示例后 KC 更抽象、效果下降
Code → AST 0.784 0.691 0.715 0.546 AST 表示不如原始代码文本
Generated Code 0.807 0.706 0.721 0.557 LLM 生成解法不如真实学生代码多样

关键发现

  • KC 抽象层级不能过高。CodeWorkout 中 50 个中等粒度 clusters 取得 0.816 AUC、0.727 F1、0.746 Accuracy、0.580 CodeBLEU;压到 10 个高层 KC 后降到 0.794/0.683/0.708/0.557。
  • 真实正确学生提交很重要。去掉 correct submissions 或改用 LLM generated code 都会让 KC 覆盖变差,因为真实学生解法包含更丰富的策略多样性。
  • Human evaluation 也支持生成 KC 的质量:LLM-generated KCs 的可解释比例为 98.6%,高于 baseline KCs 的 94.6%;KC mapping precision 为 93.2%,baseline 为 92.5%;recall 比较中生成 KC 在 96% cases 被认为覆盖相等或更高。
  • 学习曲线分析显示 LLM-generated KCs 更符合 power law of practice:加权 \(R^2\) 为 0.21,高于 human-written KCs 的 0.18。

亮点与洞察

  • 这篇论文的关键不是“用 LLM 打标签”这么简单,而是把标签变成下游 KT 模型真的可用的语义输入,并通过 soft token 保持端到端可训练。
  • 采样多样化正确代码是很聪明的设计。开放式编程题的技能集合不只由题干决定,还由可行解法空间决定;真实学生代码比标准答案更能暴露这种空间。
  • 生成 KC 反超人工 KC 的结果很有意思:人工标签可能过粗或命名体系旧,而 LLM 能生成更自然、更函数级的技能描述,反而更适合 LLM-based KT。

局限与展望

  • KC 生成依赖 in-context examples;没有人工示例时,zero-shot 生成会偏抽象,难以得到低层级技能。
  • 多 KC 题目缺少可靠 ground-truth 标注,当前 KC correctness labeling 仍需要更多验证。
  • 实验限于计算机科学教育,尤其是 Java/Python 编程题;迁移到数学、科学、对话式教学等领域仍需验证。
  • 人类评估证明了 KC 可解释和 mapping 质量,但最终价值还要看是否真的改善学生学习结果,需要课堂部署或 A/B 测试。

相关工作与启发

  • vs Code-DKT: Code-DKT 利用学生代码内容做知识追踪,但缺少自然语言 KC 语义和显式 mastery 解释;KCGen-KT 同时使用代码、题目和 KC 描述。
  • vs TIKTOC: TIKTOC 也用 Llama 3 做生成式 KT,但不显式建模 KC 掌握度;KCGen-KT 的优势来自 KC 语义和 KC loss。
  • vs 人工 KC 标注: 人工 KC 成本高且粒度可能不适配下游模型;LLM-generated KCs 在本实验中预测表现和可解释评估都更好。
  • 启发: 教育场景中的 LLM 不应只作为答案生成器,也可以作为“知识结构生成器”,帮助构建可解释学生模型。

评分

  • 新颖性: ⭐⭐⭐⭐ 自动 KC 生成已有相关方向,但与 soft-token LLM KT 结合得比较新颖。
  • 实验充分度: ⭐⭐⭐⭐⭐ 两个真实数据集、多个强基线、抽象层级分析、消融、人评和学习曲线都很扎实。
  • 写作质量: ⭐⭐⭐⭐ 方法链条清楚,教育动机和模型细节都解释到位。
  • 价值: ⭐⭐⭐⭐⭐ 对编程教育、智能 tutoring 和可解释知识追踪都有很强实用价值。