📝个人主页🌹:Eternity._
🌹🌹期待您的关注 🌹🌹
❀ 深度知识追踪
- 1. 论文概述
- 2. 论文方法
- 3. 实验部分
- 3.1 数据集
- 3.2 实验步骤
- 3.3 实验结果
- 4 关键代码
1. 论文概述
知识追踪的任务是对学生的知识进行建模,以便准确预测学生在未来的学习互动中的表现。简言之,我们利用学生的历史答题序列数据,通过分析学生与题目的交互结果,来推断学生当前的知识水平以及题目的特征,从而预测学生在未来题目上的表现。过去的模型大多依赖于人工定义的交互函数,例如IRT模型,该模型定义了学生能力参数以及题目的难度、区分度和猜测性参数。虽然也有改进不依赖交互函数的模型,如刘淇提出的NeuralCD模型,但它们更适用于对学生历史答题数据的静态评估,无法实现动态追踪,存在冷启动问题。
深度知识追《Deep Knowledge Tracing》踪将时间上“深度”的灵活递归神经网络(RNN)应用到知识追踪任务中。这一系列模型使用大量的人工“神经元”来表示潜在的知识状态及其时间动态,并且允许从数据中学习学生知识的潜在变量表示,而不是直接硬编码。通过这种方法,深度知识追踪模型解决了冷启动问题,并且能够动态追踪学生的知识状态变化,使得模型更适用于真实的学习情境。
这里对EduKTM的DKT方法进行改进,修改了参数,提高了正确率。
本文所涉及的所有资源的获取方式:这里
2. 论文方法
传统的递归神经网络(RNNs)将输入序列 映射为输出序列 ,这是通过计算一系列隐藏状态 实现的,隐藏状态可以被看做来自过去观测的相关信息的编码,用于对未来的预测,如下图所示:
具体来说,DKT(深度知识追踪)首先会根据学生过往解答题目的记录,把每位学生的学习互动转化为输入序列,以便RNN(循环神经网络)模型能进行有效处理。在处理那些练习题种类较少的数据集时,DKT会采用one-hot编码来标记学生的每一次互动,包括所做的题目编号以及答题的正确与否。然而,对于包含大量不同练习题的数据集,为了避免one-hot编码带来的维度过高问题,DKT则会选择用随机向量来表示每一次互动。
随后,DKT会利用RNN模型对这些转化后的学生互动序列进行训练。这些模型能够把学生的历史学习信息编码成一系列隐藏状态,从而捕捉到学生知识掌握情况随时间变化的动态特征。最终,DKT会输出一个与练习题数量相对应的向量,向量中的每个元素都代表学生正确回答对应练习题的概率预测值。通过这种方式,DKT能够实时追踪学生的知识掌握状态,进而提升对学生未来学业表现的预测精度。此外,由于采用了RNN等深度学习技术,DKT还能很好地适应不同规模和复杂程度的学生互动数据集,展现出强大的泛化能力。
3. 实验部分
3.1 数据集
Assistment 数据集是一个用于教育领域的常用数据集,用于研究和评估教育技术和学习分析模型。该数据集由来自辅助学习(Assistments)在线学习平台的真实学生交互数据组成。这些数据包括学生对在线练习题的回答情况、每个练习的元数据(如题目内容、难度等)、学生的个人信息(如年级、性别等)以及其他与学习过程相关的信息。
3.2 实验步骤
step1:安装环境依赖
step2:下载数据集,将其变成one-hot编码
step3:进行训练
3.3 实验结果
4 关键代码
import numpy as np
import torch
import torch.utils.data as Data
from torch.utils.data.dataset import Dataset
import tqdm
NUM_QUESTIONS = 123
BATCH_SIZE = 64
HIDDEN_SIZE = 10
NUM_LAYERS = 1
def get_data_loader(data_path, batch_size, shuffle=False):
data = torch.FloatTensor(np.load(data_path))
data_loader = Data.DataLoader(data, batch_size=batch_size, shuffle=shuffle)
return data_loader
train_loader = get_data_loader('./data/2009_skill_builder_data_corrected/train_data.npy', BATCH_SIZE, True)
test_loader = get_data_loader('./data/2009_skill_builder_data_corrected/test_data.npy', BATCH_SIZE, False)
#%% md
# Training and Persistence
#%%
import logging
logging.getLogger().setLevel(logging.INFO)
#%%
from EduKTM import DKT
dkt = DKT(NUM_QUESTIONS, HIDDEN_SIZE, NUM_LAYERS)
dkt.train(train_loader, epoch=30)
dkt.save("dkt.params")
#%% md
# Loading and Testing
#%%
dkt.load("dkt.params")
auc = dkt.eval(test_loader)
print("auc: %.6f" % auc)
编程未来,从这里启航!解锁无限创意,让每一行代码都成为你通往成功的阶梯,帮助更多人欣赏与学习!
更多内容详见:这里