徐 偉,許 鵬
云計算、大數(shù)據(jù)、人工智能技術(shù)的發(fā)展改變了傳統(tǒng)的課程教學模式,促進了線下線上課程教學模式的融合,尤其是在今年的新冠肺炎疫情期間,各學校為了深入貫徹教育部“停課不停學”的指示精神,要求教師在職教云、騰訊課堂、學習通等在線教育平臺上進行線上授課,開展線上課程建設(shè).線上課程以其具有的不受時間場地限制、授課形式靈活多樣的特點,在新冠肺炎疫情期間得到廣泛應(yīng)用.據(jù)不完全統(tǒng)計,新冠肺炎疫情期間線上課程數(shù)量急劇增加,占課程總量的85%,在一定程度上滿足了學生學習知識和技能的需求,但同時也給學生選課帶來了困擾.為了能夠讓學生在眾多的線上課程中選擇到適合自身學習特點的課程,筆者提出設(shè)計開發(fā)一款高效精準的個性化推薦系統(tǒng)[1],該推薦系統(tǒng)可以根據(jù)用戶的歷史行為數(shù)據(jù)發(fā)現(xiàn)用戶的喜好,形成用戶畫像數(shù)據(jù),從而為用戶做出精準的個性化推薦,提供更加優(yōu)質(zhì)的服務(wù).
本文在對當前主流在線教育平臺的課程推薦功能進行深入研究的基礎(chǔ)上,對學生購買課程的歷史數(shù)據(jù)進行分析,將評分數(shù)據(jù)作為學生對課程喜好度的主要依據(jù),將評論數(shù)據(jù)作為次要依據(jù),基于協(xié)同過濾推薦算法,使用MapReduce 計算模型計算出課程間的相似度,最終向?qū)W生推薦符合其喜好的課程列表,實現(xiàn)了個性化課程推薦[2]功能.
整個系統(tǒng)由日志采集子系統(tǒng)、數(shù)據(jù)清洗子系統(tǒng)、數(shù)據(jù)計算子系統(tǒng)、在線教育平臺業(yè)務(wù)子系統(tǒng)組成.通過收集業(yè)務(wù)系統(tǒng)學生用戶的行為數(shù)據(jù),針對不同學生進行個性化課程推薦,以滿足不同學生用戶的需求.系統(tǒng)架構(gòu)如圖1 所示.
(1)日志采集子系統(tǒng).負責采集用戶的操作日志,并通過大數(shù)據(jù)組件Flume 將每天的數(shù)據(jù)實時采集到HDFS 中.Nginx 服務(wù)器除了作為網(wǎng)站的代理服務(wù)器外,還作為網(wǎng)站日志接收服務(wù)器,網(wǎng)站所產(chǎn)生的日志信息發(fā)送到Nginx服務(wù)器,Nginx 將接收到的日志存儲在日志文件access.log 中.Flume 組件運行在集群中并實時監(jiān)控access.log 文件的增量日志,一旦監(jiān)測到有新的增量日志就會將新日志導(dǎo)入到HDFS文件系統(tǒng)的指定目錄[3].
(2)數(shù)據(jù)清洗子系統(tǒng).負責對日志進行數(shù)據(jù)清洗,剔除無效數(shù)據(jù),從HDFS 指定目錄讀入非結(jié)構(gòu)化日志數(shù)據(jù),然后根據(jù)特定規(guī)則切分日志條目,將不符合特定規(guī)則的臟日志數(shù)據(jù)舍棄,并將清洗后的數(shù)據(jù)存入數(shù)據(jù)倉庫以便于其他應(yīng)用程序使用[4].
(3)數(shù)據(jù)計算子系統(tǒng).基于協(xié)同過濾推薦算法,采用MapReduce 離線計算框架,通過Linux 定時任務(wù)[5]周期性計算課程相似度,并把結(jié)果回寫到MySQL 的推薦表中.
(4)在線教育平臺業(yè)務(wù)子系統(tǒng).本業(yè)務(wù)系統(tǒng)是基于Python 語言的輕量級Web 框架Flask快速開發(fā)的在線教育平臺[6],主要包含用戶模塊、課程模塊、訂單模塊、評論模塊等核心業(yè)務(wù)模塊,具備線上教育平臺的核心業(yè)務(wù)功能,包括前臺課程展示頁面與后臺管理員頁面,同時在課程詳情頁面還包括課程的推薦列表.在管理員頁面可以對課程進行相應(yīng)的操作,以及查看不同維度統(tǒng)計信息.在Web 開發(fā)中,頁面跳轉(zhuǎn)是通過不同的Flask 控制器View 視圖函數(shù)進行控制,根據(jù)用戶的請求路徑調(diào)用對應(yīng)的視圖函數(shù)進行處理[7].
本文采用MapReduce 離線計算模型,使用Linux 下執(zhí)行定時任務(wù)工具crontab 周期性對學生行為日志數(shù)據(jù)進行離線計算,并將計算結(jié)果通過Sqoop 同步更新到數(shù)據(jù)庫中.MapReduce 采用的是分而治之的數(shù)據(jù)處理方式,Map操作即為“分”操作,將一個大數(shù)據(jù)塊分解為多個切片,交由集群中的各個節(jié)點去計算;而Reduce 即為“合”操作,合并各個節(jié)點上的計算結(jié)果并輸出[8].
MapReduce 編程模型是一種并行數(shù)據(jù)計算模型,該模型根據(jù)數(shù)據(jù)輸入量的大小將數(shù)據(jù)劃分為N個相對獨立的數(shù)據(jù)切片,啟動N個Map 任務(wù),每個Map 任務(wù)獲得一個切片數(shù)據(jù),該切片數(shù)據(jù)經(jīng)計算處理后生成鍵值對,以(Key/Value)的形式輸出,在Map 和Reduce 中間需要一個Shuffle 過程,該過程將Map 的輸出結(jié)果Key/Value 鍵值對按Key 進行分組,形成P個Key/ValueList,然后 交 給P個Reduce 任務(wù)去處理,即一個Shuffle 之后的Key 對應(yīng)一個Reduce 任務(wù),如果用戶指定了Reduce 任務(wù)的個數(shù),則需要通過對Key 進行Hash 計算,求出Hash 值,然后根據(jù)Hash 值將不同的Key 發(fā)送到不同的Reduce 任務(wù),Reduce 任務(wù)接收到來自Shuffle 的Key/ValueList 輸入,通過迭代ValueList 計算并輸出最終結(jié)果,這是單個MapReduceJob 的完整執(zhí)行過程[9],如圖2 所示.
在實際項目開發(fā)中,可以根據(jù)自身的業(yè)務(wù)功能進行靈活選擇,比如,如果只是一個簡單的數(shù)據(jù)清洗作業(yè)(Job),可以只有Map 過程,而沒有Reduce 過程;也可以將多個Job 串聯(lián)在一起,形成一個復(fù)雜的計算邏輯,將JobA的輸出作為JobB 的輸入,JobB 的輸出作為JobC 的輸入直至整個任務(wù)完成[10].
本課程推薦系統(tǒng)主要實現(xiàn)兩個功能,分步驟實現(xiàn),首先計算出課程與課程間的相似度,然后根據(jù)用戶的訂單及評分數(shù)據(jù),找出課程相似度比較高的課程列表進行推薦.以下為具體實現(xiàn)過程.
首先,獲取用戶對某一課程的評價信息,主要是評分數(shù)據(jù),這一信息可以在訂單表中獲取.通過Sqoop 數(shù)據(jù)導(dǎo)入導(dǎo)出工具,按指定要求增量或者全部導(dǎo)出所有數(shù)據(jù)到HDFS 指定目錄,這里只導(dǎo)出用戶ID、課程ID 和評分數(shù)據(jù).數(shù)據(jù)集如表1 所示.
圖2 單個MapReduceJob 完整執(zhí)行過程
表1 課程評分表
然后,運行指定的MapReduce 程序,讀入上述數(shù)據(jù)集,建立用戶對課程的評分矩陣并把計算結(jié)果存入相應(yīng)目錄中.用戶對課程評分矩陣如圖3 所示.
圖3 用戶對課程評分矩陣
評分矩陣的行為課程ID,列為用戶ID,評分矩陣中的數(shù)值代表該ID 用戶對該ID 課程的評分數(shù)據(jù),如果數(shù)據(jù)為0,則表示該ID 的用戶尚未對該課程進行評價.從該矩陣列方向看,每一列在MapReduce 程序中可以用一行字符串101:5,102:0,103:-3,104:4.5,105:0,106:4,107:4 表示.按照上述方式處理矩陣,圖3 用戶評分矩陣的5 列就可以由5 行類似的字符串來構(gòu)成.那么第一個MapReduce 程序的功能就是將關(guān)系型評分矩陣按照列維度進行數(shù)據(jù)轉(zhuǎn)換操作.
其次,讀入評分矩陣,計算出課程的同現(xiàn)矩陣[11],如圖4 所示.
圖4 課程同現(xiàn)矩陣
課程同現(xiàn)矩陣的行為課程ID,列也為課程ID,矩陣的值表示兩個課程同時被用戶評分的次數(shù),例如104 和105 這個課程組合被3、5 兩個ID 的用戶評價過,那么在矩陣中104 和105 所對應(yīng)的數(shù)值就是2.如果兩個課程同時被多個用戶購買并評價過,那么這兩個課程在很大程度上是相似課程,同時被購買并評價的次數(shù)越多,即課程同現(xiàn)矩陣中數(shù)值越大,根據(jù)協(xié)同過濾算法的定義,這兩個課程的相似度就越高.從列方向上看,這個同現(xiàn)矩陣的每一列在MapReduce 程序中可以通過簡單的字 符 串102:101 3,102:102 3,102:103 2,102:104 2,102:105 1,102:106 1,102:107 0表示,x*y的同現(xiàn)矩陣就由x個以上的字符串(y行)組成.可以看出,課程和課程的同現(xiàn)矩陣需要另外一個MapReduce 任務(wù)來完成,它是將第一個MapReduce 任務(wù)的輸出作為輸入進行計算的.
最后,計算課程相似度并產(chǎn)生最終推薦結(jié)果,推薦結(jié)果等于用戶對課程的評分矩陣*課程同現(xiàn)矩陣.課程的同現(xiàn)次數(shù)*用戶對各個課程的評分,反應(yīng)出用戶對課程的評分.
例如,計算用戶2 對105 課程的喜好度,那么必須找到和105 課程相似的課程,課程之間的相似度體現(xiàn)在同現(xiàn)度上,同現(xiàn)度越高,相似度越高.比如101 課程和105 課程的同現(xiàn)度為4,說明101 課程和105 課程相似,用戶2 對105 課程的評分為2,表示用戶2 對105 課程的喜好度,101 課程和105 課程的同現(xiàn)度*用戶2對101 課程的評分可得到用戶2 對105 課程的喜好度權(quán)重值,將用戶2 對各課程評分權(quán)重相加,最終計算出用戶2 對105 課程的喜好度.第三個MapReduce 任務(wù)的功能就是實現(xiàn)評分矩陣和同現(xiàn)矩陣的相乘,并輸出結(jié)果.推薦結(jié)果如圖5 所示.
圖5 推薦結(jié)果
個性化課程推薦系統(tǒng)開發(fā)完成后,部署在學校數(shù)據(jù)中心的服務(wù)器上,學生可以通過互聯(lián)網(wǎng)或校園網(wǎng)訪問使用該系統(tǒng).為了解學生使用該系統(tǒng)的實際效果,設(shè)計了在線問卷調(diào)查系統(tǒng),經(jīng)統(tǒng)計共874 名學生參與問卷調(diào)查.調(diào)查數(shù)據(jù)顯示:71%的學生認為該系統(tǒng)可以滿足自己的個性化需求,感到“非常滿意”;23%的學生認為對自己選課有所幫助,感到“滿意”;6%的學生認為該系統(tǒng)的個性化課程推薦對自己幫助不大,感覺“一般”;沒有同學感到“不滿意”.系統(tǒng)滿意度調(diào)查如圖6 所示.
圖6 推薦系統(tǒng)滿意度調(diào)查
隨著在線教育體系的不斷發(fā)展和完善,線上教學模式必將成為今后學生學習知識和技能的一個重要途徑,而在線教育平臺如何滿足學生用戶個性化需求將是一個值得研究的課題.本文采用協(xié)同過濾推薦算法,根據(jù)學生對課程的評分數(shù)據(jù)和對課程的歷史評價數(shù)據(jù),了解學生感興趣的課程特征,使用MapReduce 離線計算框架計算出課程之間的相似度,從而實現(xiàn)了個性化的課程推薦功能,在很大程度上滿足了學生的需求.后期將在業(yè)務(wù)系統(tǒng)中采集學生的個人愛好、喜歡的講師授課風格等更多個性化特征數(shù)據(jù)并應(yīng)用于算法模型中,進一步提高推薦系統(tǒng)的精準性.