向程冠,周東波,李 雷,王 英
(1.華中師范大學(xué) 教育大數(shù)據(jù)應(yīng)用技術(shù)國家工程實驗室,湖北 武漢 430079;2.貴州師范學(xué)院 數(shù)學(xué)與大數(shù)據(jù)學(xué)院,貴州 貴陽 550018)
編程題目推薦是在線編程教學(xué)平臺不可缺少的智能導(dǎo)學(xué)功能之一,但目前大多數(shù)的在線編程教學(xué)平臺還停留在教師傳統(tǒng)課堂的網(wǎng)絡(luò)化時空延伸,缺乏智能,只是起到連接師生的作用,教師可以給學(xué)生安排編程練習(xí)或考試,但針對學(xué)生個性化差異的智能導(dǎo)學(xué)功能薄弱,缺少針對編程題目推薦的服務(wù),并未很好發(fā)揮對學(xué)習(xí)者學(xué)習(xí)行為分析、學(xué)習(xí)意圖理解、學(xué)習(xí)狀態(tài)追蹤的作用,很難實現(xiàn)真正意義上的自適應(yīng)學(xué)習(xí)診斷與有效學(xué)習(xí)。因此,通過學(xué)習(xí)者做題情況推薦新的編程題目成為了編程教育智能導(dǎo)學(xué)的研究熱點之一。針對編程題目的特殊性與傳統(tǒng)推薦算法的缺點,提出一種基于關(guān)聯(lián)規(guī)則與知識追蹤的編程題目推薦算法。
個性化題目推薦是智能教育領(lǐng)域中的重要問題之一[1]。通過計算學(xué)生做題的歷史數(shù)據(jù)或用戶特征數(shù)據(jù),給用戶推薦合乎規(guī)則的題目,以達到個性化的智能導(dǎo)學(xué)服務(wù)。題目推薦時大多采用基于協(xié)同過濾、基于認(rèn)知診斷與知識追蹤的推薦算法,然而基于協(xié)同過濾的算法忽略了題目之間的關(guān)聯(lián)信息,難以保證所推薦題目的解釋性與合理性。認(rèn)知診斷與知識追蹤的方法通過計算學(xué)生對知識點的掌握情況,預(yù)測待推薦題目的得分情況,但忽略了學(xué)生學(xué)習(xí)行為的共性,難以將隱藏的潛在屬性加入計算中,極易產(chǎn)生推薦誤差。
Raciel Yera等提出了一種基于問題記憶的協(xié)同過濾算法[2],用問題矩陣記錄學(xué)生解決問題時失敗的信息,從而為學(xué)生推薦編程題目,但未記錄問題與知識點之間的關(guān)聯(lián)信息,不能判斷學(xué)習(xí)者是否已經(jīng)掌握知識點,反復(fù)推薦題目,浪費了學(xué)習(xí)者寶貴的學(xué)習(xí)時間。馬驍睿等提出了一種結(jié)合深度知識追蹤的個性化習(xí)題推薦方法[3],然而忽略了學(xué)習(xí)者學(xué)習(xí)行為過程,未考慮學(xué)習(xí)過程中推薦拔高題或鞏固題。Avi Segal等提出了一種將協(xié)同過濾與投票相結(jié)合的教學(xué)內(nèi)容個性化排序算法[4],通過協(xié)同過濾算法計算相似學(xué)生在分?jǐn)?shù)、重試次數(shù)和解題時間方面的難度排名,從而預(yù)測學(xué)生的難度排名,給學(xué)生定制個性化的試題,但忽略了學(xué)生對知識點的掌握狀態(tài)。黃振亞提出了一種融合題目語義的知識追蹤框架[5],挖掘題目內(nèi)容的個性特征對學(xué)生學(xué)習(xí)行為過程的影響,并在英語與數(shù)學(xué)題目上作了驗證,但對于編程題目卻很難從題目描述層面判斷題目間的關(guān)聯(lián)性。柏茂林通過計算能力水平相近的用戶組,將kNN協(xié)同過濾算法應(yīng)用于數(shù)學(xué)習(xí)題的個性化推薦中[6]。Surya Kant等提出了基于用戶和項目的協(xié)同過濾算法[7],通過計算用戶相似度與項目相似度進行推薦。萬永權(quán)等提出反饋式個性化試題推薦方法[8],從試題難度與認(rèn)知層次進行標(biāo)準(zhǔn)化,構(gòu)造能力矩陣計算學(xué)生的能力進行試題推薦,但只能應(yīng)用于客觀題,不能應(yīng)用于編程題目的推薦中。
知識追蹤通過歷史數(shù)據(jù)實時追蹤學(xué)習(xí)者對知識掌握狀態(tài)的變化,并預(yù)測學(xué)習(xí)者在未來學(xué)習(xí)中的表現(xiàn),目前流行的知識追蹤方法主要有貝葉斯知識追蹤(BKT)模型與基于循環(huán)神經(jīng)網(wǎng)絡(luò)的深度知識追蹤(DKT)模型[9,10],BKT只是將知識的掌握情況簡單分為“掌握”與“未掌握”,忽略了學(xué)習(xí)過程,而DKT模型只能對學(xué)習(xí)者整個知識水平建模,不能反映學(xué)習(xí)者對各個知識點的掌握情況。Jiani Zhang等提出了基于記憶網(wǎng)絡(luò)的DKVMN模型[11],用值矩陣表示學(xué)習(xí)者對各個知識點的掌握情況,并記錄題目與各知識點的依賴關(guān)系,從而追蹤學(xué)習(xí)者對各知識點的掌握情況,取得了良好的應(yīng)用效果,但忽略了學(xué)習(xí)者遺忘行為對知識點掌握的真實影響。Fangzhe Ai等在DKVMN模型的基礎(chǔ)上,加入了知識點的包含關(guān)系,改良了記憶矩陣[12]。李曉光等研究者提出了學(xué)習(xí)與遺忘融合的深度知識追蹤模型[13],考慮了遺忘行為對知識追蹤影響,取得了較好的預(yù)測性能。
編程能力是計算機相關(guān)專業(yè)的學(xué)生應(yīng)具備的關(guān)鍵能力之一,編程能力水平主要體現(xiàn)在完成編程題目的得分情況,學(xué)習(xí)者對于編程的學(xué)習(xí)過程不是簡單的“對”與“錯”,一道編程題往往要經(jīng)過多次提交與反復(fù)修改才能完成,見表1,學(xué)習(xí)者完成一道程序題嘗試提交了10次。因此,直接使用傳統(tǒng)的個性化題目推薦算法推薦編程題目是不合適的。同時,在推薦題目時不考慮學(xué)生對知識點的掌握狀態(tài),不斷推薦題目將會浪費學(xué)習(xí)者寶貴的時間。
表1 編程題目提交列表
針對現(xiàn)有算法在編程題目推薦中的缺點,結(jié)合編程題特點,考慮學(xué)習(xí)者的遺忘規(guī)律特征,本文提出了一種基于關(guān)聯(lián)規(guī)則與知識追蹤的編程題目推薦算法,將關(guān)聯(lián)規(guī)則挖掘與知識追蹤結(jié)合起來,按提交次數(shù)閾值,把同一學(xué)習(xí)者在同一知識點下同時做對或做錯的題目組成交易記錄,從而挖掘出推薦規(guī)則,通過知識追蹤模型計算學(xué)習(xí)者對知識點的掌握情況,決定推薦鞏固題、拔高題或下一知識點的題目。
在編程題目推薦時,如果學(xué)習(xí)者已經(jīng)掌握了當(dāng)前知識點,就應(yīng)該推薦下一個知識點的題目,否則應(yīng)根據(jù)學(xué)習(xí)者的學(xué)習(xí)狀態(tài),決定推薦鞏固題或者拔高題,以免浪費學(xué)習(xí)時間,提高學(xué)習(xí)效率。因此,在設(shè)計推薦算法時需要解決兩個關(guān)鍵問題:
(1)如何計算推薦鞏固題或拔高題?
(2)如何計算學(xué)習(xí)者對知識點的掌握情況?
對于問題(1),考慮將同一學(xué)習(xí)者在同一個知識點下,嘗試提交次數(shù)超過給定閾值時同時做錯、同時做對的題目組成交易數(shù)據(jù)庫,根據(jù)知識點的順序關(guān)系,使用關(guān)聯(lián)規(guī)則算法挖掘出推薦規(guī)則,對于嘗試提交次數(shù)超過給定閾值的學(xué)習(xí)者推薦鞏固題,嘗試次數(shù)小于閾值時推薦拔高題,直到學(xué)習(xí)者掌握當(dāng)前知識點時,推薦下一知識點的題目,學(xué)習(xí)者不需要做完當(dāng)前知識點下的所有題目。
對于問題(2),考慮編程題目的特殊性與學(xué)習(xí)者遺忘規(guī)律,不能只是簡單地從結(jié)果的“對”與“錯”來評估學(xué)習(xí)者對知識點的掌握情況,雖然DKVMN模型可以通過記錄題目與各知識點的依賴關(guān)系,從而追蹤學(xué)習(xí)者對各知識點的掌握情況,然而沒有考慮到學(xué)習(xí)者的遺忘規(guī)律,也不適合編程題目的特殊性。在編程題目推薦算法時,先用DKVMN模型計算出學(xué)習(xí)者對知識點的掌握情況,再聯(lián)合使用判別分析模型,從編程題目的特殊性與學(xué)習(xí)者遺忘規(guī)律的維度評估學(xué)習(xí)者對知識點的掌握情況。
編程題目推薦時,可根據(jù)學(xué)生完成題目x的情況推薦題目集 {y1,y2,…,yn} (由n個鞏固題或拔高題組成的集合),x與yi(1≤i≤n) 是二元的推薦關(guān)系,不考慮yi與yj之間是否有推薦關(guān)系 (i≠j, 1≤i≤n, 1≤j≤n)。 因此,用關(guān)聯(lián)規(guī)則挖掘題目之間滿足規(guī)則的二階大項集。
關(guān)聯(lián)規(guī)則作為數(shù)據(jù)挖掘中的研究熱點之一,用于挖掘數(shù)據(jù)間隱含的、未知的、有價值的關(guān)聯(lián)性[14]。Agrawal等提出了關(guān)聯(lián)規(guī)則挖掘的Apriori算法與AprioriTid算法[15],使用上一次生成的大項集作為生成新候選項集的數(shù)據(jù)基礎(chǔ),達到剪枝的目的,提高算法的執(zhí)行效率。其優(yōu)點是在首次計算大項集時掃描交易數(shù)據(jù)庫,以后每次用得到的候選項集構(gòu)造k階TID表,由k階TID表生成k+1階候選項集,除了在算法的開始階段,所構(gòu)造的TID表都要比交易數(shù)據(jù)庫小,從而減少數(shù)據(jù)掃描次數(shù)。可其缺點是在開始階段生成的TID表數(shù)據(jù)量有可能比交易數(shù)據(jù)庫大,存儲了k階TID表中下一次計算k+1階候選項集時不用的噪聲交易項,增加了掃描次數(shù),造成了不必要的I/O操作。針對上述缺點,算法改進的關(guān)鍵在于減少I/O操作與壓縮數(shù)據(jù)量[16],因編程題目推薦時需要計算二階大項集,正處于AprioriTid算法的開始階段,本文提出了一種AprioriTid的改進算法,用于計算題目集的二階大項集。
性質(zhì)1 A、B為題目構(gòu)成的兩個交易集合,若A是B的子集,則A的范數(shù)不大于B的范數(shù)。反之,若A的范數(shù)大于B的范數(shù),A必然不是B的子集。
性質(zhì)2 當(dāng)k>1時,k階候選項集一定是k-1階候選項集的子集,那么k階候選項集的元素一定取自于k-1階候選項集。
算法改進的基本思想:由性質(zhì)1、性質(zhì)2可知,k+1階候選項集是k階候選項集的子集,它的生成依賴于k階TID表,在構(gòu)造k階TID表時,先計算k階大項集的冪集,再計算當(dāng)前交易項與k階大項集冪集的交集,如果交集的范數(shù)大于k,則將交集寫入k階TID表中,可極大減少k階TID表的記錄數(shù),故而減少計算k+1階候選項集時的數(shù)據(jù)掃描量與I/O操作,TID表記錄數(shù)不可能比交易數(shù)據(jù)庫大,可讓算法在執(zhí)行效率上得到明顯優(yōu)化。
用偽代碼描述改進后的AprioriTid 算法如下:
(1)掃描題目構(gòu)成的交易數(shù)據(jù)庫D生成L[1];
(2)TID[1]=D;//1階TID表就是交易數(shù)據(jù)庫D
(3)for(k=2;L[k-1] !=null&&TID[k-1]!=null;k++){
(4)C[k]=Apriori_gen(L[k-1]);
(5) //使用Apriori_gen生成k階候選項集
(6) TID[k]=null;
(7) foreach(tin TID[k-1]){
(8) foreach(cinC[k])if(cint)c.Sup=c.Sup+1;
(9)L[k]=null;
(10) foreach(cinC[k])if(c.Sup≥Minsup)L[k]=L[k]+c;
(11)M=PowerSet(L[k]);//計算L[k]的冪集
(12)MT=t.item∩M;//交易項與候選項集冪集的交集
(13) if(MT!=null&&|MT|>k){//|MT|>k的項寫入TID[k]
(14)p.id=t.id;
(15)p.item=MT;
(16) TID[k]=TID[k]+p;
(17) //加入k階TID表, 包含交易id與交易項
(18) }
(19) }
(20)}
表2給出了上述算法中所涉及的符號及描述。
表2 算法中的符號及描述
例:現(xiàn)有交易數(shù)據(jù)庫D,見表3,設(shè)最小支持?jǐn)?shù)為3,計算候選項集與大項集。
表3 交易數(shù)據(jù)庫D
C[1]={{A},{B},{C},{D},{E},{F},{G}},L[1]={{A},{B},{C},{D},{E}},L[1]的冪集M={A,B,C,D,E}, 求M與每個交易項的交集MT, |MT|>1時寫入TID[1]中。由TID[1]生成C[2]={{A,B},{A,C},{A,D},{A,E},{B,C},{B,D},{B,E},{C,D},{C,E},{D,E}},L[2]={{A,B},{A,C},{A,D},{B,C},{B,D},{C,D},{D,E}},L[2] 的冪集M={A,B,C,D,E}, 求M與每個交易項的交集MT, |MT|>2時寫入TID[2]中。迭代算法直到TID為空時結(jié)束,算法過程如圖1所示。
圖1 改進的AprioriTid算法過程
題目推薦的目的是為了讓學(xué)習(xí)者通過練習(xí)掌握知識,如果掌握了當(dāng)前知識點,就應(yīng)推薦下一知識點的題目。如果推薦時不考慮知識點掌握狀態(tài),不斷為其推送當(dāng)前知識點的題目顯然是不合理的。對于編程題目,一道題目需要經(jīng)過若干次反復(fù)修改與提交才能完成,在計算學(xué)習(xí)者對知識點的掌握情況時需要滿足兩個方面的要求:一是能反應(yīng)學(xué)習(xí)者對當(dāng)前知識點的掌握情況,二是要考慮編程題需要經(jīng)過若干次反復(fù)修改與提交才能完成的特殊性,一般認(rèn)為學(xué)習(xí)者對一道編程題目嘗試提交次數(shù)越多,反應(yīng)出學(xué)習(xí)者對知識點的掌握越不好。因此,考慮在DKVMN模型的基礎(chǔ)上,加入學(xué)習(xí)者每次提交的狀態(tài)、所用知識點及提交次數(shù)、學(xué)習(xí)間隔時間、上次提交時所用知識點間隔時間等行為特征,運用判別分析計算學(xué)習(xí)者學(xué)習(xí)行為對DKVMN模型預(yù)測結(jié)果的影響。
用GA表示掌握知識點,GB表示未掌握知識點。X(i) 表示學(xué)習(xí)者特征,X(1)表示嘗試提交次數(shù),X(2)表示課程學(xué)習(xí)間隔時間,X(3)表示同一知識點學(xué)習(xí)間隔時間。X(2)、X(3)屬于學(xué)習(xí)者遺忘特征數(shù)據(jù),根據(jù)德國心理學(xué)家艾賓浩斯遺忘曲線,學(xué)習(xí)間隔時間按間隔天數(shù)t分段計算,即
(1)
因此,學(xué)習(xí)者數(shù)據(jù)被分成兩組: {X1i(A),X2i(A),X3i(A)|i≤n1} 與 {X1j(B),X2j(B),X3j(B)|j≤n2},n1+n2為學(xué)習(xí)者人數(shù)。
下面給出求判別指標(biāo)的過程[17]。
通過線性組合構(gòu)造一個判別函數(shù),用于判斷學(xué)習(xí)者學(xué)習(xí)狀態(tài),判別函數(shù)為
Y=L(X1,X2,X3)=C1X1+C2X2+C3X3
其中,C1、C2、C3為判別系數(shù)。
對于GA,n1個學(xué)生共有3*n1條數(shù)據(jù),其觀測數(shù)據(jù)矩陣為
對于GB,n2個學(xué)生共有3*n2個數(shù)據(jù),其觀測數(shù)據(jù)矩陣為
判別函數(shù)Y可最大限度區(qū)分GA與GB兩組狀態(tài)。GA有n1個樣本
i為1到n1的自然數(shù)。代入判別函數(shù),可得
yi(A)=C1X1i(A)+C2X2i(A)+C3X3i(A)
GB有n2個樣本
i為1到n2的自然數(shù)。代入判別函數(shù),可得
yi(B)=C1X1i(B)+C2X2i(B)+C3X3i(B)
在判斷學(xué)生是否掌握知識點時,將學(xué)習(xí)特征數(shù)據(jù) {X(1),X(2),X(3)} 代入判別函數(shù)Y,如果Y的值大于等于yAB時判別為未掌握該知識點,否則判別為已掌握該知識點。
針對編程題目的特點,按學(xué)習(xí)者嘗試提交次數(shù)閾值把作答歷史記錄數(shù)據(jù)庫劃分為兩個庫,在提交次數(shù)小于等于閾值的數(shù)據(jù)庫中,將同一學(xué)習(xí)者在同一知識點下同時做對或做錯的題目組成交易項,使用關(guān)聯(lián)規(guī)則挖掘出鞏固題推薦規(guī)則。解決一道編程題目需要多次修改與提交,熟練掌握了知識點的學(xué)生解決編程題目的提交次數(shù)相對較少,可用掌握了知識點的學(xué)生在完成編程作業(yè)時的平均提交次數(shù)作為劃分閾值。
同理,在提交次數(shù)大于閾值的數(shù)據(jù)庫中,將同一學(xué)習(xí)者在同一知識點下同時做對或做錯的題目組成交易項,挖掘出拔高題目推薦規(guī)則。推薦時考慮題目提交次數(shù)與學(xué)習(xí)者遺忘特征,使用知識追蹤的DKVMN模型與判別分析模型計算學(xué)習(xí)者對當(dāng)前知識點的掌握狀態(tài),決定推薦鞏固題、拔高題或下一知識點的題目。
本文算法具體步驟如下:
步驟1 根據(jù)學(xué)習(xí)者做題歷史記錄,使用改進后的關(guān)聯(lián)規(guī)則挖掘算法生成推薦規(guī)則。
步驟2 生成DKVMN模型。
步驟3 生成各知識點的判別函數(shù)Y與yAB。
步驟4 輸入學(xué)生做題記錄,由DKVMN模型評估學(xué)生是否通過當(dāng)前知識點,未通過執(zhí)行步驟6,否則執(zhí)行步驟5。
步驟5 輸入學(xué)生學(xué)習(xí)特征數(shù)據(jù):題目提交次數(shù)、同一知識點學(xué)習(xí)間隔時間、課程學(xué)習(xí)間隔時間,并代入與判別函數(shù)Y,如果函數(shù)值大于等于yAB執(zhí)行步驟6,否則執(zhí)行步驟7。
步驟6 嘗試提交次數(shù)超過給定閾值時推薦鞏固題,嘗試次數(shù)小于閾值時,推薦拔高題,執(zhí)行步驟4。
步驟7 推薦下一知識點的題目。
為了驗證本文提出的編程題目推薦算法的可行性與有效性,采用某高校在線編程教學(xué)平臺的實際生產(chǎn)數(shù)據(jù)進行實驗,以C程序設(shè)計課程為對象,經(jīng)過專家標(biāo)注的知識點共124個,學(xué)生754人,程序提交1 358 973次,編程題目6230道。
算法實現(xiàn)采用Python語言編寫,運行的硬件環(huán)境為Intel(R) Core(TM)i7-8550U CPU @1.80 GHz(8 CPUs),16 G內(nèi)存,操作系統(tǒng)為CentOS6。
關(guān)聯(lián)規(guī)則的改進算法評估從算法效率與精準(zhǔn)性2個方面進行考量,算法效率從時間復(fù)雜度方面考量,精準(zhǔn)性反映算法的可靠程度與可行性,它們是推薦算法可靠可行的基礎(chǔ)保障。
題目推薦算法評價從題目推薦的覆蓋率(Coverage)和準(zhǔn)確率 (Precision)2個方面進行考量,覆蓋率主要用于觀察算法推薦的題目集合Prc與實際可推薦的題目集合Preal交集中題目數(shù)量占實際可推薦的題目比率,計算公式如下
(2)
準(zhǔn)確率主要用于觀察題目推薦算法的正確性與可行性,其計算方式為所推薦的準(zhǔn)確題目所占推薦題目總數(shù)的百分比,值越大表示推薦算法的正確性越高,計算公式如下
(3)
3.3.1 改進的AprioriTid算法分析
算法效率分析:選取最小支持?jǐn)?shù)為50,從1 358 973條提交記錄中隨機選擇0.5 w、1 w、1.5 w、2 w、2.5 w、3 w、3.5 w和4 w進行對比測試,運行結(jié)果如圖2所示。另外選取數(shù)據(jù)量為4.5 w,最小支持?jǐn)?shù)分別為60、80、100、120、140、160、180和200進行對比測試,運行結(jié)果如圖3所示。
圖2 最小支持?jǐn)?shù)為50時兩種算法的運行時間
圖3 隨最小支持?jǐn)?shù)增大時執(zhí)行效率比較
從圖2、圖3中可以看出,在最小支持?jǐn)?shù)為50的情況下,改進后的AprioriTid算法比AprioriTid算法在時間性能上平均提升了1826 MS,當(dāng)數(shù)據(jù)量增加到4 W時,改進后比改進前少用了2982 MS。在數(shù)據(jù)量不變的情況下,支持?jǐn)?shù)由60增加到120時,改進后的AprioriTid算法在時間性能上平均提升了871 MS。
算法精準(zhǔn)性分析:分別設(shè)置支持?jǐn)?shù)為50、60、80、100、120、140、160、180和200,從1 358 973條提交記錄中隨機選擇了10組數(shù)據(jù)對算法的準(zhǔn)確率進行實驗,數(shù)據(jù)量分別為2000、4000、6000、8000、10 000、12 000、14 000、16 000、18 000和20 000,用改進前后的AprioriTid算法分別生成大項集。實驗結(jié)果表明,改進前后算法生成的大項集是一致的,究其原因主要在于k階TID表是構(gòu)造k+1階候選項集的數(shù)據(jù)基礎(chǔ),計算k階TID表時,先計算k階大項集的冪集,再計算出當(dāng)前交易項與k階大項集冪集的交集,如果交集的元素個數(shù)小于等于k,便不可能產(chǎn)生k+1階候選項集,并且k+1階候選項集只能產(chǎn)生于k階大項集中,通過計算交集可對不在k階大項集中元素進行剪枝,并不影響計算k+1階候選項集,故改進后的算法不會損耗原有算法的精準(zhǔn)性。
3.3.2 編程題目推薦算法分析
在實驗數(shù)據(jù)集上,設(shè)置題目提交嘗試次數(shù)閾值為5,將實驗數(shù)據(jù)集分為鞏固題數(shù)據(jù)集(提交嘗試次數(shù)小于等于5,共537 681條數(shù)據(jù))與拔高題數(shù)據(jù)集(提交嘗試次數(shù)大于5,共821 292條數(shù)據(jù))。選取400名學(xué)生的期末考試數(shù)據(jù),將考試中每個知識點的得分率超過0.8的學(xué)生劃分到GA組,其他學(xué)生劃分到GB組,統(tǒng)計學(xué)生平時練習(xí)的程序提交次數(shù)、知識點學(xué)習(xí)間隔時間與課程學(xué)習(xí)間隔時間3項學(xué)習(xí)者特征數(shù)據(jù),生成各知識點的判別指標(biāo)。設(shè)置關(guān)聯(lián)規(guī)則挖掘的支持?jǐn)?shù)為200,最多推薦題目數(shù)為20,在鞏固題數(shù)據(jù)集與拔高題數(shù)據(jù)集上分別設(shè)置訓(xùn)練集/實驗數(shù)據(jù)集為60%、70%、80%與90%的情況下,將本文算法與基于用戶的協(xié)同過濾算法(UserCF)、kNN協(xié)同過濾算法[6]、BiUCF[7]進行10次對比實驗取平均值,實驗結(jié)果見表4、表5。
表4 鞏固題推薦的覆蓋率與準(zhǔn)確率比較
在覆蓋率與準(zhǔn)確率2個指標(biāo)上,本文提出的推薦算法在推薦鞏固題與拔高題方面均優(yōu)于其它3種推薦算法,原因在于本文算法考慮了編程題目的特征、學(xué)習(xí)者對知識點的掌握狀態(tài)以及學(xué)習(xí)者遺忘特征。
本文提出了一種基于關(guān)聯(lián)規(guī)則與知識追蹤的編程題目推薦算法,算法根據(jù)編程題目的特點,使用關(guān)聯(lián)規(guī)則挖掘出同一知識點下同一學(xué)習(xí)者在嘗試提交一定次數(shù)后同時“做對”與“做錯”的題目推薦規(guī)則,通過分析學(xué)習(xí)者的遺忘特征,使用知識追蹤模型與判別分析模型計算學(xué)習(xí)者對知識點的掌握狀態(tài),決定推薦鞏固題或拔高題,或進入下一知識點學(xué)習(xí),從而優(yōu)化學(xué)習(xí)者學(xué)習(xí)效率。實驗結(jié)果表明,本文提出的推薦算法具有較好的推薦效果,并已成功應(yīng)用于某高校的在線智慧教學(xué)平臺中。
表5 拔高題推薦的覆蓋率與準(zhǔn)確率比較