一种结合深度知识追踪的个性化习题推荐方法
2020-05-14马骁睿朱群雄
马骁睿,徐 圆,朱群雄
(北京化工大学 信息科学与技术学院,北京 100029)
Email:mxrui1995@163.com
1 引 言
随着信息化时代的到来,各行各业都受到了信息时代的影响.在教育领域,在线教育和智能教育产业规模这几年得到了快速增长,在线教育平台为学生提供了大量的习题和教育资源,吸引了大量的学习者来到在线平台进行学习.然而,随着教育资源规模的日渐庞大,学生往往陷入学习资源的选择困难.这既是因为资源数量太过庞大,出现了信息过载的问题,也是因为在线教育方式相比传统教学方式不能实时地对学生提供指导,无法提供个性化的学习推荐.因此,如何在海量的习题资源中为学生精准地推荐合适的习题就成了一个值得关注的研究课题.
这几年来,推荐系统的技术逐渐被研究者们应用在习题推荐中,学者们将习题看作商业系统中的商品,学生看作用户,以学生在习题上的成绩作为用户对商品的评分,学生的习题得分预测就可以转化为用户的商品评分预测,从而对学生进行推荐.现有习题推荐方法主要分为基于协同过滤的方法和基于知识建模的方法,其中基于协同过滤的习题推荐方法研究现状如下:Walker等通过用户提交有关教育资源的评论和访问搜索他人评价来产生个性化推荐以及寻找具有相似兴趣的其他用户[1];Hsu等使用协同过滤和数据挖掘技术分析学生的阅读数据并生成推荐分数,帮助学生选择合适的课程[2];Segal等提出了学生个性化排序算法EduRank,使用协同过滤找到目标学生的相似学生,通过汇总相似学生的排名来构建对目标学生的问题难度排名,可以被用来辅助教师为学生量身定制习题集和考试[3];Milicevic等提出了一个编程辅导系统的推荐模块Protus,通过AprioriAll算法挖掘频繁序列分析相似学生的习惯和兴趣,并根据对这些频繁序列的评级完成个性化推荐,可以自动适应学生的兴趣和知识水平[4];Wu等提出了一种基于模糊树匹配的学习资料推荐方法[5];Toledo等使用协同过滤方法实现学生在线编程平台的推荐系统[6].基于协同过滤的习题推荐方法结构简单、可解释,但往往忽略了学生对知识的掌握状态信息,在推荐的精准性方面有所欠缺.
基于知识建模的习题推荐方法研究现状如下:Dwivedi等通过考虑学习者的学习方式、目标、知识水平、学习路径等提供个性化推荐[7];Ye等提出了一种基于异构信息网络的学习资源推荐方法,通过贝叶斯知识追踪对学生知识建模,并计算学生与学习资源之间的语义相似度进行排名推荐[8];Halawa等基于迈尔斯-布里格斯类型指标(MBTI)理论识别学生个性和学习方式,并以此来推荐学习课程[9];Zhu等提出将认知诊断模型与概率矩阵分解结合进行推荐[10];Jiang等提出了一种基于知识点层次图的个性化习题推荐算法,通过构建表征知识点层次关系的权重图,结合学生的知识掌握情况,产生个性化习题推荐[11].基于知识建模的方法能够考虑学生的知识状态,基于个人的知识水平做出推荐,但是没有将相似学生的信息加入参考,忽略了学习的群体性.
协同过滤推荐方法和基于知识建模的推荐方法相比,前者忽略了学生的知识掌握状态信息,容易给出过简单或过难的试题,推荐结果往往不够合理;而后者主要针对学生个人的知识状态进行建模预测,在推荐结果上可能比较单一.
针对两种方法各自的缺陷,本文提出一种基于深度知识追踪的协同过滤推荐方法DKT-CF,通过二者的结合,得到更精准的个性化习题推荐.本文算法具有以下优点:1)结合深度知识追踪模型:DKT-CF结合深度知识追踪模型和协同过滤算法进行个性化习题推荐,它从学生知识掌握程度出发,对学生进行建模,具备更好的模型精度;2)使用近邻信息:DKT-CF结合学生自身和其相似学生的知识水平进行推荐,考虑了学生之间的群体性和学生自身的学习情况,提高了推荐结果的可靠性;3)不同难度的推荐:通过引入难度范围参数,可推荐不同难度范围的题目,提高了推荐结果的拓展性和可解释性.
文章第2节概述深度知识追踪模型;第3节介绍提出的方法框架和内容;第4节通过实验验证DKT-CF的有效性;最后,在第5节进行总结和展望.
2 深度知识追踪概述
知识追踪模型最早起源于1972年,其任务可以描述为:给定一个学生的练习序列x0,…,xT,预测下次的表现xt+1.Corbett等在1995年提出了贝叶斯知识追踪(Bayesian Knowledge Tracing,BKT),BKT将学习者的潜在知识状态建模为一组二元变量,每个二元变量代表表对单个概念的理解或不理解,使用隐式马尔科夫模型,通过对每个知识点迭代更新猜测率,学习率,失误率和学习初始概率,得出学生的知识点掌握水平[12].BKT提出后成为了评估学生知识最常用的方法之一,许多研究者对其提出了改进方法:Baker等使用机器学习的方法对学生猜测和失误的概率进行上下文估计,降低了模型退化的风险[13];Yudelson等将学生学习速度参数引入BKT,增加了BKT的准确率,并用在智能辅导系统中辅导学生学习[14];深度知识追踪(Deep Knowledge Tracing,DKT)由Chris 等在2015年提出,通过训练递归神经网络RNN对学生的知识掌握状态建模,在不需要对训练数据集进行人工标注的情况下得到了比BKT更好的效果[15].
DKT的简单结构如图1,其中x1…xT为模型输入,代表学生的提交序列;y1…yT为模型输出,代表每个练习正确的概率向量;h0…hT为隐含层状态.ht,yt表达公式如公式(1),其中Whx,Whh分别为隐含层与输入层,隐含层与隐含层之间的权值矩阵,Wyh为隐含层与输出层之间的权值矩阵.模型损失函数loss如公式(2),其中qt+1,at+1分别为训练样本下一次练习的问题编号和答案.
(1)
(2)
近年来,许多学者对DKT进行了应用和改进研究:Zhang等提出引入更多的特征进行学习,并加入自动编码器层对输入降维,提升模型的表现[16];Yu等采用双向LSTM对问题的文本表述信息进行训练,再在对知识状态建模的过程中引入注意力机制,通过两个模型结合提高知识追踪的准确度[17];Yeung等通过重构DKT模型的损失函数,并加入3个正则项参数,提高模型的稳定性和准确度[18];Wang等将学生的编程提交记录编码输入DKT中,对模型进行训练并预测学生在后续的编程测试中的表现[19].
3 结合深度知识追踪的个性化习题推荐方法
针对目前应用协同过滤方法和知识建模方法产生个性化习题推荐各自的不足,提出了一种结合深度知识追踪模型和协同过滤方法的个性化习题推荐方法DKT-CF.该方法通过深度知识追踪模型对学生知识状态建模,再结合相似学生信息进行协同过滤推荐,使推荐结果既考虑学生个人的知识状态也考虑群体学生学习的共性,提高了推荐结果的可解释性和精确度.
3.1 DKT-CF方法整体框架
本节介绍了本文提出的DKT-CF的方法框架,推荐方法分为3个步骤:
1)输入:学生的做题序列xt={qt,at},其中qt代表在时间t学生练习的习题q,at代表在时间t学生回答的成绩.
2)知识追踪(第1步):使用DKT模型对学生的知识水平进行建模,获得学生的知识掌握程度,得到学生的知识水平向量矩阵U.
3)学生得分预测(第2步):结合协同过滤算法,通过计算知识水平向量余弦相似度得到目标学生的相似学生,和学生自身知识水平向量结合得出学生最终的预测习题得分向量f.
4)输出(第3步):根据具体情况设置合适的难度范围[β1,β2],选出预测作答的概率在范围内的习题,产生对学生的个性化习题推荐.
3.2节将分别介绍DKT-CF的具体做法.
3.2 DKT-CF具体做法
3.2.1 知识追踪
在第一步中使用m个学生做习题练习的时间序列S={X1,X2,…,Xm},其中每个学生的联系序列Xi={xi1,xi2,…,xit}输入到循环神经网络中.将输入序列进行独热编码表示,如输入数据涉及k个习题,每道题分别由0,1来表示答错和答对,对应输入的长度为2k.如若学生答错了第i个问题,则输入中第i个位置的数值为1,其余位置为0,否则输入中第i+1位为1,其余为0.将数据编码后输入深度神经网络模型中,模型的输出序列yt建立在对前t时刻的学生习题练习序列的训练上,长度为问题总量n,每一位代表了每一个对应题目的答对概率.通过训练深度神经网络模型,对每个学生计算其知识水平向量,得到全体学生的知识水平向量矩阵U(m×n).
3.2.2 学生得分预测
对知识水平向量矩阵U,以余弦相似度的来判断向量Ui和Uj的相似程度.假设Ui={a1,a2,…,an},Uj={b1,b2,…,bn},则Ui和Uj的余弦相似度如公式(3):
(3)
通过余弦相似度的排名选择大于一定阈值(实验中为0.95)的学生作为相似用户,对于目标学生i,预测其最终的习题得分向量由公式(4)得到:
fi=ρ·Ui+(1-ρ)·average(Ni)
(4)
其中,Ui为学生的知识水平向量,average(Ni)为其相似学生的知识水平向量的平均值,学生个人的知识水平和学生之间共性的知识水平在使用fi进行预测时的比例由参数ρ调节,ρ的取值范围为[0, 1].随着ρ的增大,由学生个人知识水平产生的影响增大,特别的,当ρ=0,fi为其近邻学生的知识水平的平均,不包括学生个人的状态;当ρ=1,fi完全为DKT模型输出的个人知识水平向量.
3.2.3 输出
在这一步中,产生对学生的推荐结果.在产生习题推荐时,确定一个适当的难度范围[β1,β2](β2>β1)作为习题的难度区间,则可以根据学生的习题得分向量fi,向学生推荐正确概率在β1到β2的习题.例如将β1设置为0.6,β2设置为0.8,则会根据预测的习题得分向量向学生推荐正确回答概率在0.6到0.8的习题.
DKT-CF方法在产生习题推荐时在考虑学生个人的知识掌握水平的同时加入了学生之间相似群体的学习情况,其推荐的习题能够体现学生真实的知识水平,做到为学生推荐有一定难度的个性化习题.
算法1.基于深度知识追踪的协同过滤推荐方法DKT-CF
输入:学生历史答题提交序列S;目标难度范围[β1,β2];个性比例参数ρ;推荐习题数K
输出:推荐习题集合R
Begin:
1. s=onehot(S) //将输入进行onehot编码
2. U(m×n)=train_DKT(s) //训练深度知识追踪模型,输出知识水平向量矩阵U
3. for Ui∈ U //关于学生i
4. for Uj∈ U//遍历所有的知识水平向量
5. Simi,j=cosine_sim(Ui,Uj) //计算Ui,Uj的余弦相似度Simi,j
6. Ni=sim_rank(Simi) //根据相似度排名得到相似学生Ni
7. fi=ρ*Ui+(1-ρ)*average(Ni) //计算最终的习题得分向量
8. Ri=recommend(fi,K,β1,β2) //产生对学生i的推荐Ri
9. return R //推荐习题集合R
End
4 实 验
4.1 数据集介绍
实验采用了2组数据集,第1组数据为assistments2009公开数据集,assistments是一个公开在线教育平台,可以同时在线教授和评估学生学习,数据集包含了超过50万条小学数学习题提交数据.第2组数据集是从某高校在线编程平台(online judge)上爬取的学生提交历史纪录,两组数据集的相关信息如表1.
表1 数据集统计信息
Table 1 Dataset statistics
4.2 实验评价指标
4.2.1 精确率、召回率和f1值
为衡量本文提出的DKT-CF方法向学生产生个性化习题推荐的有效性,本文首先采用精确率(precision)、召回率(recall)和f1值的指标来评价DKT-CF的推荐效果,并和对比方法进行对比.评价指标的计算公式如公式(5)所示:
(5)
其中,TP代表推荐习题中学生正确回答的个数,FP代表推荐习题中学生错误回答的个数,FN代表其他待推荐习题中学生正确回答的个数.
4.2.2 正确回答率
精确率,召回率和f1值适合检验推荐中较简单的题目,但是个性化推荐的目标不是向学生推荐最容易完成的习题,虽然这三个指标可以从侧面反映出推荐系统的精确性,但是不能保证在推荐有一定难度的习题时,学生的表现依旧能够符合模型的预测.
为检验DKT-CF在一定难度阈值范围内进行个性化推荐时的有效性和可解释性,以答题的正确率SR作为评价指标评价其表现.SR的公式如公式(6):
(6)
其中right为推荐题目中学生回答正确的习题数,total为推荐题目总数.通过使用SR作为评价指标可以反映出学生在推荐习题上的总体表现,当难度的范围[β1,β2]发生变化时,SR也应该随之变化,并落入对应的区间中.
4.3 对比实验方法
为验证DKT-CF方法效果,选择以下几种方法进行对比:
1)DKT:根据DKT模型输出的学生知识水平向量,进行排名并推荐正确作答概率最高的习题.
2)DKT+:DKT+是文献[18]中提出的对DKT模型的改进,通过重构损失函数,引入正则项r,w1,w2,提高模型的稳定性和平均精度.r,w1,w2和修改后的损失函数如公式(7)、公式(8)和公式(9),其中loss表示原DKT的损失函数,λr,λw1和λw2分别为3个正则项对应的参数.
(7)
(8)
loss′ =loss+λrr+λw1w1+λw2w2
(9)
3)UserCF:使用学生-习题得分矩阵进行基于用户的协同过滤推荐,计算学生之间余弦相似度寻找相似学生,再根据相似学生的成绩预测目标学生的成绩,根据不同习题预测成绩的排名进行推荐.
4)KS-CF:使用学生知识水平向量矩阵U进行基于用户的协同过滤推荐,计算学生之间的余弦相似度,以相似学生的平均得分概率作为目标学生的得分概率,进而根据概率高低进行排名推荐.
4.4 实验及结果分析
4.4.1 实验环境
实验环境操作系统为windows10 64位,语言为python3.6,采用tensoflow gpu 1.13版本,显卡为NVIDIA GTX1080-8G,内存16G.
4.4.2 模型参数
在DKT模型训练阶段,隐含层采用200个LSTM节点,keep_prob设为0.5,学习率learning_rate设为0.01,训练轮数max_epoch设为200,每批数据大小batch_size设为32.
4.4.3 习题推荐对比实验
在习题推荐的对比实验中,实验将本文提出的DKT-CF对比4.3节中描述的四种方法,以精确度,召回率,f1值的指标来评价五种方法的效果.在两个数据集中,均随机划分80%的学生用于训练,其余20%的学生用于测试推荐方法.在进行测试时,选取测试集中每位学生70%的提交数据来产生推荐结果,对每个学生推荐5道题目,将推荐习题和后续的提交结果进行对比来检验推荐的精确性.
在实验中,根据实验设定学生个人因素的占比参数ρ=0.4(在后续的实验中会验证不同ρ取值的表现).
实验结果如表2、表3,从中可以得到以下信息:
1)在对两个数据集的实验中,提出的DKT-CF算法习题推荐效果均优于其他算法,精确度,召回率和f1值均为最高.说明DKT-CF方法相比其他方法能产生更精准的推荐结果,比其他方法更加有效.
表2 Assistments数据集实验结果
Table 2 Result of assistments dataset
DKTDKT+UserCFKS-CFDKT-CFprecision0.9570.9550.8850.9540.977recall0.2560.2810.2760.2380.287f10.4040.4340.4210.3800.444
2)在实验中,使用传统协同过滤算法的UserCF算法准确率相比较低,在融入了学生的知识状态后,得到了较好的效果(KS-CF方法),精确度的涨幅分别达到7.7%和6.4%,说明引入知识状态的信息来提高传统协同过滤的精确度的方法是有效的.
3)本文提出的DKT-CF是DKT方法和KS-CF方法的结合,达到了最优的效果,说明习题推荐中既考虑学生的个性又考虑学生学习的群体性的方法能够给出最有效的个性化习题推荐.
表3 OJ数据集实验结果
Table 3 Result of OJ dataset
DKTDKT+UserCFKS-CFDKT-CFprecision0.8490.8530.7950.8460.855recall0.3130.3140.2630.3050.318f10.4570.4590.3950.4480.463
4.4.4 习题难度范围实验
在本文提出的推荐方法步骤中,可以设置推荐习题对应的难度范围.为验证对于指定的难度范围[β1,β2],DKT-CF方法给出的推荐习题能否满足对应习题难度的要求,进行不同难度范围下对应学生的正确作答率SR变化情况的实验.
本文根据难度范围从0到1划分为5个区间,每个区间的难度跨度为0.2.在不同难度区间下,根据算法得出的学生正确做答概率,选择在难度区间内的习题作为推荐习题集,计算测试集中学生的回答正确比例.实验结果如表4、表5.
表4 assistments数据集正确率对比
Table 4 Comparison of SR in assistments dataset
β1-β20-0.20.2-0.40.4-0.60.6-0.80.8-1SR0.1700.3700.5820.7410.930
从实验结果可以看出,随着难度的逐渐降低,学生的正确作答率不断提高,例如,在[β1,β2]设置为[0.2,0.4]时,学生在两个数据集上的正确作答率分别为0.37 和 0.35左右,当[β1,β2]设置为[0.4,0.6]时,学生的正确作答率分别提高到0.58和0.50左右.实验说明,本文提出的DKT-CF方法可以根据不同的难度范围向学生推荐合适的难度的习题,从而使推荐效果有更好的实际意义和可解释性.
表5 OJ数据集正确率对比
Table 5 Comparison of SR in OJ dataset
β1-β20-0.20.2-0.40.4-0.60.6-0.80.8-1SR0.2280.3480.4990.6190.926
4.4.5 参数ρ的设置实验
在所提出的DKT-CF方法中,参数ρ的作用是调节学生个人知识水平和学生群体共性的知识水平对推荐结果影响的比例.ρ的取值范围为[0,1],当ρ越大,代表预测的习题得分向量更靠近学生个人的知识状态;当ρ越小,代表预测的习题得分向量更靠近与目标学生相似的学生群体知识状态.特别的,当ρ=1,方法退化为DKT方法;当ρ=0,方法退化为KS-CF方法.
图2 assistments数据集f1值变化
图2、图3显示了DKT-CF方法分别在两个数据集下以不同的ρ来进行推荐时,参数f1值与ρ之间的变化关系.从实验结果可以看出,ρ的取值对推荐效果有明显影响,并且对于两个数据集,ρ=0.4时均达到了最高的f1值.虽然在图3中ρ=0.2和0.6时与最高值相差不大,但是在图2中差距比较明显,说明ρ=0.2和ρ=0.6时稳定性可能不如ρ=0.4的情况.综合考虑算法的表现和稳定性后,决定选取ρ=0.4作为进行其他实验时的算法参数.
图3 OJ数据集f1值变化
4.4.6 结果讨论
从上述实验结果可以看出,本文提出的基于深度知识追踪的个性化习题推荐方法DKT-CF不论是较简单题的习题推荐效果,还是推荐有一定难度习题时,预期难度与选择习题的难度的贴合度上,均有较好的表现.这是因为DKT-CF方法既考虑学生个人的知识掌握水平(DKT模型),又考虑了学习的群体性,加入了相似学生之间的信息(协同过滤方法).相比于传统的协同过滤方法,该方法有更好的精确度和可解释性,相比于基于知识状态建模的方法,该方法具有更好的可靠性和拓展性.
5 结论和展望
针对传统协同过滤推荐方法没有考虑学生的知识掌握水平和基于知识建模的推荐方法忽略了学生之间学习的群体性的缺点,本文提出了一种基于深度知识追踪的个性化习题推荐方法DKT-CF.该方法以学生的历史答题提交序列作为输入,方法的第1步为结合深度知识追踪模型对学生的知识掌握水平进行建模;第2步将学生的知识水平向量作为计算相似学生的参考得出相似用户,并结合个人的知识水平向量得出预测的目标得分向量,在考虑学生个人状态信息的同时加入了相似学生的群体信息;在第3步中,根据一定的难度范围[β1,β2],选择正确作答概率在范围内的习题对学生进行推荐;最后通过实验证明了本文提出的DKT-CF方法的有效性和合理性.
在后续的研究中,从模型出发,可以考虑对深度知识追踪模型进行改进,加入更多个性化特征进行学习;从推荐方法出发,可以考虑结合其他的推荐算法产生推荐;从推荐的场景出发,在不同场景下的推荐策略也是一个值得探讨的问题,比如根据难度不同区分出用于拓展提高的推荐题目和用于复习巩固的推荐题目等,可以更有针对性地进行个性化习题推荐.