⌈ 传知代码 ⌋ 深度知识追踪

2024-06-10 10:28

本文主要是介绍⌈ 传知代码 ⌋ 深度知识追踪,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

💛前情提要💛

本文是传知代码平台中的相关前沿知识与技术的分享~

接下来我们即将进入一个全新的空间,对技术有一个全新的视角~

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

以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦!!!

以下内容干货满满,跟上步伐吧~


📌导航小助手📌

  • 💡本章重点
  • 🍞一. 概述
  • 🍞二. 论文方法
  • 🍞三. 实验部分
  • 🍞四. 关键代码
  • 🫓总结


💡本章重点

  • 深度知识追踪

🍞一. 概述

知识追踪的任务是对学生的知识进行建模,以便准确预测学生在未来的学习互动中的表现。简言之,我们利用学生的历史答题序列数据,通过分析学生与题目的交互结果,来推断学生当前的知识水平以及题目的特征,从而预测学生在未来题目上的表现。

过去的模型大多依赖于人工定义的交互函数,例如IRT模型,该模型定义了学生能力参数以及题目的难度、区分度和猜测性参数。

虽然也有改进不依赖交互函数的模型,如刘淇提出的NeuralCD模型,但它们更适用于对学生历史答题数据的静态评估,无法实现动态追踪,存在冷启动问题。

深度知识追《Deep Knowledge Tracing》踪将时间上“深度”的灵活递归神经网络(RNN)应用到知识追踪任务中。这一系列模型使用大量的人工“神经元”来表示潜在的知识状态及其时间动态,并且允许从数据中学习学生知识的潜在变量表示,而不是直接硬编码。通过这种方法,深度知识追踪模型解决了冷启动问题,并且能够动态追踪学生的知识状态变化,使得模型更适用于真实的学习情境。

这里对 EduKTM 的DKT方法进行改进,修改了参数,提高了正确率。


🍞二. 论文方法

传统的递归神经网络(RNNs)将输入序列 映射为输出序列 ,这是通过计算一系列隐藏状态 实现的,隐藏状态可以被看做来自过去观测的相关信息的编码,用于对未来的预测,如下图所示:

在这里插入图片描述
具体地说,DKT首先根据学生的历史做题情况将每个学生的交互转换为输入序列,以便RNN模型可以处理。对于唯一练习数量较少的数据集,使用one-hot编码表示学生的每次交互,其中包括练习题的编号以及学生是否正确回答。而对于具有大量唯一练习的数据集,则采用随机向量表示每个交互,以避免one-hot编码的维度爆炸问题。

接着,DKT使用RNN模型对转换后的学生交互序列进行训练。这些模型将学生的历史信息编码为一系列隐藏状态,从而捕捉学生知识状态的时间动态。最后,DKT输出一个与练习数量相等的向量,其中每个条目表示学生在相应练习上回答正确的预测概率。通过这种方式,DKT能够实现对学生知识状态的动态追踪,从而提高了对学生未来表现的预测准确性。同时,由于采用了RNN等深度学习模型,DKT还能够适应不同规模和复杂度的学生交互数据集,具有较好的泛化能力。


🍞三. 实验部分

数据集

Assistment 数据集是一个用于教育领域的常用数据集,用于研究和评估教育技术和学习分析模型。该数据集由来自辅助学习(Assistments)在线学习平台的真实学生交互数据组成。这些数据包括学生对在线练习题的回答情况、每个练习的元数据(如题目内容、难度等)、学生的个人信息(如年级、性别等)以及其他与学习过程相关的信息。

在这里插入图片描述
实验步骤

  • step1:安装环境依赖
    在这里插入图片描述
  • step2:下载数据集,将其变成one-hot编码

在这里插入图片描述

  • step3:进行训练
    在这里插入图片描述
  • 实验结果

在这里插入图片描述


🍞四. 关键代码

import numpy as np
import torch
import torch.utils.data as Data
from torch.utils.data.dataset import Dataset
import tqdmNUM_QUESTIONS = 123
BATCH_SIZE = 64
HIDDEN_SIZE = 10
NUM_LAYERS = 1def 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_loadertrain_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 DKTdkt = 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)

🫓总结

综上,我们基本了解了“一项全新的技术啦” 🍭 ~~

恭喜你的内功又双叒叕得到了提高!!!

感谢你们的阅读😆

后续还会继续更新💓,欢迎持续关注📌哟~

💫如果有错误❌,欢迎指正呀💫

✨如果觉得收获满满,可以点点赞👍支持一下哟~✨

【传知科技 – 了解更多新知识】

这篇关于⌈ 传知代码 ⌋ 深度知识追踪的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1047906

