万永权 燕彩蓉 朱 明 苏厚勤
1(上海建桥学院计算机科学与技术系 上海 201306) 2(东华大学计算机科学与技术学院 上海 201620)
移动互联网、智能终端设备和社会网络平台为全方位海量信息的产生、收集和分析提供了保障,促进了个性化在线教育的发展与普及。个性化在线教育是一种基于互联网数据来分析用户学习状况,满足其学习需求的平台,系统会根据用户的年龄和知识积累,甚至心理活动,判断该用户的教育水平,并在此基础上提供相应难度的课程、资料和题库等[1-2]。这从根本上改变了传统教育中机械的教学体系和教学方法,让教育量身定制成为可能。
试题推荐服务是个性化在线教育平台的关键环节,主要用于促进学生对知识点的理解,评价其学习效果[3-4]。传统意义的推荐系统是利用电子商务网站向客户提供商品信息和建议,从而帮助用户决定需要购买的商品,或者模拟销售人员帮助客户来完成购买过程。随着移动互联网的发展和大规模数据的产生,推荐系统也被辐射到在线教育领域,通过帮助制定个性化学习方案以及提供更多的参考资料,使得用户可以便捷地获取学习资源,打破时间和空间的限制来学习。由于试题资源数量庞大,学生想在有限的时间内练习所有的试题几乎是不可能的。因此,如何帮助学生掌握各个知识点,更快地评价其学习的状态,是一个重要的问题。目前推荐方法聚焦于基于用户产生的海量学习活动数据以及社会网络群,利用相关技术手段如深度学习不断优化学习模型,并依此构建自适应学习系统或者从多样性的角度进行推荐[5-6]。
个性化推荐重在了解每个学生的状态及其能力。本文将对试题属性进行细粒度的划分,从试题难度、认知层次和知识点来评价学生对课程的掌握程度。面向学生个性化学习提出试题推荐算法并阐述其中的关键技术,精准地对学生的个性化知识点掌握程度进行建模,相关算法和技术能够辐射到其他学科。
个性化推荐是根据用户的属性特征和兴趣爱好,通过采集和分析其历史行为,得出符合规则的推荐内容即项目。为了使推荐效果更好,系统需要充分地收集用户的属性,或者找到与该用户有相同兴趣爱好的其他用户进行推荐。推荐系统中重要的三个关系是用户、项目和评分矩阵[7],在面向学生的试题推荐系统中,三者之间的具体含义表述如下:
定义1用户:即学生,设U为所有学生的集合,m=|U|。
定义2项目:即试题,设V为可以推荐给学生的所有试题的集合,n=|V|。
定义3评分矩阵:每个学生对每个试题都可能产生一个评分,其值构成了学生-试题评分矩阵Rm×n。很多传统推荐方法都是根据评分矩阵提供推荐项目列表,Rij(1≤i≤m,1≤j≤n)的值表示学生Ui对试题Vj可能的掌握程度,其初始值通常设为0,最大值设为1。
本文采用基于内容的推荐方法[8-9],即通过对用户属性和项目的特征描述进行分析,选择与用户属性相似度最高的项目进行推荐。需要为每个用户和每个项目分别建立属性向量,然后把用户属性向量与项目属性向量进行对比,两者相似性越高,说明用户对该项目越喜欢,否则,用户对该项目可能没有兴趣,可以通过建立相似性函数来完成[10]。在这里,体现为学生对试题的掌握程度,要给学生推荐他没有掌握并且难度最适合他的知识。
基于内容的推荐方法的优点是:用户之间相互独立,其属性只依赖于自身的兴趣,根据项目的属性与用户属性是否相似进行推荐,这样设计的推荐系统具有良好的解释性;而且项目的冷启动影响较小,因为新项目可以根据其属性信息立即得到推荐。其不足之处在于:单个用户的属性有限,难以与项目属性进行对比,只能分析一些较容易的文本信息;用户的冷启动影响较大,因为无法向没有历史记录的新用户提供更好的服务。试题推荐中涉及的用户都是学生,信息相对准确和全面,可以弥补基于内容进行推荐的不足。
每门课程有不同的知识点,不同的知识点对应不同的试题,试题的复杂性也会反应该知识点的难度。在试题推荐时,要根据不同学生的状态推荐难度适中的题目,给初学者推荐难度很大的题目或者给基本掌握该知识点的同学推荐很简单的题目都是不合适的。因此,试题的属性特征对于构建精准的推荐模型非常重要。经过大量分析和实验,对每个试题属性做如下约定:
1) 试题难度:A、B、C、D,从简到难分为4档,其中D档难度最高,每个试题必须具有难度属性。
2) 试题认知层次:Ⅰ、Ⅱ、Ⅲ、Ⅳ,分别表示识记、理解、简单应用和综合应用,认知层次逐步加深。
3) 试题题型:1、2、3,分别对应单项选择、多项选择、填空。由于在线试题采用在线系统自动阅卷方式,目前暂没有设置简答题和综合题。
4) 试题知识点:针对不同课程由教师或管理员设置不同的知识点,如《操作系统》课程的知识点可以是进程同步、处理器调度、存储器管理等。每个知识点可以包含不同难度、不同认知层次的题目,便于评估学生对于不同知识点的理解能力,以及为不同学习阶段的学生推荐不同的试题。
对于试题Vj,其难度、认知层次、题型和知识点属性分别表示为:Vj.diff、Vj.level、Vj.type、Vj.know。
试题推荐与传统推荐的不同在于:传统推荐中各项目是独立的,项目之间通过属性可以评价或计算两者的相似性,这种相似性可以作为参考为用户提供推荐;试题推荐时,每个试题属于某个知识点,相同知识点相同难度的试题不需要重复地推荐给学生,而且如果学生已经掌握了难度更大的试题,那么相对简单的试题就不需要再推荐给该学生。因此,推荐算法要考虑的情况更加复杂。为了把学生能力与试题属性关联起来,还需设置两个矩阵,分别用于记录学生对知识点难度的掌握程度,以及学生对知识点认知层次的掌握程度,在进行试题推荐时,综合考虑这些因素。
定义4难度能力矩阵:对于某课程A,包括多个知识点,设K为可以推荐给学生的所有知识点的集合,l=|K|。每位学生对每个知识点的难度对应一个能力,其值构成了学生-知识点相关的难度能力矩阵KDm×l。KDip(1≤i≤m,1≤p≤l)的值表示学生Ui对知识点Kp可能的掌握难度,其初始值设为0,最大值设为4(对应难度D)。
定义5认知能力矩阵:每位学生对每个知识点都可能产生一个认知能力,其值构成了学生-知识点相关的认知能力矩阵KLm×l。KLip(1≤i≤m,1≤p≤l)的值表示学生Ui对知识点Kp可能的认知能力,其初始值设为0,最大值设为4(对应认知层次Ⅳ)。
学生-试题评分矩阵的计算方法如下:
1) 如果学生Ui是新用户,那么他对试题Vj的评分值为0,因为该学生没有做过任何测试,Rij=0。
2) 如果学生Ui获得一份试题推荐,并且提交给系统,那么系统可以根据学生的答题情况对评分矩阵、难度能力矩阵、认知能力矩阵进行更新,见算法1所示。
算法1评分矩阵、难度能力矩阵、认知能力矩阵更新
输入:Ui,Vj,KD,KL,R,answer
输出:KD,KL,R
begin
intp=Vj.know;
//获得试题Vj的知识点ID
if(answer==true) then
Rij=1;
//用户答题正确
KDip=max{KDip,Vj.diff};
//调整难度能力值
KLip=max{KLip,Vj.level};
//调整认知能力值
else
Rij=0;
//用户答题错误
KDip=min{KDip,Vj.diff};
//调整难度能力值
KLip=min{KLip,Vj.level};
//调整认知能力值
returnKD,KL,R;
end
传统试题推荐主要根据评分矩阵为学生选择相关试题集。为了给学生推荐本门课程最符合学生能力值的试题,本文综合考虑三个矩阵:评分矩阵、难度能力矩阵和认知能力矩阵,采用以下推荐原则:
1) 对于某个知识点,如果学生对应的难度能力和认知能力均已达到该知识点中所有试题的最高难度和最高认知,那么说明该学生已经完全掌握了该知识点,可以推荐其他的知识点。
2) 否则,从试题中推荐学生没有做过(或者没有做对过),而且该试题难度或认知不低于学生对该知识点的难度或认知能力的题目。具体描述见算法2所示。
算法2试题推荐
输入:i,V,KD,KL,R
输出:recList
begin
intj,p;
ListcandRecList=null;
//创建一个候选试题集
for eachvinVdo
j=v.ID;
p=v.know;
if (Rij==0 && (Vj.diff>=KDip||Vj.level>=KLip)) thencandRecList.add(v);
//满足条件的添加到候选试题集
recList=topK(candRecList);
//从候选试题集中推荐top-K
returnrecList;
end
试题的难度和认知层次由管理员或者教师来设置,这个设置对于试题推荐非常关键,会影响推荐的效果和学生的测评。通常,教师对于试题的题型、知识点和认知层次都能非常准确地把握,但是对于试题难度只能根据经验来判断;而且不同教师对于难度的认同也不一样。为了更客观地评价学生对知识点的掌握程度,我们将根据学生的反馈对试题难度进行调整,显然单个学生的答题状况不足以说明问题,所以难度调整采用手动方式,由管理员来处理。如系统分析发现大部分学生都能够做对某个试题,而这个试题的难度设置为C,那么就需要对难度进行适当的调整,具体见算法3所示。
算法3试题难度调整
输入:T,V
//T为所有学生对试题的提交记录集合
输出:V
//对试题的难度属性进行更新
begin
intnewDiff[n]=0;
//为每个试题设置新的难度值
intcount[n];
//记录每个试题被提交的次数
inti,j,p;
for eachtinTdo
i=t.student;
//获得学生的ID
j=t.problem;
//获得试题的ID
p=Vj.know;
//获得试题对应的知识点
if (t.diff>=Vj.diff&&t.answer==false) then
//学生做题时的能力高于试题
newDiff[j]--;
//可能难度太高
if (t.diff<=Vj.diff&&t.answer==true) then
//学生做题时的能力低于试题
newDiff[j]++;
//可能难度太低
count[j]++;
for (intj=0;j++;j if (abs(newDiff[j])>=count[j]/2) then if (newLevel[j]>0) then Vj.diff--; Vj.diff=max(1,Vj.diff); else Vj.diff++; Vj.diff=min(4,Vj.diff); return V; end 结合试题属性标准化和学生能力评分方法,试题推荐算法以及基于反馈的试题难度调整策略,提出面向在线学习的个性化试题推荐系统框架,框架主要由三部分组成。如图1所示。 1) 数据收集与准备:通过数据采集模块,收集学生和试题的基本属性数据,学生数据通过注册平台由学生自行输入,试题数据由管理员或教师输入,其中有些输入如题目类型和知识点是客观的,有些数据如试题难度和认知层次则相对主观,尤其是试题难度,不同教师可能会有不同的判断标准。学生在线测试记录也要保存,便于后续对试题难度进行调整。把这些数据按照设定的格式存储到数据库系统中。 2) 数据预处理及模型建立:从用户的注册信息中筛选对用户学习行为和兴趣偏好有重要影响的数据,并进行量化,从而构成用户属性;根据管理员或教师录入的试题信息中筛选对试题推荐有影响的数据,预处理后构成项目属性;根据学生答题情况计算用户-项目评分矩阵值,该矩阵通常维度非常高,而且是稀疏矩阵,可以采用矩阵分解技术对高维数据进行降维。 3) 推荐系统构建:建立推荐模型,对推荐结果进行展现和评价。目前已有的研究成果中涉及的数据集大多是小规模或模拟的数据集,当面对实际应用时,需要方法和框架能够满足大规模在线应用的并发性和实时性要求,这将成为在线推荐系统领域新的挑战。同时测试结果还要反馈给系统,便于难度调整。 图2所示为教师端试题录入界面,当教师在输入试题时需要录入试题的属性,为推荐提供参考。系统开发采用LAMP方式,即Linux系统+Apache服务器+MySQL+PHP。所提出的推荐方法在“Linux系统”课程的题库系统中得到验证,通过测试后学生能够更高效、更准确地提升能力。 通过研究个性化试题推荐系统中试题属性及其与学生能力之间的关系,提出个性化的试题推荐算法以及基于学生在线测试反馈的试题难度调整算法。通过PHP设计并实现了试题推荐系统,并在Linux系统课程中进行了实践,为个性化在线学习提供理论和实践上的指导。 目前的试题难度调整是非定期地由管理员提出请求,采用手动方式,下一步的研究将把该模块自动化,由系统定期自动更新。4 推荐系统框架
5 结 语