网站改版的方式大致有,广州定制网站建设方案书,吉林seo策略,最火爆的网络游戏排行榜前言#xff1a;本文将深入探讨基于图神经网络的知识追踪方法#xff0c;旨在通过构建知识图谱来捕捉知识之间的复杂关联#xff0c;并利用图神经网络强大的表示学习能力来建模学生的学习过程。我们将首先介绍图神经网络的基本原理和关键技术#xff0c;然后详细阐述如何将… 前言本文将深入探讨基于图神经网络的知识追踪方法旨在通过构建知识图谱来捕捉知识之间的复杂关联并利用图神经网络强大的表示学习能力来建模学生的学习过程。我们将首先介绍图神经网络的基本原理和关键技术然后详细阐述如何将其应用于知识追踪任务中并探讨其中的挑战和解决方案。最后我们将通过实验验证所提方法的有效性和优越性以期为个性化学习的研究和实践提供新的思路和方向。 本文所涉及所有资源均在传知代码平台可获取
目录
概述
演示效果
核心代码
写在最后 概述
论文链接提出了一种基于图神经网络的知识追踪方法称为基于图的知识追踪GKT。将知识结构构建为图其中节点对应于概念边对应于它们之间的关系将知识追踪任务构建为图神经网络中的时间序列节点级分类问题。在两个开放数据集上的实证验证表明方法可以更好地预测学生的表现并且该模型比先前的方法具有更可解释的预测其贡献如下 1展示了知识追踪可以重新构想为图神经网络的应用。 2为了实现需要输入模型的图结构在许多情况下并不明确的情况下我们提出了各种方法并使用实证验证进行了比较。 3证明了所提出的方法比先前的方法更准确和可解释的预测。 下图是本文提出GKT的体系结构 模型聚合了回答的概念及其相邻概念的隐藏状态和嵌入。这种聚合使用隐藏状态、表示正确和错误答案的输入向量 xt以及概念及其回答的嵌入矩阵Ex 和Ec 进行 接下来模型根据聚集的特征和知识图结构更新隐藏状态。这一步骤确保模型融合了当前概念及其在知识图中的相邻节点的信息 最后模型输出学生在下一时间步正确回答每个概念的预测概率 演示效果 使用了学生数学练习日志的两个开放数据集:ASSISTments 2009-2010“skill-builder”由在线教育服务ASSISTments1以下称为“ASSISTments”提供和Bridge to Algebra 2006-2007[19]用于KDDCup教育数据挖掘挑战赛以下简称“KDDCup”。两个数据集上的每一个习题均被赋予一个人预设知识概念标签。 利用指定的条件对各数据集进行预处理。对ASSISTments来说把同时作答的日志合并为一个整体然后抽取出和命名概念标签有关的日志并最终抽取出和至少十次作答的概念标签有关。在KDDCup中我们将问题与步骤的结合看作是答案接着从与命名且非哑元的概念标签有关的日志中提取信息最终从至少10次回答的概念标签中提取相关日志。鉴于标签的频繁出现将多个回答日志整合为一组有助于避免不公正的高预测表现。排除未命名和虚拟概念标签能够去除噪音。利用每一个概念标签被答出的次数为日志设定一个阈值从而保证足够多的日志被用于去除噪音。在使用上述条件对数据集进行预处理后为ASSISTments数据集获得了62,955个日志由1,000名学生和101项技能组成并为KDDCup数据集获得了98,200条日志由1,000名学生和211项技能组成 处理数据集 进行训练 实验结果 核心代码
接下来这段核心代码是一个基于PyTorch实现的GKTGraph Knowledge Tracing模型的训练与评估过程。主要包括以下几个部分 1__init__方法初始化GKT模型包括传入知识点数量、图结构、隐藏层节点数等参数并创建GKTNet模型实例。 2train方法用于模型训练接收训练数据和测试数据可选并根据指定的epoch数、设备类型和学习率进行训练。在每个epoch内遍历训练数据将数据转移到指定设备上然后通过GKT模型进行预测计算损失函数并进行反向传播更新模型参数。如果提供了测试数据还会调用eval方法进行模型评估。 3eval方法用于模型评估接收测试数据和设备类型并在评估过程中将数据转移到指定设备上然后通过GKT模型进行预测并计算AUC和准确率作为评估指标。 4save和load方法用于模型的保存和加载分别将模型参数保存到文件中以及从文件中加载模型参数。 class GKT(KTM):def __init__(self, ku_num, graph, hidden_num, net_params: dict None, loss_paramsNone):super(GKT, self).__init__()self.gkt_model GKTNet(ku_num,graph,hidden_num,**(net_params if net_params is not None else {}))# self.gkt_model GKTNet(ku_num, graph, hidden_num)self.loss_params loss_params if loss_params is not None else {}def train(self, train_data, test_dataNone, *, epoch: int, devicecpu, lr0.001) - ...:loss_function SLMLoss(**self.loss_params)trainer torch.optim.Adam(self.gkt_model.parameters(), lr)for e in range(epoch):losses []for (question, data, data_mask, label, pick_index, label_mask) in tqdm(train_data, Epoch %s % e):# convert to devicequestion: torch.Tensor question.to(device)data: torch.Tensor data.to(device)data_mask: torch.Tensor data_mask.to(device)label: torch.Tensor label.to(device)pick_index: torch.Tensor pick_index.to(device)label_mask: torch.Tensor label_mask.to(device)# real trainingpredicted_response, _ self.gkt_model(question, data, data_mask)loss loss_function(predicted_response, pick_index, label, label_mask)# back propagationtrainer.zero_grad()loss.backward()trainer.step()losses.append(loss.mean().item())print([Epoch %d] SLMoss: %.6f % (e, float(np.mean(losses))))if test_data is not None:auc, accuracy self.eval(test_data)print([Epoch %d] auc: %.6f, accuracy: %.6f % (e, auc, accuracy))def eval(self, test_data, devicecpu) - tuple:self.gkt_model.eval()y_true []y_pred []for (question, data, data_mask, label, pick_index, label_mask) in tqdm(test_data, evaluating):# convert to devicequestion: torch.Tensor question.to(device)data: torch.Tensor data.to(device)data_mask: torch.Tensor data_mask.to(device)label: torch.Tensor label.to(device)pick_index: torch.Tensor pick_index.to(device)label_mask: torch.Tensor label_mask.to(device)# real evaluatingoutput, _ self.gkt_model(question, data, data_mask)output output[:, :-1]output pick(output, pick_index.to(output.device))pred tensor2list(output)label tensor2list(label)for i, length in enumerate(label_mask.numpy().tolist()):length int(length)y_true.extend(label[i][:length])y_pred.extend(pred[i][:length])self.gkt_model.train()return roc_auc_score(y_true, y_pred), accuracy_score(y_true, np.array(y_pred) 0.5)def save(self, filepath) - ...:torch.save(self.gkt_model.state_dict(), filepath)logging.info(save parameters to %s % filepath)def load(self, filepath):self.gkt_model.load_state_dict(torch.load(filepath))logging.info(load parameters from %s % filepath)
整体而言这段代码实现了一个GKT模型的训练与评估流程采用了PyTorch作为深度学习框架并提供了模型的保存和加载功能。
写在最后 虽然我们已经取得了一些初步的研究成果但基于图神经网络的知识追踪方法仍然面临着许多挑战和机遇。首先随着教育数据的不断增长和复杂化如何构建更加高效、准确的知识图谱成为了一个亟待解决的问题。其次如何结合学生的学习行为和历史数据进一步优化图神经网络的模型结构和学习算法提高知识追踪的精度和效率也是我们需要深入研究的课题。 然而正是这些挑战激发了我们对基于图神经网络的知识追踪方法的浓厚兴趣。我们相信随着技术的不断进步和研究的深入我们将能够克服这些挑战并开发出更加先进、实用的知识追踪系统。这些系统不仅能够为教师提供更加精准的教学建议帮助学生实现更高效的学习还能够为教育资源的优化配置和个性化教育的推广提供有力支持。
详细复现过程的项目源码、数据和预训练好的模型可从该文章下方附件获取。 【传知科技】关注有礼 公众号、抖音号、视频号