相关文章

uniapp接入微信小程序原生代码配置方案(优化版)

uniapp项目需要把微信小程序原生语法的功能代码嵌套过来,无需把原生代码转换为uniapp,可以配置拷贝的方式集成过来 1、拷贝代码包到src目录 2、vue.config.js中配置原生代码包直接拷贝到编译目录中 3、pages.json中配置分包目录,原生入口组件的路径 4、manifest.json中配置分包,使用原生组件 5、需要把原生代码包里的页面修改成组件的方

公共筛选组件(二次封装antd)支持代码提示

如果项目是基于antd组件库为基础搭建,可使用此公共筛选组件 使用到的库 npm i antdnpm i lodash-esnpm i @types/lodash-es -D /components/CommonSearch index.tsx import React from 'react';import { Button, Card, Form } from 'antd'

17.用300行代码手写初体验Spring V1.0版本

1.1.课程目标 1、了解看源码最有效的方式,先猜测后验证,不要一开始就去调试代码。 2、浓缩就是精华,用 300行最简洁的代码 提炼Spring的基本设计思想。 3、掌握Spring框架的基本脉络。 1.2.内容定位 1、 具有1年以上的SpringMVC使用经验。 2、 希望深入了解Spring源码的人群,对 Spring有一个整体的宏观感受。 3、 全程手写实现SpringM

[职场] 公务员的利弊分析 #知识分享#经验分享#其他

公务员的利弊分析     公务员作为一种稳定的职业选择,一直备受人们的关注。然而,就像任何其他职业一样,公务员职位也有其利与弊。本文将对公务员的利弊进行分析,帮助读者更好地了解这一职业的特点。 利: 1. 稳定的职业:公务员职位通常具有较高的稳定性,一旦进入公务员队伍,往往可以享受到稳定的工作环境和薪资待遇。这对于那些追求稳定的人来说,是一个很大的优势。 2. 薪资福利优厚:公务员的薪资和

代码随想录算法训练营:12/60

非科班学习算法day12 | LeetCode150:逆波兰表达式 ,Leetcode239: 滑动窗口最大值  目录 介绍 一、基础概念补充: 1.c++字符串转为数字 1. std::stoi, std::stol, std::stoll, std::stoul, std::stoull(最常用) 2. std::stringstream 3. std::atoi, std

记录AS混淆代码模板

开启混淆得先在build.gradle文件中把 minifyEnabled false改成true,以及shrinkResources true//去除无用的resource文件 这些是写在proguard-rules.pro文件内的 指定代码的压缩级别 -optimizationpasses 5 包明不混合大小写 -dontusemixedcaseclassnames 不去忽略非公共

麻了!一觉醒来,代码全挂了。。

作为⼀名程序员,相信大家平时都有代码托管的需求。 相信有不少同学或者团队都习惯把自己的代码托管到GitHub平台上。 但是GitHub大家知道,经常在访问速度这方面并不是很快,有时候因为网络问题甚至根本连网站都打不开了,所以导致使用体验并不友好。 经常一觉醒来,居然发现我竟然看不到我自己上传的代码了。。 那在国内,除了GitHub,另外还有一个比较常用的Gitee平台也可以用于

众所周知,配置即代码≠基础设置即代码

​前段时间翻到几条留言,问: “配置即代码和基础设施即代码一样吗?” “配置即代码是什么?怎么都是基础设施即代码?” 我们都是知道,DevOp的快速发展,让服务器管理与配置的时间大大减少,配置即代码和基础设施即代码作为DevOps的重要实践,在其中起到了关键性作用。 不少人将二者看作是一件事,配置即大代码是关于管理特定的应用程序配置设置本身,而基础设施即代码更关注的是部署支持应用程序环境所需的

53、Flink Interval Join 代码示例

1、概述 interval Join 默认会根据 keyBy 的条件进行 Join 此时为 Inner Join; interval Join 算子的水位线会取两条流中水位线的最小值; interval Join 迟到数据的判定是以 interval Join 算子的水位线为基准; interval Join 可以分别输出两条流中迟到的数据-[sideOutputLeftLateData,

好书推荐《深度学习入门 基于Python的理论与实现》

如果你对Python有一定的了解,想对深度学习的基本概念和工作原理有一个透彻的理解,想利用Python编写出简单的深度学习程序,那么这本书绝对是最佳的入门教程,理由如下:     (1)撰写者是一名日本普通的AI工作者,主要记录了他在深度学习中的笔记,这本书站在学习者的角度考虑,秉承“解剖”深度学习的底层技术,不使用任何现有的深度学习框架、尽可能仅使用基本的数学知识和Python库。从零创建一个