当前位置: 首页 > news >正文

【传知代码】基于图神经网络的知识追踪方法(论文复现)

前言:本文将深入探讨基于图神经网络的知识追踪方法,旨在通过构建知识图谱来捕捉知识之间的复杂关联,并利用图神经网络强大的表示学习能力来建模学生的学习过程。我们将首先介绍图神经网络的基本原理和关键技术,然后详细阐述如何将其应用于知识追踪任务中,并探讨其中的挑战和解决方案。最后,我们将通过实验验证所提方法的有效性和优越性,以期为个性化学习的研究和实践提供新的思路和方向。

本文所涉及所有资源均在传知代码平台可获取

目录

概述

演示效果

核心代码

写在最后


概述

论文链接提出了一种基于图神经网络的知识追踪方法,称为基于图的知识追踪(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实现的GKT(Graph Knowledge Tracing)模型的训练与评估过程。主要包括以下几个部分:

1)__init__方法:初始化GKT模型,包括传入知识点数量、图结构、隐藏层节点数等参数,并创建GKTNet模型实例。

2)train方法:用于模型训练,接收训练数据和测试数据(可选),并根据指定的epoch数、设备类型和学习率进行训练。在每个epoch内,遍历训练数据,将数据转移到指定设备上,然后通过GKT模型进行预测,计算损失函数并进行反向传播更新模型参数。如果提供了测试数据,还会调用eval方法进行模型评估。

3)eval方法:用于模型评估,接收测试数据和设备类型,并在评估过程中将数据转移到指定设备上,然后通过GKT模型进行预测,并计算AUC和准确率作为评估指标。

4)save和load方法:用于模型的保存和加载,分别将模型参数保存到文件中,以及从文件中加载模型参数。

class GKT(KTM):def __init__(self, ku_num, graph, hidden_num, net_params: dict = None, loss_params=None):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_data=None, *, epoch: int, device="cpu", lr=0.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, device="cpu") -> 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作为深度学习框架,并提供了模型的保存和加载功能。

写在最后

        虽然我们已经取得了一些初步的研究成果,但基于图神经网络的知识追踪方法仍然面临着许多挑战和机遇。首先,随着教育数据的不断增长和复杂化,如何构建更加高效、准确的知识图谱成为了一个亟待解决的问题。其次,如何结合学生的学习行为和历史数据,进一步优化图神经网络的模型结构和学习算法,提高知识追踪的精度和效率,也是我们需要深入研究的课题。

        然而,正是这些挑战激发了我们对基于图神经网络的知识追踪方法的浓厚兴趣。我们相信,随着技术的不断进步和研究的深入,我们将能够克服这些挑战,并开发出更加先进、实用的知识追踪系统。这些系统不仅能够为教师提供更加精准的教学建议,帮助学生实现更高效的学习,还能够为教育资源的优化配置和个性化教育的推广提供有力支持。

详细复现过程的项目源码、数据和预训练好的模型可从该文章下方附件获取。

【传知科技】关注有礼     公众号、抖音号、视频号

相关文章:

【传知代码】基于图神经网络的知识追踪方法(论文复现)

前言:本文将深入探讨基于图神经网络的知识追踪方法,旨在通过构建知识图谱来捕捉知识之间的复杂关联,并利用图神经网络强大的表示学习能力来建模学生的学习过程。我们将首先介绍图神经网络的基本原理和关键技术,然后详细阐述如何将…...

Vue与React、Angular的比较

Vue、React和Angular是前端开发中三个流行的JavaScript框架,它们各自具有不同的特点、优势和适用场景。以下是对这三个框架的比较: 1. 基本概念 Vue:Vue是一套用于构建用户界面的渐进式框架,其核心库专注于视图层,易…...

LINQ(二) —— 流式语句

总目录 C# 语法总目录 LINQ 二 —— 流式语句 1.1 序列相关部分运算符1.2 查询相关部分运算符 1.1 序列相关部分运算符 Take 运算符:Take 是拿出序列的几个数 Skip 运算符:Skip 是跳过序列的前几个数 Reverse 运算符:Reverse 是将序列反转 …...

怎么查看MySQL服务的最大连接,已经使用的连接数?怎么配置最大连接数?

要查看和配置MySQL服务的最大连接数以及已经使用的最大连接数,可以使用以下SQL语句和步骤: 查看MySQL服务的最大连接数和已经使用的最大连接数 查看当前最大连接数: SHOW VARIABLES LIKE max_connections;查看已经使用的最大连接数&#xff…...

