当前位置: 首页 > 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;引言 决策树是一种经…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件&#xff1a; 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...

Qwen系列之Qwen3解读:最强开源模型的细节拆解

文章目录 1.1分钟快览2.模型架构2.1.Dense模型2.2.MoE模型 3.预训练阶段3.1.数据3.2.训练3.3.评估 4.后训练阶段S1: 长链思维冷启动S2: 推理强化学习S3: 思考模式融合S4: 通用强化学习 5.全家桶中的小模型训练评估评估数据集评估细节评估效果弱智评估和民间Arena 分析展望 如果…...

PLC入门【4】基本指令2(SET RST)

04 基本指令2 PLC编程第四课基本指令(2) 1、运用上接课所学的基本指令完成个简单的实例编程。 2、学习SET--置位指令 3、RST--复位指令 打开软件(FX-TRN-BEG-C)&#xff0c;从 文件 - 主画面&#xff0c;“B: 让我们学习基本的”- “B-3.控制优先程序”。 点击“梯形图编辑”…...