武玲梅 李秋萍 黃秀芳 張立強(qiáng) 董力量 羅芳瓊
關(guān)鍵詞:混合推薦;電影推薦;協(xié)同過濾算法;設(shè)計(jì)
1 引言
隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展與普及,短視頻、電影、電視劇等網(wǎng)絡(luò)視頻快速發(fā)展?!靶畔⑦^載”讓用戶很難快速查找想要的信息。為了幫助用戶從大規(guī)模數(shù)據(jù)中挑選出對(duì)其有價(jià)值的信息,分類目錄和搜索引擎技術(shù)可以有效地解決“信息過載”的難題[1]。
隨著推薦算法在各個(gè)領(lǐng)域的運(yùn)用,將算法運(yùn)用在電影上,對(duì)用戶進(jìn)行個(gè)性化的推薦也變得更加重要,通過推薦技術(shù)推薦用戶將來會(huì)選擇的電影,過濾不感興趣的信息,將會(huì)增加用戶對(duì)系統(tǒng)的關(guān)注[2]。電影推薦系統(tǒng)可通過用戶的喜好有針對(duì)地推薦電影,既能解決用戶的需求,也能夠縮短用戶查找電影的時(shí)間,推薦電影能讓用戶稱心,增加用戶滿意度[3-4]。推薦系統(tǒng)不僅為用戶提供個(gè)性化的服務(wù),還為用戶提供喜愛的電影,同時(shí)增加電影的收視率,達(dá)到兩全其美的效果。
個(gè)性化推薦系統(tǒng)精髓在于它算法部分,即推薦系統(tǒng)最重要的部分或者是核心就是其算法,它決定著推薦結(jié)果是否能夠滿足用戶的需求[5]。目前最流行的推薦算法是協(xié)同過濾,國外六大主流電影推薦網(wǎng)站系統(tǒng)也使用到了協(xié)同過濾算法[6]。YouTube、Amazon、Grou?pLens在實(shí)現(xiàn)個(gè)性化推薦系統(tǒng)中應(yīng)用到了協(xié)同過濾算法。協(xié)同過濾算法一直以來受到許多國內(nèi)外學(xué)者的關(guān)注,將許多優(yōu)秀的技術(shù)運(yùn)用到推薦系統(tǒng)中,現(xiàn)如今協(xié)同過濾算法相比之前更加成熟,更加準(zhǔn)確。但是協(xié)同過濾算法還有稀疏性、冷啟動(dòng)等常見的問題,如今許多學(xué)者也嘗試不同辦法解決算法的短板,如對(duì)算法進(jìn)行改進(jìn),或者組合多種算法的方式,組合算法方式也是當(dāng)今研究的方向[7],所以協(xié)同過濾算法仍有較強(qiáng)的研究價(jià)值。
本文通過對(duì)基于鄰域協(xié)同過濾算法的研究,將算法混合推薦設(shè)計(jì)并實(shí)現(xiàn)一個(gè)電影推薦系統(tǒng),用戶可以在推薦電影列表當(dāng)中選取中意的影片,并且可以在系統(tǒng)進(jìn)行瀏覽、收藏、評(píng)分等操作。
2 Django 架構(gòu)概述
Django架構(gòu)是一個(gè)具有完整架站能力的Python開源WEB框架[8]。Django遵循MVC設(shè)計(jì)模式,它本身提供了許多功能組件,這使開發(fā)速度更快,并具有出色的安全性和靈活性。MySQL數(shù)據(jù)庫能夠存儲(chǔ)大量的結(jié)構(gòu)化數(shù)據(jù),本身體積小,存儲(chǔ)速度快,并且安全。Bootstrap框架是受歡迎的一種前端框架,前端處理簡潔,美化效果漂亮,能夠兼容一般的瀏覽器。
3 算法模型
基于鄰域的協(xié)同過濾算法分為兩個(gè)類別,一個(gè)是基于用戶的協(xié)同過濾算法,即UserCF;另一個(gè)是基于物品的協(xié)同過濾算法,即ItemCF。隨著時(shí)間的推移,協(xié)同過濾算法不斷地發(fā)展與進(jìn)步。學(xué)者們也做進(jìn)一步改進(jìn)來提高算法的準(zhǔn)確度,改進(jìn)的UserCF-IIF是在UserCF 的基礎(chǔ)上增加1/log1+ |N(i)| 參數(shù);改進(jìn)的ItemCF-IUF在ItemCF基礎(chǔ)上加入IUF參數(shù)[9]。
UserCF是通過用戶的愛好找出口味相似的鄰居,將這類鄰居的喜好放進(jìn)推薦列表。當(dāng)計(jì)算相似鄰居時(shí),將用戶的興趣作為向量來計(jì)算與其他用戶的相似度,根據(jù)相似度權(quán)重以及相似鄰居的喜好,為用戶預(yù)測(cè)將來要選擇的物品。根據(jù)算法的基本思想,UserCF主要分為兩個(gè)步驟進(jìn)行,第一步計(jì)算用戶間的相似度,第二步為預(yù)測(cè)用戶對(duì)電影評(píng)定的分?jǐn)?shù)。ItemCF則是通過用戶喜好找到類似物品,將這些物品作為推薦。在計(jì)算物品間的相似度時(shí),把所有用戶對(duì)相同物品的行為作為一個(gè)矢量,然后根據(jù)歷史的喜好預(yù)測(cè)用戶沒有聽說過的物品的得分,通過分?jǐn)?shù)排名選取前N個(gè)作為推薦。
在加權(quán)混合推薦的思路下,將UserCF-IIF 和ItemCF-IUF產(chǎn)生的電影預(yù)測(cè)分?jǐn)?shù)進(jìn)行組合加權(quán),經(jīng)過冒泡排序后生成新的推薦結(jié)果。通過組合算法方式,不僅可以發(fā)揮UserCF-IIF的新穎性和ItemCF-IUF的解釋性,還可以解決從單一用戶角度或者是物品角度進(jìn)行推薦的問題。
4 基于Django框架的電影推薦系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
4.1 開發(fā)環(huán)境
本系統(tǒng)使用Python語言作為基礎(chǔ),基于Django架構(gòu)來開發(fā),使用mySql來存儲(chǔ)電影數(shù)據(jù)集、評(píng)分?jǐn)?shù)據(jù)集、用戶數(shù)據(jù)集,在網(wǎng)頁美化時(shí)主要使用Bootstrap框架。本系統(tǒng)具體開發(fā)環(huán)境如表1。
4.2 系統(tǒng)架構(gòu)
本系統(tǒng)采用三層架構(gòu)設(shè)計(jì)模式。這種B/S的架構(gòu)模式可以應(yīng)用在客戶端和服務(wù)器上,如圖1所示。第一層表現(xiàn)層即用戶交互層,系統(tǒng)通過瀏覽器向用戶展示頁面,用戶通過點(diǎn)擊頁面與系統(tǒng)互動(dòng)。第二層業(yè)務(wù)邏輯層即系統(tǒng)核心層,它的主要任務(wù)是處理邏輯事務(wù),因?yàn)樗谙到y(tǒng)中處于中心的位置,能夠起到一個(gè)承上啟下的作用。第三層數(shù)據(jù)層用來存儲(chǔ)數(shù)據(jù),它既能夠存儲(chǔ)來自表現(xiàn)層的用戶數(shù)據(jù),也能夠通過業(yè)務(wù)層將數(shù)據(jù)傳遞到瀏覽器中。
4.3 系統(tǒng)功能模塊設(shè)計(jì)
系統(tǒng)功能模塊總共9個(gè)模塊,其中包括前端展示子系統(tǒng)的7個(gè)模塊和后臺(tái)管理子系統(tǒng)的2個(gè)模塊。具體9個(gè)模塊的功能如下:
1) Top100電影模塊:該模塊根據(jù)9742部電影找出5星好評(píng)數(shù)最多的100部電影,Top100電影具有實(shí)時(shí)更新功能,對(duì)于所有的用戶是實(shí)時(shí)推薦的,在該模塊用戶也可以點(diǎn)擊圖片或者電影名字進(jìn)入電影詳情。
2) 注冊(cè)登錄模塊:游客無法直接登錄系統(tǒng),需要在注冊(cè)時(shí)填寫用戶名、郵箱、密碼后才能登錄;系統(tǒng)用戶輸入信息后直接點(diǎn)擊登錄。
3) 個(gè)人中心模塊:在該模塊用戶可以修改個(gè)人信息或者密碼,并且可以瀏覽歷史評(píng)分、收藏、推薦的電影。
4) 電影詳情模塊:用戶單擊影片海報(bào)或標(biāo)題瀏覽詳細(xì)信息。該頁面的內(nèi)容有電影主演、片長、地區(qū)等;還設(shè)置評(píng)分、收藏、推薦按鈕和評(píng)論功能,用戶可通過這些方式提供反饋。
5) 電影推薦模塊。為用戶展示混合算法的電影推薦列表,并設(shè)置該頁面帶有movielens鏈接,用戶可到movielens查看更多詳情與評(píng)分。
6) 電影評(píng)分模塊:在系統(tǒng)為用戶推薦影片之前,用戶先對(duì)5部電影評(píng)分,評(píng)價(jià)分?jǐn)?shù)分為5個(gè)等級(jí):差,一般,良,優(yōu)秀,超級(jí)滿意。差的得分是1,一般表示得分是2,以此類推超級(jí)滿意得分是5。當(dāng)用戶沒有登錄時(shí)會(huì)提示用戶先登錄后評(píng)分。
7) 搜索電影模塊:因?yàn)殡娪皵?shù)量太多,用戶一一瀏覽花費(fèi)時(shí)間,用戶可以輸入電影的名字搜索電影并且可以查看電影詳情。
8) 電影管理模塊:管理員用戶在后臺(tái)登錄成功之后,他更新或修改影片。
9) 用戶管理模塊:該模塊用于對(duì)用戶信息的管理。
4.4 系統(tǒng)設(shè)計(jì)方案
數(shù)據(jù)集:本系統(tǒng)及后面實(shí)驗(yàn)的數(shù)據(jù)集,使用的是美國蘇明達(dá)大學(xué)GroupLens項(xiàng)目組整理出來的Mov?ieLens數(shù)據(jù)集,該數(shù)據(jù)集是公開的并生成于2018年9月26日。它描述了來自MovieLens電影網(wǎng)站的五星級(jí)評(píng)級(jí)和免費(fèi)為電影打標(biāo)簽活動(dòng),覆蓋9742部電影、100836評(píng)分以及3683個(gè)標(biāo)簽應(yīng)用,共有610名用戶并且用戶是隨機(jī)的,其中每一個(gè)用戶有超過20部電影的打分,評(píng)價(jià)分?jǐn)?shù)為1-5,等值越大就表示用戶對(duì)這部電影喜愛程度越高,除了以上內(nèi)容之外,還包含有電影一些信息,如電影名字、電影類型、movieLens電影網(wǎng)站id號(hào)等。
本系統(tǒng)通過對(duì)MovieLens數(shù)據(jù)集處理后存儲(chǔ)到數(shù)據(jù)庫中,考慮到有些字段暫時(shí)用不到而且占用存儲(chǔ)空間,本系統(tǒng)選用一些字段數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫。本系統(tǒng)共設(shè)計(jì)5張表用來存儲(chǔ)數(shù)據(jù),分別是:auth_user用戶表、movies電影表、topmovies電影表、ratings用戶評(píng)分表、recommend推薦表。系統(tǒng)主要信息見表2~表6。
1) auth_user用戶表。該表用來保存用戶的基本信息,具體字段如表2。
2) movies電影表。該表用來保存全部電影信息,具體字段如表3。
3) topmovies電影表。該表用來保存Top100電影信息,具體字段如表4。
4) ratings用戶評(píng)分表。該表用來保存評(píng)分信息,具體字段如表5。
5) recommend推薦表。該表用來存儲(chǔ)電影數(shù)據(jù),具體字段如表6。
4.5 系統(tǒng)推薦流程
本電影推薦系統(tǒng)的算法流程圖,如圖3:第一步:當(dāng)用戶想要獲取推薦頁面的電影時(shí),系統(tǒng)先去查詢數(shù)據(jù)庫中recommend的推薦列表,有則展示電影,沒有則提示用戶去評(píng)分,評(píng)分的方式可以去搜索電影評(píng)分或者是進(jìn)入電影詳情評(píng)分,系統(tǒng)設(shè)置每個(gè)用戶至少為5部電影評(píng)分,因?yàn)橛幸欢〝?shù)量的評(píng)分才能更好地為用戶提供個(gè)性化服務(wù)。第二步:系統(tǒng)查看用戶電影評(píng)分的數(shù)量,若評(píng)分已經(jīng)達(dá)到5部電影,取出電影評(píng)分?jǐn)?shù)據(jù)構(gòu)建用戶評(píng)分?jǐn)?shù)據(jù)和共現(xiàn)矩陣,然后計(jì)算用戶間相似度和物品間之后,下一步為推薦的用戶選出最相似的用戶或者物品用于預(yù)測(cè)未看過的電影,然后根據(jù)混合算法將電影進(jìn)行排序,將分?jǐn)?shù)最高的10部電影信息存儲(chǔ)數(shù)據(jù)庫,最后通過django框架展示推薦列表給用戶。第三步:如果用戶評(píng)分少于5部電影,則系統(tǒng)不會(huì)對(duì)該用戶推薦電影,除非他們的評(píng)分?jǐn)?shù)量達(dá)到或者超過5部電影。
4.6 算法優(yōu)化
使用MovieLens電影網(wǎng)站的真實(shí)評(píng)分?jǐn)?shù)據(jù),是美國蘇明達(dá)大學(xué)GroupLens整理的數(shù)據(jù)集,評(píng)分?jǐn)?shù)據(jù)集是610個(gè)用戶對(duì)9742部電影的100836評(píng)分,其中每一個(gè)用戶至少有對(duì)20部電影的打分,其中一個(gè)用戶對(duì)一部電影的評(píng)分就是一條記錄,所以共有100836個(gè)樣本。在每一次實(shí)驗(yàn)過程中,將用戶對(duì)電影的評(píng)分?jǐn)?shù)據(jù)集分為90%的測(cè)試集與10%訓(xùn)練集,在訓(xùn)練集建立模型和測(cè)試集預(yù)測(cè)模型,通過評(píng)測(cè)指標(biāo)TopN推薦的準(zhǔn)確率、召回率對(duì)算法進(jìn)行評(píng)估。
固定N=10,取10組不同的K值。將UserCF-IIF與ItemCF-IUF算法做混合加權(quán)推薦,并與UserCF-IIF算法和ItemCF-IUF算法進(jìn)行比較,結(jié)果數(shù)據(jù)見表7和表8。
從見表7和表8中明顯看出K在5到20之間時(shí),因?yàn)槭菍⒃瓉淼膬蓚€(gè)算法的推薦結(jié)果相結(jié)合,然后按電影的評(píng)分重新排序后,推薦質(zhì)量遠(yuǎn)比原來的兩個(gè)算法更好。同樣從整體來看相比之下混合算法的準(zhǔn)確率和召回率有提高,即其推薦精確度比原來的算法高,推薦列表與用戶將來會(huì)選擇的電影更接近。實(shí)驗(yàn)結(jié)果表明通過混合算法的方式能夠在電影數(shù)據(jù)集上提高評(píng)測(cè)指標(biāo)的準(zhǔn)確率以及召回率,即混合算法的方式有助于推薦精度的提升。
4.7 系統(tǒng)實(shí)現(xiàn)
4.7.1 首頁
首頁展示Top100的5星級(jí)電影,每進(jìn)一次該頁面系統(tǒng)會(huì)進(jìn)行刷新,實(shí)現(xiàn)實(shí)時(shí)更新,在該頁面所有人可選擇分類瀏覽。在導(dǎo)航欄部分設(shè)置logo、搜索、登錄接口,每個(gè)頁面都會(huì)繼承這部分,點(diǎn)擊登錄頭像會(huì)有其他頁面的下拉菜單。Top100 頁面如圖4。實(shí)現(xiàn)Top100電影的實(shí)時(shí)刷新是該頁面的核心部分。其邏輯是從評(píng)分模型中取出電影id和評(píng)分,計(jì)算評(píng)分為5星級(jí)的電影數(shù)量,然后排序只取前100部電影,最后存儲(chǔ)到數(shù)據(jù)庫的topmovies表中。
4.7.2 注冊(cè)和登錄
用戶點(diǎn)擊登錄按鈕即可進(jìn)到登錄頁面,若用戶沒有注冊(cè),在登錄的時(shí)候會(huì)有提示,如圖5。
4.7.3 個(gè)人中心
用戶登錄之后點(diǎn)擊頭像的下拉菜單中的用戶中心即可進(jìn)入頁面。該頁面設(shè)計(jì)左右兩邊內(nèi)容,左邊為菜單欄,右邊為對(duì)應(yīng)的內(nèi)容。如圖6。在該頁面系統(tǒng)會(huì)固定個(gè)人中心為激活狀態(tài),當(dāng)點(diǎn)擊其他菜單項(xiàng)時(shí)才設(shè)置此項(xiàng)為激活狀態(tài)。
4.7.4 電影詳情頁面
系統(tǒng)提供一些電影內(nèi)容展示給用戶,當(dāng)用戶收藏該電影后其按鈕背景顏色變深,如圖7。當(dāng)用戶要收藏電影時(shí),前端會(huì)將state=1發(fā)送到后臺(tái);當(dāng)用戶取消收藏時(shí),前端發(fā)送到后臺(tái)的state=0。用戶收藏電影的動(dòng)作會(huì)對(duì)數(shù)據(jù)庫進(jìn)行操作,系統(tǒng)則根據(jù)state的值判斷用戶的行為實(shí)現(xiàn)收藏功能。
4.7.5 推薦頁面
該頁面展示混合算法計(jì)算后的推薦的電影,頁面中藍(lán)色字體的點(diǎn)我是movielens按鈕鏈接。如圖8。
4.7.6 搜索頁面
當(dāng)用戶搜索電影后,系統(tǒng)為用戶提供評(píng)分按鈕,如圖9。
4.7.7 評(píng)分頁面
在這個(gè)頁面中,不同星星的數(shù)量表示不同的評(píng)價(jià),用戶可選擇星星的數(shù)量表達(dá)對(duì)該電影的滿意程度。如圖10。
4.7.8 電影管理頁面
管理員可添加最新的電影,或者更新影片信息。如圖11。
4.7.9 用戶管理頁面
管理員在admin頁面管理后臺(tái)登錄后,可以對(duì)用戶的信息進(jìn)行操作,不必到數(shù)據(jù)庫中修改。如圖12。
5 結(jié)束語
本文主要是對(duì)基于鄰域協(xié)同過濾算法的研究,并設(shè)計(jì)一個(gè)基于Django框架的電影推薦系統(tǒng)。設(shè)計(jì)系統(tǒng)的各個(gè)功能模塊,主要包括用戶注冊(cè)登錄、Top100電影展示、用戶搜索、用戶評(píng)分、用戶推薦、電影和用戶管理模塊。為驗(yàn)證系統(tǒng)實(shí)現(xiàn)算法是否可行,通過推薦算法評(píng)測(cè)指標(biāo)topN進(jìn)行仿真比對(duì)實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果表明該混合方法推薦效果更好,在準(zhǔn)確度和召回率方面都比UserCF-IIF和ItemCF-IUF算法高。實(shí)驗(yàn)結(jié)果表明,該系統(tǒng)具有很好的穩(wěn)定性。本文對(duì)于類似個(gè)性化推薦技術(shù)開發(fā)亦具有參考借鑒意義。