Q-LRDP-D:面向高等教育的个性化学习资源推荐算法

原文地址

1、概述

为了推荐符合高等教育教学要求的个性化学习资源,本文提出了Q-LRDP-D:基于Q矩阵的学习资源难度预测和学习资源序列生成。

  • 首先,使用Q矩阵理论对学习资源和知识点进行建模
  • 然后,通过学习资源难度预测(LRDP)的LSTM算法对学生的学习资源掌握情况进行预测(DKT),本文实验用的学习资源是练习题
  • 其次,根据线下课程教学单元的要求,将待学习知识点进行循环地预测,形成学习资源的有向路径图
  • 最后,利用Dijkstra最短路径算法,计算出最符合学生当前学习水平学习资源序列来完成学习任务

在这里插入图片描述
下文将根据以上四个部分对Q-LRDR-D展开介绍。

一些名词的英文缩写:

  • KPs:Knowledge Points,专家制定的知识点、概念等
  • KS:Knowledge State,学习者的知识掌握状态(通过答题情况、Learning records来获取)
  • DKT:Deep Knowledge Tracing,基于RNN、LSTM的知识追踪模型
  • Dijkstra:Dijkstra 算法是一个基于「贪心」、「广度优先搜索」、「动态规划」求一个图中一个点到其他所有点的最短路径的算法,时间复杂度 O ( n 2 ) O(n^2) O(n2

2、Q矩阵理论建立学习资源库

Q矩阵

Q矩阵首先由Embresin提出,Q矩阵描述了学习资源与知识点之间的包含关系,一般为0-1矩阵,为m行(|m|为学习资源的数量)和n列(|n|为KPs的数量)的矩阵, Q i , j = 1 Q_{i,j} = 1 Qi,j=1,表示学习资源i包含KP j
Q矩阵的每一行表示该学习资源中涉及的所有KPs,如果学习者学会了这一学习资源,他/她将掌握其中涉及的所有KPs。

A矩阵

知识点之间是有关联的,使用0-1邻接矩阵 A n ∗ n A^{n*n} Ann去表示那些有直接关系的知识点们

R矩阵

有时候,我们关注的不是从一个地点到另一个地点的费用,而是能否从一个顶点到达另一个顶点。
可达矩阵accessible matrix(R matrix)体现的就是知识点之间的直达关系、间接到达关系和自循环关系,也是0-1矩阵(边的权值为单位1)
在这里插入图片描述

R矩阵可以通过A矩阵获得: R = ( A + I ) n R=(A+I)^n R=(A+I)n

KS列向量

KS是一个k列的0-1向量,其中1表示该知识点已被学习者掌握,0表示没有被掌握
例如 ( 0 , 1 , 1 , 0 , 1 , 0 , 1 , 1 , 0 , . . . ) T (0,1,1,0,1,0,1,1,0,...)^T 0,1,1,0,1,0,1,1,0,...T
KS可以通过可拓算法由R矩阵得到

3、LRDP 学习资源的难度预测

有点绕的LR难度概率表示

“一道题对于学习者来说有多难” ⇌ ⇌ “1 - 学习者对这道题的掌握情况”
学习者在时间步 t + 1 t+1 t+1掌握下一个学习资源的probability,可以根据他 0 − t 0-t 0t时间步的学习资源掌握记录来推断(比如答对答错情况)
而根据Q矩阵理论,学生能否掌握一个学习资源,取决于学生是否掌握了该学习资源所涉及的所有Kps

这里用 P ( K a ) P(K^a) P(Ka)表示学生a掌握所有知识点的概率,注意,根据Q矩阵理论,一个学习资源中包含一个课程中所有的知识点,最简单的编码方法以one-hot编码表示,如(1,0,0,1,1,0…)

P ( K a ) = ( P ( K 1 a ) , P ( K 2 a ) , . . . , P ( K n a ) ) P(K^a) = (P(K^a_1), P(K^a_2),...,P(K^a_n)) P(Ka)=(P(K1a),P(K2a),...,P(Kna)) 所有知识点都掌握的联合概率
P ( K a ) P(K^a) P(Ka)也可以写作 P m a P_m^a Pma,指学习者a掌握学习资源m的概率
P ( K a ) = P m a = ∏ i = 1 n P ( K i a ) × Q i , j n P(K^a) = P_m^a = \sqrt[n]{\prod_{i=1}^{n}P(K^a_i)\times Q_{i,j}} P(Ka)=Pma=ni=1nP(Kia)×Qi,j

一道题目、一个学习资源的难度 D m a = 1 − P m a D_m^a= 1− P_m^a Dma=1Pma,当 P m a ≥ 0.5 P_m^a \ge 0.5 Pma0.5,认为学习者a能够掌握此学习资源m

DKT with RNN or LSTM

DKT:深度知识追踪模型,用长短期记忆网络来算 P m a P_m^a Pma
下图是DKT模型按照时间展开的示意图,其输入序列 x1,x2,x3…对应了 t1,t2,t3…时刻学生答题信息的编码,隐层状态 h1,h2,h3…对应了各个时刻学生的知识点掌握情况,模型的输出序列 y1,y2,y3…对应了各时刻学生回答题库中的所有习题答对的概率
在这里插入图片描述
输入 X t X_t Xt ( Q m , A m ) (Q_m,A_m) (QmAm)组成(学习资源+是否答对此题),其中 A m A_m Am是一个0-1变量:

  • 1表示学生答对
  • 0表示答错

这个变量决定了t时刻Q矩阵的行向量(学习资源m)和其对应的作答情况是否做对。
输出 Y t Y_t Yt是一个长度为n的向量,其中每个分量代表正确回答相应知识点的概率。
训练良好的LSTM网络的输出 Y t Y_t Yt表示学生a掌握课程中所有Kps的概率 P ( K a ) P(K^a) P(Ka)

DKT通过交叉熵损失和小批量随机梯度下降算法进行训练。

在这里插入图片描述
上图是一个学生学习8年级数学的知识追踪可视化。她进行了先后50道题的训练,每道题只包含一个知识点,比如第一道题(第一列)上面显示棕色的圆圈,代表知识点Square roots,圆圈的实心代表她这道题做对了,空心代表做错了。由第一道题(第一列)推断出她对所有共6个知识点的掌握情况是:从上到下有蓝有绿,越绿表示该知识点掌握得越牢固,因为第一道题只考察了Square roots,并且她做对了,所以第一列的最小方是绿色的;而第4列到第9列都考察了y-intercept截距的求解,且她都做错了,所有这一行连续4~9列都是蓝的(不全都是最蓝色是因为其他知识点也影响当前知识点的掌握情况,即:知识点之间有关联)。通过50道题的训练,最后一列表示她当前6个知识点的掌握情况。

4、LRSG 学习资源序列生成

LRSG秉持着从学习者当前知识掌握状态KS出发,为学习者生成由易到难的一系列题目,来完成个性化推荐。
具体来说是根据KS中知识点掌握情况,从Q矩阵中找那些未掌握知识点对应的学习资源,难度级别逐步提高,直到学习者能够完成线下教学单元规定的最多kp的学习资源为止。
在这里插入图片描述

5、实验设置

本实验主要以习题作为学习资源,来源于《e-Marketing》课程的4个教学单元、8个班级的625名本科生的习题数据,如表1所示
在这里插入图片描述
在LRDP模块中,LSTM算法主要用于预测学生是否能够正确回答习题,因此将precision和recall作为主要的验证指标。
为了验证生成习题序列的有效性,这些习题应由学生正确回答,也就是难度要符合学生的KS。
验证序列使用了两个指标,correct response rate 和 the average return

A c c = 1 S ∑ j = 1 S ∑ i ∈ R j A i j ∣ R j ∣ Acc = \frac{1}{S}\sum^S_{j = 1} \frac{\sum_{i∈R_j}A^j_i}{|R_j|} Acc=S1j=1SRjiRjAij
Acc是回答正确率,S是参与作答生成序列的的学生总人数, R j R_j Rj给学生j生成的序列, A i j A_i^j Aij是学生j答对的题目

E f f = 1 S ∑ j = 1 S T e s t j ∣ R j ∣ Eff = \frac{1}{S}\sum^S_{j = 1}\frac{Test_j}{|R_j|} Eff=S1j=1SRjTestj
T e s t j Test_j Testj是学生j的考试成绩,Eff是平均回报

### 使用Java实现个性化推荐算法 #### 协同过滤算法概述 协同过滤算法是一种广泛应用的个性化推荐技术,它能依据用户历史行为提供定制化建议。该方法主要分为基于用户的协同过滤和基于物品的协同过滤两种形式[^2]。 #### 数据预处理 为了有效实施协同过滤,在Java中首先要对原始数据集进行清洗与转换。这通常涉及到去除异常值、填补缺失值以及标准化数值范围等操作。对于评分矩阵而言,则需构建一个二维数组来表示不同用户对各项目的评价情况: ```java // 构建用户-商品评分表 double[][] ratings = { {5, 3, 0, 1}, {4, 0, 0, 1}, {1, 1, 0, 5}, {1, 0, 0, 4}, {0, 1, 5, 4} }; ``` #### 计算相似度 接着要定义函数用于衡量两个实体之间的相似程度。这里采用皮尔逊相关系数作为评估指标之一: ```java public static double pearsonCorrelation(double[] userA, double[] userB){ int n = userA.length; double sum_sq_x = 0d, sum_sq_y = 0d, sum_coproduct = 0d; double mean_x = getMean(userA); double mean_y = getMean(userB); for (int i=0; i<n; ++i) { double delta_x = userA[i]-mean_x; double delta_y = userB[i]-mean_y; sum_sq_x += Math.pow(delta_x, 2); sum_sq_y += Math.pow(delta_y, 2); sum_coproduct += delta_x * delta_y; } return sum_coproduct / Math.sqrt(sum_sq_x*sum_sq_y); } private static double getMean(double[] array){ return Arrays.stream(array).filter(num -> num != 0).average().orElse(0D); } ``` #### 预测未知评分并生成推荐列表 最后一步就是利用已知的数据预测目标用户未曾接触过的项目得分,并据此排出最有可能感兴趣的前几名供其参考。此过程可通过遍历所有未打分项求取加权平均值得到预期分数;随后按照降序排列输出最终结果。 ```java Map<Integer, Double> recommendations = new HashMap<>(); for(int item : unratedItems(userId)){ double predictedRating = predictRatingForItem(ratings, userId, item); if(predictedRating > threshold){ recommendations.put(item, predictedRating); } } recommendations.entrySet() .stream() .sorted((e1,e2)->Double.compare(e2.getValue(), e1.getValue())) .forEachOrdered(entry->System.out.println("Recommended Item ID: "+entry.getKey()+" with score of "+entry.getValue())); ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值