Weighted Heterogeneous Graph-Based Three-View Contrastive Learning for Knowledge Tracing in Personalized e-Learning Systems
B. 图对比学习
构建加权异构图:因为有不同类型的节点和交互KT领域,一个加权异构图是根据我们的训练数据,包括三个实体类型:学生(u)、问题(q),技能(skill)和两个加权边:u-q 和q-k
结合KT场景,我们将学生答案的正确性作为边缘q−u上的权重(w1),其中w1∈{0,1},并在随后的计算中将这两个权重值视为不同的关系。在q−k上的权重w2∈(0,1)是在训练数据中计算的问题的难度。
2)节点特征变换:考虑到加权异构图上的不同节点类型具有不同的特征空间,我们首先需要使用非线性变换将它们映射到一个共同的潜在空间上。特别地,根据权重w1的值,我们将学生节点(u)分为两种类型(u1和u2),分别表示正确和错误回答问题的学生。node i ,节点类型为Ti
pi为特征变换后的节点
3)通过不同元路径q-q,最终构建出了q表示【MP】
元路径视图编码器:本模块的目标是从元路径(MP)视图中学习具有高阶语义的问题嵌入。特别地,为了获取问题之间的潜在关系,我们首先定义了两个加权元路径q→u→q和q→uk→q。
u1和u2的含义:在u-q图中,根据w权值,将学生节点(u)划分为两种类型(u1和u2),分别代表正确和错误回答问题的学生。
提出有偏随机游走,
对非问题节点进行掩码,并使用特定的基于元路径的GCN [47]在第i个元路径上聚合问题的邻居信息。
由于不同的元路径在同一个问题上表示不同的语义,因此我们使用一种注意机制来融合不同元路径上的各种问题表示。具体来说,我们首先计算来自不同元路径的贡献,并通过一个softmax层将它们转换为权重:
V问题集
此外,由于eMP考虑了问题之间的显式和直接关系,最终将其应用于KT模块作为问题表示。
4)然后利用三种类型邻居关系q-u1,qu2,q-k,获得不同类型节点的最终聚合后的表示。【NS】
网络模式视图编码器:这里我们的目标是学习考虑到网络模式(NS)的问题嵌入,如图3所示。对于常见的问题节点i,不同类型的邻居(q和u)对它的贡献不同,而同一邻居类型中的不同节点的贡献也不同。因此,我们首先应用图注意机制(GAT)来从给定类型的邻居中的不同节点收集消息:
其中βi Tm ,j是类型Tm的邻居节点j对问题节点i的注意值,hT i m表示问题i类型Tm的邻域嵌入,Ni Tm是我们随机抽样的邻居数。然后使用另一个GAT来收集每种类型的贡献。这里,q−k,q−u1,q−u2是三种不同的邻居关系:
其中m∈{1,2,3}是类型索引,αTm是类型Tm的重要性,WNS和bNS是可学习的参数。最后,通过聚合各种邻居类型,形成了NS视图的嵌入问题:
5)知识跟踪视图编码器:【kt】
6)loss
三视图框架的对比损失,我们应用一个投影层将不同视图的问题表示映射到相同的潜在空间,对于每个视图:
对比损失(Contrastive Loss)计算
目的是计算对比损失(Contrastive Loss),用于三视角(Three-View)框架中的问题表示学习(Question Representation Learning)。三种视角分别是:
- MP(Meta-Path View,元路径视角)
- KT(Knowledge Tracing View,知识追踪视角)
- NS(Network Schema View,网络模式视角)
为了让不同视角下的问题表示能够映射到相同的潜在空间(Latent Space),首先通过投影层(Projection Layer) 进行转换,然后计算对比损失(Contrastive Loss) 以保持不同视角之间的相似性。
1. 投影层映射(Projection Layer)
作用
- eie_i:表示在不同视角下的问题嵌入(Question Embedding)。
- W1,W2,b1,b2W_1, W_2, b_1, b_2:可学习的权重和偏置参数。
- σ\sigma:非线性激活函数,论文中使用了 ELU(Exponential Linear Unit)。
目的:
- 将不同视角下的表示映射到相同的潜在空间,以便后续计算对比损失。
- 这样可以保证不同视角的表示具有一定的相似性,避免因为不同特征分布导致的表示差异过大。
2. 正样本选择策略(Positive Sample Selection)
基于 MP 视角(Meta-Path View),选择正负样本
- 正样本(Positive Samples):给定目标节点 i,计算所有与它相邻的问题(Question)在**所有元路径(Meta-Path)**中的出现次数,并进行降序排序。
- 如果某个节点的出现次数 ≥ 设定阈值 K,则将其加入正样本集 Pi
- 负样本(Negative Samples):所有其他未被选为正样本的节点,加入负样本集 Ni
目的:
- 正样本 是与目标节点相关性较高的节点,应该在不同视角下保持相似。
- 负样本 是与目标节点相关性较低的节点,在不同视角下应具有较大区分度。
3. 计算对比损失(Contrastive Loss)
采用 MP 视角作为核心视角,分别计算 MP-NS 和 MP-KT 的对比损失。
对比损失的计算方式:
解释
作用
-
增强不同视角之间的对齐性(Alignment):
- 让 MP 视角下的表示 ZiMPZ_i^{MP} 与 NS 视角下的正样本表示 ZjNSZ_j^{NS} 尽可能接近。
- 让 MP 视角下的表示 ZiMPZ_i^{MP} 与 NS 视角下的负样本表示 ZkNSZ_k^{NS} 尽可能远离。
-
减少视角间的信息差异:
- 如果不同视角的表示在投影空间中距离过远,则会影响模型的统一性,导致某些视角的信息被忽略。
- 通过对比损失,模型可以自动调整不同视角下的表示,使其更加统一和互补。
总结
- 投影层(Projection Layer):将不同视角下的问题嵌入映射到相同的潜在空间。
- 正负样本选择(Positive & Negative Sample Selection):通过元路径(Meta-Path)选择正样本(相似问题)和负样本(不相关问题)。
- 对比损失(Contrastive Loss):
- 让不同视角下的相似问题保持接近(如 MP 视角与 NS 视角的正样本靠近)。
- 让不同视角下的不相关问题远离(如 MP 视角与 NS 视角的负样本区分开)。
- 通过温度参数 τ\tau 控制相似度分布,使得训练更加稳定。
这种方法有效提升了不同视角之间的表示一致性,使得最终的知识追踪(Knowledge Tracing)模型更加稳定和鲁棒。
同样,MP-KT(LMP→KT)的对比损失也可以根据与LMP→NS相同的计算方法得到:
C 知识追踪
就是用lstm把历史节点信息放进去。
总体架构:
补充,其他:
1.元路径
这段论文描述了一种基于**元路径(Meta-Path)和有偏随机游走(Biased Random Walk)的数据增强技术,并使用基于元路径的图卷积网络(Meta-Path-Based GCN)**来聚合问题(Question)节点的邻居信息,以提升知识追踪或相关任务的表现。我们逐步解析其含义:
1. 主要思想
-
元路径(Meta-Path) 是在**异构图(Heterogeneous Graph)**上定义的一种路径模式,用于捕捉不同类型的节点之间的关系。例如,在知识追踪任务中,可能有:
-
Q-K-Q(Question → Knowledge Concept → Question)
-
Q-S-Q(Question → Student → Question)
这些路径可以用来描述问题(Question)节点之间的隐含关系。
-
-
有偏随机游走(Biased Random Walk) 被应用在元路径上,以生成合理的节点序列。
-
目标是让共享相同邻居的两个问题(Question)节点,在游走过程中更倾向于出现在相同的路径上,从而提高它们的共现概率(co-occurrence probability)。
-
-
基于元路径的 GCN(Meta-Path-Based GCN)
-
在得到采样的元路径序列后,采用基于元路径的 GCN 对问题节点进行信息聚合,以获取更高阶的关系信息。
-
2. 解析公式
(1) 有偏随机游走(Biased Random Walk)
直观理解:
-
这一定义意味着,如果两个问题节点与相同的邻居节点之间的权重越接近,则它们出现在同一路径上的概率就越大。
-
这样能保证游走过程中,更相似的问题更容易一起出现,进而增强数据的质量。
(2) 基于元路径的 GCN(Meta-Path-Based GCN)
3. 关键点总结
-
数据增强(Data Augmentation)
-
通过有偏随机游走,让共享相同邻居的节点更可能出现在相同的路径中,提高数据质量。
-
-
高阶关系建模
-
采用基于元路径的 GCN,从多个不同的元路径角度来聚合问题节点的信息,捕捉更深层次的知识结构。
-
-
提升知识追踪的表现
-
这种方法可以增强问题之间的关系建模,从而提高个性化知识追踪任务的效果。
-
4. 直观示例
假设我们有一个包含**问题(Q)、知识点(K)、学生(S)**的异构图:
-
Q1 → K1 → Q2
-
Q1 → S1 → Q3
-
Q2 → K2 → Q3
步骤
-
利用有偏随机游走 生成问题节点的序列,例如:
nginx
复制编辑
Q1 → K1 → Q2 → K2 → Q3
偏置策略 确保相似权重的边更容易被选中。
-
用基于元路径的 GCN 进行信息传播,让 Q1、Q2、Q3 能够更好地利用共享邻居的信息,从而提升表示质量。
5. 结论
该论文提出了一种结合有偏随机游走和 GCN 的知识追踪方法,能够:
-
增强数据质量(通过有偏随机游走生成更合理的路径)。
-
捕捉高阶关系(利用基于元路径的 GCN 进行信息聚合)。
-
提升个性化知识追踪的性能(让问题节点更准确地建模学习者的知识状态)。
这种方法适用于个性化学习系统、推荐系统、知识图谱等领域,特别是在基于图的知识追踪模型中,可以提高模型对问题间隐含关系的理解能力。
2.为了更多关注问题之间的高阶信息,我们在获得最终采样的元路径序列后,对非问题节点进行掩码,并使用特定的基于元路径的GCN [47]在第i个元路径上聚合问题的邻居信息、。什么叫做对非问题信息进行掩码,用代码该怎么写
1. 什么叫做对非问题节点进行掩码(Masking Non-Question Nodes)?
在知识追踪(Knowledge Tracing)或图神经网络(GNN)中,图通常由多种类型的节点组成,比如:
-
问题节点(Question Nodes)
-
学生节点(Student Nodes)
-
知识概念节点(Concept Nodes)
为了专注于问题之间的高阶信息,我们可以对非问题节点(如学生或知识概念)进行掩码(Masking),即:
-
让 GCN 只关注 问题节点的邻居信息,而忽略非问题节点的特征。
-
掩码的实现方式一般包括删除非问题节点或将其特征置零。
2. 代码实现:掩码非问题节点并用GCN进行聚合
下面是一个PyTorch + DGL(Deep Graph Library)实现的代码示例,展示如何对非问题节点进行掩码,并在 GCN 训练时仅聚合问题节点的信息。
(1) 构建图数据,并掩码非问题节点
import torch
import dgl
import torch.nn.functional as F
from dgl.nn import GraphConv# 假设我们有一个包含问题(Q)、学生(S)和知识点(C)的异构图
num_nodes = 10 # 假设总共有 10 个节点
node_types = ['Q', 'S', 'C', 'Q', 'C', 'S', 'Q', 'C', 'Q', 'S'] # 节点类型(问题、学生、知识点)# 生成随机邻接矩阵(假设是二分图)
edges = [(0, 2), (2, 6), (6, 8), (1, 3), (3, 7), (7, 9)] # 邻接边
src, dst = zip(*edges)# 构建 DGL 图
g = dgl.graph((torch.tensor(src), torch.tensor(dst)))# 生成随机节点特征
node_features = torch.randn(num_nodes, 16) # 16 维特征# **创建掩码**:找到问题节点(Q)的索引
question_mask = torch.tensor([1 if node_types[i] == 'Q' else 0 for i in range(num_nodes)], dtype=torch.bool)# **应用掩码:让非问题节点的特征变成零**
masked_features = node_features * question_mask.unsqueeze(1) # 扩展维度进行逐元素乘法
(2) 用 GCN 进行聚合(基于元路径的邻居信息)
class GCN(torch.nn.Module):def __init__(self, in_feats, hidden_feats, out_feats):super(GCN, self).__init__()self.conv1 = GraphConv(in_feats, hidden_feats)self.conv2 = GraphConv(hidden_feats, out_feats)def forward(self, g, features, mask):x = self.conv1(g, features)x = F.relu(x)x = self.conv2(g, x)x = x * mask.unsqueeze(1) # 再次掩码,确保输出仍然只包含问题节点的信息return x# 定义模型 gcn_model = GCN(in_feats=16, hidden_feats=32, out_feats=16)# 前向传播(只关注问题节点的聚合结果) output_features = gcn_model(g, masked_features, question_mask)
3. 代码解析
-
构造图结构:使用
dgl.graph()
创建图,并设定**问题(Q)、学生(S)、知识点(C)**作为不同类型的节点。 -
掩码非问题节点:
-
用
question_mask
标记哪些节点是问题(Q)。 -
非问题节点的特征变成零,以确保 GCN 只学习问题节点的信息。
-
-
用 GCN 进行邻居信息聚合:
-
通过
GraphConv
进行两层消息传播。 -
计算完 GCN 输出后,再次应用
question_mask
,保证最终只保留问题节点的特征。
-
4. 总结
-
掩码非问题节点:对非问题节点的特征设为 0,让模型只关注问题节点。
-
基于 GCN 进行邻居聚合:仅聚合问题节点的邻居信息,不考虑学生或知识点的干扰。
-
适用于知识追踪(Knowledge Tracing, KT) 任务,让模型专注于问题间的高阶关系。