萬永權 燕彩蓉 朱 明 蘇厚勤
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 結 語