PEBG解读:预训练问题嵌入让知识追踪模型全面提升

发布时间:2026/10/21 10:14:56
PEBG解读:预训练问题嵌入让知识追踪模型全面提升 1. 为什么说问题嵌入是知识追踪最容易被低估的环节知识追踪Knowledge Tracing这个任务做智能教育的人都不陌生给定一个学生过去做过的题目序列和每次答题的对错模型要预测他接下来做某一道题时答对的概率。在线学习平台的智能推题薄弱点诊断功能底层基本都挂着这个模型。近几年主流方案是深度模型DKT、DKVMN、GKT 一路从 LSTM 演进到记忆网络和图网络把预测精度一点点往上推。但有个环节绝大多数论文是一笔带过的模型入口处的 question embedding 到底是怎么初始化的在大部分实现里它就是一张随机初始化的查表训练时靠损失函数倒灌的梯度慢慢调整。这样学出来的问题表示有两个天然毛病第一每个问题是一个独立 token它只能从自己那几条答题记录里学向量一个只被几十个学生做过的冷门题学出来的嵌入基本是噪声第二问题之间内在的语义关系比如这两题考同一个知识概念这两题经常在同一份练习里挨着出现在初始状态下完全没有体现。IJCAI 2020 上的这篇 PEBG 论文抓的就是这个容易被忽视的入口。它提出一套预训练框架在训练下游知识追踪模型之前先用全体学生的答题序列把问题嵌入学好然后再把这个训练好的嵌入矩阵作为初始值接入 DKT、DKVMN、GKT 这类主流模型。思路有点像 BERT 预训练帮助下游 NLP 任务但在教育数据上要做不少针对性的设计。这篇解读按我自己的阅读顺序来先讲清楚它到底解决了什么再拆解两个预训练任务然后看它怎么接进下游模型最后聊实验结论和我复现时踩过的坑。适合正在做知识追踪研究的同学也适合想在海量答题日志上做表征学习的算法工程师。2. 问题的根源随机初始化的嵌入层带不动知识追踪2.1 从 DKT 说起所有信息都从嵌入层进入模型DKT 的基本结构可以压缩成一句话把学生每一步的作答表示成一个 token塞进 LSTM或后来的 Transformer每一步输出一个当前知识状态向量再用这个向量预测下一步答对的概率。关键在第一步的表示上模型通常把 question ID 做 one-hot乘一个可训练的嵌入矩阵得到这道题的向量做得讲究一点的会把这道题关联的知识概念KC也做成向量拼进去。说白了这个嵌入矩阵是整个模型的输入大门后面的注意力、记忆读写、图传播都是在这个表示上做变换。如果门后面的向量本身是乱的模型结构再厉害也救不回来。2.2 随机初始化带来三个具体麻烦第一是稀疏问题。知识追踪场景里题目分布极其长尾一小部分高频题被反复做大部分题目只有零星几次作答。随机初始化的嵌入统计量不足梯度更新稀稀拉拉这些低频题的向量基本停在初始状态附近等于一个几乎随机的位置。第二是缺结构。随机初始化的嵌入空间没有任何几何意义。考同一个知识点的两道题它们的向量可能天各一方而经常在同一次作业中出现的题向量也未必靠近。下游模型要纯粹靠梯度把这种结构撞出来很费样本。第三是冷启动。新题出现时模型没见过它嵌入只能随便初始化。尤其在自适应学习系统里新题恰恰是最需要预测能力的——系统想用历史数据推断新题难度和考察点随机初始化等于放弃了这种迁移能力。2.3 已有补救办法为什么不够彻底有人会想那直接用概念 ID 不就行了BKT 这类概念级模型确实是这么干的但它把同一概念下的所有题当成同一个状态丢失了题目之间的难度差异和题型差异。也有人把 question 和 concept 的嵌入拼接起来一起训练但这只解决知道概念的问题解决不了共现关系而且拼进去的那部分仍然是随机初始化的。GKT 稍微进一步它显式建模概念之间的关系图但这个图往往来自专家标注或者知识结构先验覆盖面有限而且它建模的粒度是概念不是题目。PEBG 的核心观点很直接与其在嵌入上打补丁不如单独搞一个预训练阶段把题目级别的嵌入一次性学透。3. PEBG 的核心思路先把问题嵌入预训练好再训练下游模型3.1 预训练在 KT 场景有什么特殊之处PEBG 的设计者显然从 BERT 那套范式里借了东西但知识追踪有自己的特殊性不能照搬。NLP 里预训练一个词向量靠的是海量文本里词和词的共现关系。知识追踪里对应的海量文本就是全体学生的答题序列——每个学生的做题顺序本身就是一条天然的语料。学生在学习路径上不会随机乱做题他们通常先做基础题再做综合题错题之后会被系统推相似题巩固这些模式都被隐式地记录在序列顺序里。所以把答题序列当成句子来做自监督学习是可行的而且没有额外标注成本。这里和 BERT 最大的区别在于教育领域还有一类特别宝贵的结构化信息——每道题标注了它考察哪些知识概念。这是天然的弱标签可以用来引导嵌入去编码语义。NLP 里没有这种免费的全局标注所以 PEBG 相当于比 BERT 多了一个抓手。3.2 预训练语料怎么组织把答题序列当句子来用具体来说预训练阶段的输入是把每个学生的完整做题轨迹切成长度相近的窗口比如 200 步一段每步记录的是题目 ID 和答题对错。窗口之间可以设置 overlaps避免切断一个完整的学习片段。这里有个细节值得注意预训练不需要刻意筛选优质学生或者高分路径所有学生的轨迹都往里喂。因为预训练任务希望学到的是题目本身的表示而不是某个学生的能力水平样本越杂嵌入越能覆盖不同水平的学习行为模式。在实践里我甚至会刻意保证低频题在预训练语料里至少出现几次否则它们完全学不到上下文表征这一步对后面的冷启动效果影响很大。4. 两个预训练任务拆解知识概念预测与掩码问题预测4.1 任务一知识概念预测让嵌入学到考什么第一个预训练任务是知识概念预测。对序列里每一个问题模型要用它的上下文表示去预测这道题涉及的知识概念集合。因为一道题可能对应多个概念这本质是个多标签分类问题用 BCE 做损失。这个任务的设计意图很明确把概念信息直接压进问题嵌入。预训练完以后考同一个概念的两道题在向量空间里会自然靠拢因为它们要经过同一个分类头才能被正确预测。这种概念语义结构对下游模型极其有用尤其是对没见过的新题——只要知道新题考察的概念模型就可以把它放到概念簇的附近而不是扔到随机点。在实现层面概念预测可以只对非掩码位置的输出做也可以对全部位置做。如果对全序列每个位置都做概念预测预训练信号密度会高很多收敛也快。我记得论文核心设定的监督信号是两个任务的组合这个密度选择属于工程细节正式复现的时候可以自己把握。# 概念预测多标签 BCE # hidden: 编码器输出 [batch, seq_len, d_model] concept_logits concept_head(hidden) # [batch, seq_len, num_concepts] loss_concept BCEWithLogitsLoss( concept_logits.view(-1, num_concepts), concept_labels.view(-1, num_concepts) )4.2 任务二掩码问题预测让嵌入学到常和谁一起出现第二个任务模仿了 BERT 的掩码语言模型随机把序列中一定比例的问题 ID 遮住通常 15% 左右让模型根据左右两侧的上下文去预测被遮住的题目。被遮住的位置输出一个在全题表上的分布用交叉熵做损失。这个任务捕捉的是题目之间的共现和时序关系。学生如果先做了一元一次方程入门再做一元一次方程应用题这两道题在大量序列里反复挨着出现掩码预测任务就会把它们的嵌入拉近。这种学习路径相似性是概念标注覆盖不到的信号两道题可能标注的概念不完全一样但做题顺序告诉模型它们在实际学习流程里高度相关。注意一个细节掩码预测的目标是题目 ID不是概念 ID。预测题目比预测概念难得多因为题表可能几千上万而概念可能只有几十个。但正是这种难度逼着模型去学更精细的题目级区分。把两个任务放在一起看概念预测给了嵌入粗粒度的语义锚点掩码问题预测给了细粒度的行为关系两者互补。# 掩码问题预测在全题表上做分类 question_logits question_head(encoder_out) # [batch, seq_len, num_questions] loss_question CrossEntropyLoss( question_logits[mask_positions], masked_question_ids )4.3 预训练模型结构与联合损失设计预训练编码器主体用的是 Transformer 结构输入由三类向量相加构成题目嵌入、答题对错嵌入、位置嵌入。答题对错被编码进去这点我觉得挺关键——同一条路径上同一道题做对了和做错了之后的上下文含义完全不同把对错作为输入特征嵌入才能学到这题之后常跟什么题的条件模式。整体损失是两个任务的加权和权重分配可以用一个超参平衡。我在复现时常用两者等权起步然后看验证集上哪个任务学得快微调比例。联合训练的好处是概念预测目标给嵌入强约束防止 Transformer 在自监督任务上跑偏学出一些奇怪的模式掩码预测则提供概念的上下文边界的补充信息。5. 预训练嵌入怎么接进下游模型DKT、DKVMN、GKT 三种接法5.1 DKT直接替换输入嵌入查表DKT 的接入最简单粗暴把预训练得到的问题嵌入矩阵复制给下游模型的 question embedding 查表之后照常训练。这相当于给模型换了一套更好的参数初始化。但这里有个我实际试过才意识到的讲究替换之后要不要冻结嵌入层如果完全不冻结微调梯度很快会把预训练结构冲掉如果完全冻结模型又无法适应新数据里的细微模式。我个人的经验是先冻结若干个 epoch 让下游模型其他部分安定下来再解冻嵌入层并用更小的学习率比如主学习率的 0.1 倍继续更新。论文里的标准做法是当作初始化直接微调但如果你手上数据量不大这个先冻结后解冻的节奏实测更稳。5.2 DKVMN同时影响 key 和 valueDKVMN 的结构里有两个矩阵值得关注一个是 key 矩阵用来计算当前题目和记忆槽位之间的注意力另一个是 value 矩阵存的是概念级别的知识状态。接入 PEBG 时key 侧的题目嵌入可以直接换成预训练向量。这么做的好处是注意力一开始就能把题目路由到正确的概念槽位上——如果一个嵌入学得好考函数单调性的题和考函数奇偶性的题哪怕关键词差很多向量距离也近注意力分配一开始就是合理的。value 侧虽然按概念组织但间接也受益于更准确的注意力权重。这个改动虽然小对 DKVMN 这种依赖路由正确性的模型收益往往比 DKT 更明显。5.3 GKT用嵌入相似度构建问题图GKT 的接入最有意思。GKT 原文建模在概念图上图结构来自专家先验。PEBG 给出了一个更数据驱动的替代方案用预训练好的题目嵌入之间的相似度来构建问题级图结构。操作上可以算一个余弦相似度矩阵对每一道题取 top-k 个相似题作为邻居或者用 RBF 核函数把相似度转成边的权重。这种图构建方式的优势是它可以覆盖专家知识标注不到的关系——比如两道题概念标注不同但大量学生在同一条学习路径里会接连遇到它们它们的嵌入靠掩码预测任务学得足够接近图里就会自然出现一条边。在我的理解里这也是 PEBG 名字里那个和Graph相关的用意所在预训练嵌入不只是下游模型的输入还能反向指导图的结构生成。这种先学表示再用表示定结构的思路后来在图神经网络相关的工作里越来越常见。6. 实验效果与消融分析提升到底来自哪里6.1 评测数据集与指标论文在三个公开的教育数据挖掘基准上做的评测两个来自在线数学学习平台数据量级都在几十万条作答记录一个来自某届数据挖掘竞赛提供的代数题解答跟踪数据规模更大。这些数据集中每个学生都有连续做题记录并按时间划分训练测试集是知识追踪领域标准的实验协议。评测指标用的是 AUC也就是预测答对概率和真实对错之间的排序质量。AUC 在知识追踪里是绝对的主流指标因为它不关心预测分数绝对值只关心预测高的确实更容易做对排序这与推题系统把最可能做不对的题推给学生的实际需求高度一致。部分数据集上也会看准确率但 AUC 是论文比较结论的主要依据。6.2 主结果一致性的提升主实验结果概括成一句话就是把 PEBG 预训练的嵌入接入 DKT、DKVMN、GKT 之后三个模型在三个数据集上的 AUC 都出现了稳定提升。注意是都——不是挑一两个模型有效而是全覆盖的一致提升幅度大致在一个到几个百分点之间。在知识追踪这种公认难涨点、一个百分点的差距都能写一篇论文的领域里这个提升幅度相当可观。这组结果还说明一个方法论上的意义PEBG 不是提出一个新模型去替代 DKT/DKVMN/GKT而是提出一个即插即用的表示学习模块。它和任意下游模型组合都不冲突这种模块化改进的思路比另起炉灶造一个新模型更容易被社区吸收和沿用。6.3 消融实验两个任务缺一不可消融实验是这类论文最有信息量的部分。把两个预训练任务分别去掉结果一般是只保留概念预测或者只保留掩码问题预测效果都比完整版差但具体差在哪各有各的意思。去掉掩码问题预测只留概念预测问题嵌入能学到概念语义但学不到题目间的共现行为关系嵌入空间变成一个概念簇组成的结构缺少题目分辨力。去掉概念预测只留掩码预测嵌入能学到序列共现但没有语义锚点两个概念完全无关但经常挨着出现的题会被错误地拉近。两个任务像是类别信息和行为信息的两根支柱缺一根都会让嵌入空间往一边歪。6.4 冷启动场景下的额外收益论文还有一个值得关注的实验角度在小规模训练数据上比较 PE

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询