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