馬驍睿,徐 圓,朱群雄
(北京化工大學 信息科學與技術學院,北京 100029)
Email:mxrui1995@163.com
隨著信息化時代的到來,各行各業都受到了信息時代的影響.在教育領域,在線教育和智能教育產業規模這幾年得到了快速增長,在線教育平臺為學生提供了大量的習題和教育資源,吸引了大量的學習者來到在線平臺進行學習.然而,隨著教育資源規模的日漸龐大,學生往往陷入學習資源的選擇困難.這既是因為資源數量太過龐大,出現了信息過載的問題,也是因為在線教育方式相比傳統教學方式不能實時地對學生提供指導,無法提供個性化的學習推薦.因此,如何在海量的習題資源中為學生精準地推薦合適的習題就成了一個值得關注的研究課題.
這幾年來,推薦系統的技術逐漸被研究者們應用在習題推薦中,學者們將習題看作商業系統中的商品,學生看作用戶,以學生在習題上的成績作為用戶對商品的評分,學生的習題得分預測就可以轉化為用戶的商品評分預測,從而對學生進行推薦.現有習題推薦方法主要分為基于協同過濾的方法和基于知識建模的方法,其中基于協同過濾的習題推薦方法研究現狀如下: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節進行總結和展望.
知識追蹤模型最早起源于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].
針對目前應用協同過濾方法和知識建模方法產生個性化習題推薦各自的不足,提出了一種結合深度知識追蹤模型和協同過濾方法的個性化習題推薦方法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.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
實驗采用了2組數據集,第1組數據為assistments2009公開數據集,assistments是一個公開在線教育平臺,可以同時在線教授和評估學生學習,數據集包含了超過50萬條小學數學習題提交數據.第2組數據集是從某高校在線編程平臺(online judge)上爬取的學生提交歷史紀錄,兩組數據集的相關信息如表1.
表1 數據集統計信息
Table 1 Dataset statistics
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也應該隨之變化,并落入對應的區間中.
為驗證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.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模型),又考慮了學習的群體性,加入了相似學生之間的信息(協同過濾方法).相比于傳統的協同過濾方法,該方法有更好的精確度和可解釋性,相比于基于知識狀態建模的方法,該方法具有更好的可靠性和拓展性.
針對傳統協同過濾推薦方法沒有考慮學生的知識掌握水平和基于知識建模的推薦方法忽略了學生之間學習的群體性的缺點,本文提出了一種基于深度知識追蹤的個性化習題推薦方法DKT-CF.該方法以學生的歷史答題提交序列作為輸入,方法的第1步為結合深度知識追蹤模型對學生的知識掌握水平進行建模;第2步將學生的知識水平向量作為計算相似學生的參考得出相似用戶,并結合個人的知識水平向量得出預測的目標得分向量,在考慮學生個人狀態信息的同時加入了相似學生的群體信息;在第3步中,根據一定的難度范圍[β1,β2],選擇正確作答概率在范圍內的習題對學生進行推薦;最后通過實驗證明了本文提出的DKT-CF方法的有效性和合理性.
在后續的研究中,從模型出發,可以考慮對深度知識追蹤模型進行改進,加入更多個性化特征進行學習;從推薦方法出發,可以考慮結合其他的推薦算法產生推薦;從推薦的場景出發,在不同場景下的推薦策略也是一個值得探討的問題,比如根據難度不同區分出用于拓展提高的推薦題目和用于復習鞏固的推薦題目等,可以更有針對性地進行個性化習題推薦.