微信小程序毕业设计-跑腿系统项目开发实战(附源码+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:微信小程序毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计…...

stm32通过esp8266连接阿里云平台代码讲解

连接服务器 首先,按照一定的规则,获取连接阿里服务器所需要的ClientID(客户端D)、Username(用户名)、Passward(密码),ServerIP(域名),ServerPort&#xff08…...

突发!某大厂机房掉电,MySQL数据库无法启动,紧急恢复过程...

作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验, Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复, 安装迁移,性能优化、故障…...

SpringCloudAlibaba:6.2RocketMQ的普通消息的使用

简介 普通消息也叫并发消息&#xff0c;是发送效率最高&#xff0c;使用最多的一种 依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSch…...

vue+echart :点击趋势图中的某一点或是柱状图,出现弹窗,并传输数据

样式 在趋势图中点击某一个柱状图&#xff0c;出现下面的弹窗 代码实现 主要是在趋势图页面代码中&#xff0c;在初始化趋势图的设置中&#xff0c;添加对趋势图监听的点击方法 drawChart() {const chartData this.chartData;let option {};if (!chartData.xData?.len…...

2024年上半年软考什么时候查成绩?附查询流程

考试一旦结束&#xff0c;并不意味着与考试相关的事情也就结束了。2024年上半年信息系统项目管理师等软考考试结束后&#xff0c;我们还需要关注考后和证书相关的事情&#xff0c;比如成绩查询、证书领取等等。 2024年上半年软考成绩查询 查询时间&#xff1a;预计在2024年7月…...

css3实现0.5px边框

效果图 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>css3实现0.5px边框</title><s…...

U-Net网络

U-Net网络 一、基本架构 各个箭头的解释&#xff1a; conv 3 * 3, ReLU&#xff1a;表示通过一个3 * 3的卷积层&#xff0c;并且该层自动附带一个非线性激活层&#xff08;ReLu&#xff09;copy and crop&#xff1a;表示进行裁剪然后再进行拼接&#xff08;在channel的维度上…...

不拍视频,不直播怎么在视频号卖货赚钱?开一个它就好了!

大家好&#xff0c;我是电商糖果 视频号这两年看着抖音卖货的热度越来越高&#xff0c;也想挤进电商圈。 于是它模仿抖音推出了自己的电商平台——视频号小店。 只要商家入驻视频号小店&#xff0c;就可以在视频号售卖商品。 具体怎么操作呢&#xff0c;需要拍视频&#xf…...

【vue-5】双向数据绑定v-model及修饰符

单向数据绑定&#xff1a;当数据发生改变时&#xff0c;视图会自动更新&#xff0c;但当用户手动更改input的值&#xff0c;数据不会自动更新&#xff1b; 双向数据绑定&#xff1a;当数据发生改变时&#xff0c;视图会自动更新&#xff0c;但当用户手动更改input的值&#xf…...

[STM32-HAL库]AS608-指纹识别模块-STM32CUBEMX开发-HAL库开发系列-主控STM32F103C8T6

目录 一、前言 二、详细步骤 1.光学指纹模块 2.配置STM32CUBEMX 3.程序设计 3.1 输出重定向 3.2 导入AS608库 3.3 更改端口宏定义 3.4 添加中断处理部分 3.5 初始化AS608 3.6 函数总览 3.7 录入指纹 3.8 验证指纹 3.9 删除指纹 3.10 清空指纹库 三、总结及资源 一、前言 …...

【java程序设计期末复习】chapter4 类和对象

类和对象 编程语言的几个发展阶段 &#xff08;1&#xff09;面向机器语言 计算机处理信息的早期语言是所谓的机器语言&#xff0c;使用机器语言进行程序设计需要面向机器来编写代码&#xff0c;即需要针对不同的机器编写诸如0101 1100这样的指令序列。 &#xff08;2&#x…...

ios:Command PhaseScriptExecution failed with a nonzero exit code

问题 使用 xcode 跑项目真机调试的时候&#xff0c;一直报错 Command PhaseScriptExecution failed with a nonzero exit code。 解决 最终靠以下方法解决 删除Podfile.lock文件删除Pods文件删除.xcworkspace文件Pod installCommandShiftK 清理一下缓存 亲测有效...

《拯救大学生课设不挂科第四期之蓝桥杯是什么?我是否要参加蓝桥杯?选择何种语言?如何科学备赛?方法思维教程》【官方笔记】

背景&#xff1a; 有些同学在大一或者大二可能会被老师建议参加蓝桥杯&#xff0c;本视频和文章主要是以一个过来人的身份来给与大家一些思路。 比如蓝桥杯是什么&#xff1f;我是否要参加蓝桥杯&#xff1f;参加蓝桥杯该选择何种语言&#xff1f;如何科学备赛&#xff1f;等…...

数据挖掘案例-航空公司客户价值分析

文章目录 1. 案例背景2. 分析方法与过程2.1 分析流程步骤2.2 分析过程1. 数据探索分析2. 描述性统计分析3. 分布分析1.客户基本信息分布分析2. 客户乘机信息分布分析3. 客户积分信息分布分析 4. 相关性分析 3. 数据预处理3.1 数据清洗3.2 属性约束3. 3 数据转换 4. 模型构建4. …...

决策树与机器学习实战【代码为主】

文章目录 &#x1f6f4;&#x1f6f4;引言&#x1f6f4;&#x1f6f4;决策树使用案例&#x1f6f4;&#x1f6f4;numpy库生成模拟数据案例&#x1f6f4;&#x1f6f4;决策树回归问题&#x1f6f4;&#x1f6f4;决策树多分类问题 &#x1f6f4;&#x1f6f4;引言 决策树是一种经…...

Mamba-X:为Vision Mamba模型定制的边缘AI硬件加速器架构解析

1. 项目概述&#xff1a;当视觉Transformer遇上状态空间模型最近在边缘AI硬件加速的圈子里&#xff0c;一个名为“Mamba-X”的设计概念开始被频繁讨论。这名字听起来有点神秘&#xff0c;但核心其实很明确&#xff1a;它瞄准的是当下两个最火热的AI架构趋势——Vision Transfor…...

电池阻抗测量技术:伪随机序列与信号处理应用

1. 电池阻抗测量技术概述电池阻抗测量作为电化学系统状态监测的核心手段&#xff0c;其原理基于对电池施加特定激励信号并测量响应信号&#xff0c;通过分析两者的幅值和相位关系来获取阻抗谱。这种频域分析方法能够反映电池内部电荷转移、扩散过程等动力学特性&#xff0c;为电…...

C#巧用Spire.XLS for .NET隐藏或显示Excel网格线

在日常的数据处理和报表生成中&#xff0c;Excel是我们不可或缺的工具。然而&#xff0c;你是否曾遇到这样的场景&#xff1a;辛苦制作的报表&#xff0c;因为默认显示的网格线而显得不够专业&#xff0c;或是某些数据可视化图表&#xff0c;网格线反而成了干扰&#xff1f;手动…...

机器人导航核心技术:深度感知与传感器融合的工程实践

1. 项目概述&#xff1a;从“看见”到“理解”的机器人导航革命在机器人技术领域&#xff0c;导航能力是其智能化的核心体现。传统的机器人导航&#xff0c;无论是依赖预设地图的循迹&#xff0c;还是基于简单激光雷达的避障&#xff0c;都像是蒙着眼睛在熟悉的房间里摸索——虽…...

国产系统(UOS/麒麟/方德)截图工具终极指南:从内置工具到第三方替代方案全解析

国产操作系统截图工具全攻略&#xff1a;从基础操作到高阶玩法在数字化办公时代&#xff0c;截图功能已成为日常工作中不可或缺的生产力工具。对于统信UOS、麒麟KOS、方德NFS等国产操作系统的用户而言&#xff0c;掌握系统内置截图工具的各项功能&#xff0c;并了解当内置工具无…...

线性化加性模型与子尺度混合:实现概率空间直接可解释的机器学习

1. 项目概述与核心痛点 在金融风控、医疗诊断这些对决策过程要求“看得见、摸得着”的领域&#xff0c;我们这些从业者每天都在和模型的可解释性较劲。你肯定遇到过这种情况&#xff1a;业务方拿着一个逻辑回归模型的风险评分问你&#xff1a;“这个客户的‘历史逾期次数’这个…...

别再死记硬背了!用Python实战案例帮你彻底搞懂假设检验(附代码与避坑指南)

用Python实战拆解假设检验&#xff1a;从数据模拟到结果解读的避坑指南假设检验是数据分析师和机器学习工程师工具箱中最常用的统计工具之一&#xff0c;但很多人在学习过程中都会被各种检验方法、P值解读和原假设设定绕得晕头转向。本文将通过Python代码实战&#xff0c;带你用…...

昇腾CANN ATB KV Cache 与 PagedAttention:显存碎片消除的完整方案

LLM 推理的最大瓶颈不是计算——是显存。长上下文下&#xff0c;KV Cache 的显存占用是二次增长的&#xff1a;seq_len128K → KV Cache 128K 每层 KV 大小 128K (2 hidden head_num) 128K 2 8192 32 32GB。加上模型参数&#xff08;70B 2bytes 140GB&#xff09;…...

歌词滚动姬:重新定义你的歌词制作体验,让每一句歌词都完美同步

歌词滚动姬&#xff1a;重新定义你的歌词制作体验&#xff0c;让每一句歌词都完美同步 【免费下载链接】lrc-maker 歌词滚动姬&#xff5c;可能是你所能见到的最好用的歌词制作工具 项目地址: https://gitcode.com/gh_mirrors/lr/lrc-maker 还在为制作LRC歌词而烦恼吗&a…...

5分钟彻底掌握Windows驱动管理:DriverStore Explorer完全指南

5分钟彻底掌握Windows驱动管理&#xff1a;DriverStore Explorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 你是否发现Windows系统盘空间持续减少&#xff0c;却找不到原因…...