張玉葉
摘要:隨著在線電影數(shù)量的飛速增長(zhǎng),要想從眾多的電影中選擇一部自己想看的電影變得越來(lái)越困難。為了更好地滿足用戶的觀影需求,電影推薦系統(tǒng)應(yīng)運(yùn)而生,它通過(guò)用戶的觀影記錄來(lái)發(fā)現(xiàn)用戶的興趣,從而幫助用戶在眾多電影中篩選到自己感興趣的電影?;谖锲返膮f(xié)同過(guò)濾算法是電影推薦系統(tǒng)中最常用的推薦算法,該算法的關(guān)鍵是計(jì)算物品的相似度及推薦評(píng)分,相似度矩陣是一稀疏矩陣,已有的一些電影推薦系統(tǒng)中通常采用二維數(shù)組來(lái)存放相似度矩陣,利用第三方擴(kuò)展庫(kù)Numpy來(lái)計(jì)算推薦評(píng)分,時(shí)間空間效率相對(duì)較低,該文利用Python內(nèi)置的序列字典來(lái)存放稀疏矩陣,自行編寫相應(yīng)的代碼來(lái)求解相似度和推薦評(píng)分,可有效提高算法的時(shí)間、空間效率。
關(guān)鍵詞:推薦系統(tǒng);協(xié)同過(guò)濾;Python;稀疏矩陣
中圖分類號(hào):TP391.1 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2019)06-0070-04
Design and Implementation of Movie Recommendation System Based on Collaborative Filtering
ZHANG Yu-ye
(Dept. of computer, Jinan Vocational College, Jinan 250014, China)
Abstract: With the rapid increase in the number of online movies, it is increasingly difficult to choose from among the many movies you want to watch. In order to better meet the user's viewing needs, the film recommendation system came into being. It discovered the user's interest through the user's viewing video record, thus helping users to select movies of interest in many movies. The object-based collaborative filtering algorithm is the most commonly used recommendation algorithm in the movie recommendation system. The key of the algorithm is to calculate the similarity of the item and the recommended score. The similarity matrix is a sparse matrix. Some existing movie recommendation systems usually use two-dimensional arrays to store similarity matrices, use third-party extension library Numpy to calculate the recommended score, which leads to the low efficiency of time and space. This article uses Python's built-in sequence dictionary to store sparse matrices and gives the corresponding code to solve the recommended score, which improves the algorithm efficiency of time and space.
Key words: recommender system; collaborative filtering; Python; sparse matrix
1 背景
隨著在線電影數(shù)量的飛速增長(zhǎng),要想從眾多的電影中選擇一部自己想看的電影變得越來(lái)越困難。當(dāng)用戶有明確觀影需求時(shí)可利用搜索引擎來(lái)查找自己想看的電影,但當(dāng)用戶沒(méi)有明確需求時(shí),就很難利用搜索引擎來(lái)查找自己想看的電影,此時(shí)電影推薦系統(tǒng)應(yīng)運(yùn)而生,它通過(guò)用戶的觀影記錄來(lái)發(fā)現(xiàn)用戶的興趣,從而幫助用戶在眾多電影中篩選到自己感興趣的電影。基于物品的協(xié)同過(guò)濾算法是電影推薦系統(tǒng)中最常用的推薦算法,該算法的關(guān)鍵是計(jì)算電影的相似度及推薦評(píng)分,在計(jì)算時(shí)需要用到矩陣的一些運(yùn)算,Python的第三方擴(kuò)展庫(kù)Numpy提供了大量的數(shù)組及矩陣運(yùn)算,因此已有的一些電影推薦系統(tǒng)中多是利用Numpy來(lái)實(shí)現(xiàn)協(xié)同過(guò)濾算法,但因協(xié)同過(guò)濾算法中涉及到的矩陣多是稀疏矩陣,采用普通的二維數(shù)組存放存在大量的無(wú)效存儲(chǔ),空間利用率較低,同時(shí)利用Numpy擴(kuò)展庫(kù)也無(wú)法進(jìn)行算法的優(yōu)化,因此本文利用Python的內(nèi)置序列字典來(lái)存放稀疏矩陣,自行編制相應(yīng)的代碼來(lái)求解相似度及推薦評(píng)分,可有效提高算法的時(shí)間空間效率。
2 推薦系統(tǒng)
推薦系統(tǒng)是建立在海量數(shù)據(jù)挖掘基礎(chǔ)上的,它通過(guò)分析用戶的歷史數(shù)據(jù)來(lái)了解用戶的需求和興趣,從而將用戶感興趣的信息、物品等主動(dòng)推薦給用戶,其本質(zhì)是建立用戶與物品之間的聯(lián)系。一個(gè)完整的推薦系統(tǒng)通常包含3個(gè)模塊:用戶建模模塊、推薦對(duì)象建模模塊和推薦算法模塊。推薦系統(tǒng)首先對(duì)用戶進(jìn)行建模,根據(jù)用戶行為數(shù)據(jù)和屬性數(shù)據(jù)來(lái)分析用戶的興趣和需求,同時(shí)也對(duì)推薦對(duì)象進(jìn)行建模。接著,基于用戶特征和物品對(duì)象特征,采用推薦算法計(jì)算得到用戶可能感興趣的物品,然后根據(jù)推薦場(chǎng)景對(duì)推薦結(jié)果進(jìn)行一定的推薦和調(diào)整,最終將推薦結(jié)果展示給用戶[1]。
3 協(xié)同過(guò)濾算法
協(xié)同過(guò)濾算法分為基于用戶的協(xié)同過(guò)濾算法和基于物品的協(xié)同過(guò)濾算法[2]。
基于用戶的協(xié)同過(guò)濾算法(簡(jiǎn)稱UserCF),通過(guò)不同用戶對(duì)物品的評(píng)分來(lái)評(píng)測(cè)用戶之間的相似性,基于用戶之間的相似性做出推薦。簡(jiǎn)單來(lái)講就是:給用戶推薦和他興趣相似的其他用戶喜歡的物品。
基于物品的協(xié)同過(guò)濾算法(簡(jiǎn)稱ItemCF),通過(guò)用戶對(duì)不同物品的評(píng)分來(lái)評(píng)測(cè)物品之間的相似性,基于物品之間的相似性做出推薦。簡(jiǎn)單來(lái)講就是:給用戶推薦和他之前喜歡的物品相似的物品。
UserCF算法和ItemCF算法思想類似,其實(shí)現(xiàn)過(guò)程也基本類似,唯一不同的是一個(gè)是計(jì)算用戶相似度,一個(gè)是計(jì)算物品相似度。
UserCF算法和ItemCF最主要的區(qū)別在于:UserCF推薦的是那些和目標(biāo)用戶有共同興趣愛(ài)好的其他用戶所喜歡的物品,ItemCF算法則推薦那些和目標(biāo)用戶之前喜歡的物品類似的其他物品。因此,UserCF算法的推薦更偏向社會(huì)化,適合應(yīng)用于新聞推薦、微博話題推薦等應(yīng)用場(chǎng)景;而ItemCF算法的推薦則是更偏向于個(gè)性化,適合應(yīng)用于電子商務(wù)、電影、圖書等應(yīng)用場(chǎng)景。
4 電影推薦系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
4.1 推薦算法
根據(jù)前面對(duì)協(xié)同過(guò)濾算法的分析,電影推薦系統(tǒng)適合采用基于物品的協(xié)同過(guò)濾算法(簡(jiǎn)稱ItemCF)?;谖锲返膮f(xié)同過(guò)濾算法是給目標(biāo)用戶推薦那些和他們之前喜歡的物品相似的物品。此算法并不利用物品的內(nèi)容屬性計(jì)算物品之間的相似度,而主要通過(guò)分析用戶的行為記錄來(lái)計(jì)算物品之間的相似度。ItemCF算法主要包括兩步:
4.5計(jì)算推薦評(píng)分及推薦結(jié)果
計(jì)算每個(gè)用戶的未曾看過(guò)的電影的推薦評(píng)分(也即興趣度)。推薦評(píng)分=同現(xiàn)矩陣M*評(píng)分向量R。
評(píng)分向量即用戶對(duì)所有物品(電影)的評(píng)分,由評(píng)分記錄表可得出。
4.6 輸出推薦結(jié)果
推薦結(jié)果的輸出可根據(jù)需要自由構(gòu)造,既可以只生成某一指定用戶的推薦列表,也可生成所有用戶的推薦列表,如要生成對(duì)所有用戶推薦1部未曾看過(guò)的電影,其對(duì)應(yīng)的代碼為:
5 測(cè)試分析
前面給出的測(cè)試數(shù)據(jù)集數(shù)據(jù)很少,主要應(yīng)用于系統(tǒng)開(kāi)發(fā)測(cè)試中。實(shí)際應(yīng)用中推薦系統(tǒng)所用的數(shù)據(jù)集通常為海量數(shù)據(jù),為驗(yàn)證系統(tǒng)在海量數(shù)據(jù)中的使用,可以MovieLens(http://grouplens.org/datasets/movielens)作為電影推薦系統(tǒng)中的實(shí)驗(yàn)數(shù)據(jù)來(lái)測(cè)試系統(tǒng)。MovieLens是GroupLens Research實(shí)驗(yàn)室的一個(gè)非商業(yè)性質(zhì)、以研究為目的的實(shí)驗(yàn)性項(xiàng)目,采集了一組從20世紀(jì)90年代末到21世紀(jì)初的電影評(píng)分?jǐn)?shù)據(jù),包含大小不同的數(shù)據(jù)集,每個(gè)數(shù)據(jù)集中包括電影信息數(shù)據(jù)及電影評(píng)分記錄等。如MovieLens 1M數(shù)據(jù)集中存放了1000多名用戶對(duì)近2000部電影的評(píng)分記錄,每個(gè)用戶至少對(duì)20部電影進(jìn)行過(guò)評(píng)分,一共有100000多條電影評(píng)分記錄,能夠模擬出海量數(shù)據(jù)的推薦。如采用MovieLens 1M數(shù)據(jù)集來(lái)使用本系統(tǒng)來(lái)為用戶1推薦5部想看的電影,其推薦結(jié)果如圖7所示。
6 結(jié)束語(yǔ)
電影推薦系統(tǒng)可幫助用戶從海量電影中獲取自己想看電影,是大數(shù)據(jù)在互聯(lián)網(wǎng)領(lǐng)域的典型應(yīng)用,通過(guò)分析用戶的歷史觀影記錄來(lái)了解用戶的喜好,從而主動(dòng)為用戶推薦其感興趣的電影,滿足了用戶的個(gè)性化觀影需求。該文利用Python語(yǔ)言實(shí)現(xiàn)的基于物品的協(xié)同過(guò)濾算法的電影推薦系統(tǒng),利用了Python內(nèi)置的序列字典來(lái)存放稀疏矩陣,自行編寫相應(yīng)的代碼實(shí)現(xiàn)矩陣運(yùn)算及求解推薦評(píng)分,相比于利用Numpy第三方擴(kuò)展庫(kù),其算法時(shí)間空間效率相對(duì)較高。
參考文獻(xiàn):
[1] 查魯 C 阿加沃爾. 推薦系統(tǒng):原理與實(shí)踐[M]. 北京: 機(jī)械工業(yè)出版社, 2017.
[2] 項(xiàng)亮. 推薦系統(tǒng)實(shí)踐[M]. 北京: 人民郵電出版社, 2012.
[3] 王建芳. 機(jī)器學(xué)習(xí)算法實(shí)踐[M]. 北京: 清華大學(xué)出版社, 2018.
[4] 董付國(guó). Python程序設(shè)計(jì)開(kāi)發(fā)寶典[M]. 北京: 清華大學(xué)出版社, 2017.
[5] 林子雨. 大數(shù)據(jù)技術(shù)原理與應(yīng)用[M]. 北京: 人民郵電出版社, 2017.
【通聯(lián)編輯:謝媛媛】