張 淼,吳昌雨,劉東旭
(滁州職業(yè)技術(shù)學(xué)院,安徽 滁州 239000)
網(wǎng)絡(luò)信息技術(shù)的高速發(fā)展使得書籍?dāng)[脫了傳統(tǒng)的紙媒方式,電子圖書也越來越受到人們的認(rèn)可。2016年全國共出版圖書、期刊、報(bào)紙、音像制品和電子出版物512.53億冊(cè)[1]。對(duì)于大部分用來來說,如何在浩瀚的圖書資源中找到自己感興趣的圖書,對(duì)自身的檢索能力是一個(gè)很大的挑戰(zhàn)。因此,幫助用戶更快地找到感興趣的圖書是當(dāng)前首要解決的問題。
本文主要完成了基于Mahout的圖書推薦系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn),通過Mahout框架為用戶提供書籍推薦服務(wù),使得傳統(tǒng)的“人找書”變?yōu)椤皶扑]給人”。協(xié)同過濾算法的使用讓用戶更快速地找到自己需要的書籍,節(jié)省了大量的時(shí)間。
協(xié)同過濾推薦算法是一種主流的、目前廣泛應(yīng)用在工業(yè)界的推薦算法。一般分為基于用戶的協(xié)同過濾(user-based)和基于項(xiàng)目(item-based)的協(xié)同過濾[2]。
基于用戶的協(xié)同過濾算法,主要考慮的是用戶和用戶之間的相似度,首先找出與目標(biāo)用戶相似度高的其他用戶,也就是鄰居。把鄰居喜歡的物品推薦給用戶。而基于項(xiàng)目的協(xié)同過濾是通過尋找物品和物品之間的相似度,向目標(biāo)用戶推薦與他自己喜歡的物品相似度高的其他物品。
Mahout是Apache Software Foundation(ASF)旗下的一個(gè)開源項(xiàng)目,提供了一些經(jīng)典的機(jī)器學(xué)習(xí)算法,幫助研發(fā)工作者更方便地進(jìn)行研發(fā)[3]。其中Mahout中的Taste提供了一系列組件讓開發(fā)者根據(jù)自身的需求構(gòu)建推薦系統(tǒng)。
Taste主要有5個(gè)組件構(gòu)成[4]:Data Model,User Smiliarity和Item Similarity,User Neighborhood和Recommender。
(1)Data Model:用于讀取用戶的偏好數(shù)據(jù)。Taste目前提供了3種讀取數(shù)據(jù)源的方式,分別是從數(shù)據(jù)庫、從文件、從內(nèi)存對(duì)用戶的偏好信息進(jìn)行讀取。
(2)User Similarity和Item Similarity:相似度是推薦系統(tǒng)的核心部分, 它主要分為用戶相似度(User Similarity)和項(xiàng)目相似度(Item Similarity)。User Smilarity用于定義兩個(gè)用戶之間的相似度,Item Similarity用于計(jì)算兩個(gè)項(xiàng)目的相似度。
(3)User Neighbourhood:和(2)中提到的User Smilarity一起使用,定義尋找鄰居的方法。
(4)Recommender:Recommender是推薦系統(tǒng)的核心,決定了系統(tǒng)采用何種推薦算法。Recommender是一個(gè)接口,它的主要實(shí)現(xiàn)類有Generic User Based Recommender和Generic Item Based Recommender。
本系統(tǒng)主要基于Mahout框架為用戶提供推薦服務(wù),在開發(fā)中采用C/S框架,前端負(fù)責(zé)用戶界面交互,后端負(fù)責(zé)核心推薦算法。系統(tǒng)架構(gòu)采用分層設(shè)計(jì),以下分別對(duì)表示層、推薦算法層以及存儲(chǔ)層進(jìn)行介紹。
(1)表示層:負(fù)責(zé)與用戶進(jìn)行交互,在本系統(tǒng)中主要負(fù)責(zé)把用戶的請(qǐng)求傳遞給推薦算法層,經(jīng)過后臺(tái)計(jì)算后返回推薦結(jié)果,最后展示在界面。
(2)推薦算法層:是整個(gè)系統(tǒng)的核心,用于處理用戶請(qǐng)求并返回計(jì)算結(jié)果。本系統(tǒng)中使用基于項(xiàng)目的協(xié)同過濾推薦,所以當(dāng)該層收到用戶請(qǐng)求時(shí),會(huì)首先找到與當(dāng)前用戶喜歡的圖書相似度較高的其他圖書,把這些圖書返回給表示層。
(3)存儲(chǔ)層:存儲(chǔ)系統(tǒng)中的數(shù)據(jù),主要包括用戶基本信息數(shù)據(jù)(性別、年齡),圖書數(shù)據(jù)以及其他數(shù)據(jù)等。
在1.2節(jié)中提到過Taste組件主要由5部分組成,依次對(duì)應(yīng)著推薦結(jié)果產(chǎn)生的幾個(gè)過程。下面介紹實(shí)現(xiàn)整個(gè)系統(tǒng)中最重要的3步。
推薦系統(tǒng)進(jìn)行推薦的前提是了解用戶過去,根據(jù)用戶的過去行為預(yù)測(cè)他的偏好。因此首先要對(duì)用戶行為進(jìn)行建模。以圖書推薦系統(tǒng)為例,用戶的行為主要為瀏覽、搜索、收藏、借閱,針對(duì)不同的行為設(shè)置分值,從而得到用戶—物品評(píng)分矩陣。
對(duì)于偏好數(shù)據(jù)的處理可以有多種方式。Taste提供了Preference接口來封裝用戶的偏好信息,常用的實(shí)現(xiàn)類為Generic Preference,數(shù)據(jù)格式為<userid,itemid,value >。在1.2節(jié)中提到Data Model用于讀取用戶偏好,其中Generic Data Model支持從內(nèi)存中讀取用戶偏好信息,和Generic Preference搭配使用。
本系統(tǒng)采用File Data Model,直接從文件中讀取用戶偏好信息,文件每行是簡單的三元組樣式:userID,itemID,preference,分別表示用戶ID,圖書ID,偏好值,中間用逗號(hào)分隔。
相似度計(jì)算是用于計(jì)算對(duì)象之間的相似程度,是涉及推薦系統(tǒng)中重要的一環(huán)。相似度計(jì)算的越準(zhǔn)確,推薦結(jié)果的質(zhì)量也越好。
目前Taste中提供的相似度計(jì)算方法,大多為基于向量的計(jì)算,即把一個(gè)用戶對(duì)所有商品的喜好或者把所有用戶對(duì)一個(gè)商品的喜好處理為一個(gè)向量。通過計(jì)算兩個(gè)向量之間的距離,來推測(cè)用戶或者商品之間的相似度,距離越近相似度越大。
Taste中相似度算法按照計(jì)算對(duì)象不同,分為User Similarity和Item Similarity兩種。本文使用基于項(xiàng)目的協(xié)同過濾推薦,因此采用Item Similairty下的實(shí)現(xiàn)類Pearson Correlation Similarity通過皮爾遜相關(guān)系數(shù)計(jì)算圖書和圖書之間的相似度。
Recommender是推薦引擎最核心的模塊,決定采用何種推薦算法進(jìn)行推薦。沒有完美的推薦算法,只有適合的推薦算法。因此,首先要了解每個(gè)推薦算法的優(yōu)缺點(diǎn)和不同的使用場(chǎng)景。基于用戶的協(xié)同過濾推薦和基于項(xiàng)目的協(xié)同過濾推薦的主要區(qū)別如下[5]。
(1)基于用戶的協(xié)同過濾:首先找到和當(dāng)前用戶有相同興趣愛好的用戶,即鄰居。把鄰居喜歡的商品推薦給當(dāng)前用戶。因此,該算法在計(jì)算用戶相似度這一環(huán)節(jié)會(huì)有大量計(jì)算,適合于用戶較少的、實(shí)時(shí)性要求不高的場(chǎng)景。
(2)基于項(xiàng)目的協(xié)同過濾:推薦和用戶之前喜歡的物品類似的物品,比如用戶之前產(chǎn)生過借閱歷史書A的行為,系統(tǒng)就會(huì)給用戶推薦歷史書B。所以該種推薦算法在計(jì)算物品相似度這一環(huán)節(jié)會(huì)有大量計(jì)算,適合于物品數(shù)量明顯小于用戶數(shù)的場(chǎng)合,比如音樂、圖書、電子商務(wù)的網(wǎng)站。
通過以上分析,我們知道對(duì)于圖書推薦來說,應(yīng)該選擇基于項(xiàng)目的推薦算法。
通過以上幾個(gè)環(huán)節(jié),我們即構(gòu)建出一個(gè)推薦系統(tǒng)。本系統(tǒng)中使用File Data Model存儲(chǔ)用戶偏好評(píng)分,調(diào)用Pearson Correlation Similarity計(jì)算書本之間的相似度,使用基于項(xiàng)目的推薦算法Generic Item Based Recommende產(chǎn)生推薦結(jié)果,最后把結(jié)果傳遞給表現(xiàn)層。
本文設(shè)計(jì)實(shí)現(xiàn)了一個(gè)基于Mahout的圖書推薦系統(tǒng)系統(tǒng),系統(tǒng)通過基于項(xiàng)目的協(xié)同過濾的推薦算法進(jìn)行推薦。系統(tǒng)采用分層設(shè)計(jì),易于開發(fā)和維護(hù),穩(wěn)定性強(qiáng),有利于對(duì)用戶興趣度的后續(xù)數(shù)據(jù)挖掘研究。關(guān)于推薦系統(tǒng)中的冷啟動(dòng)問題以及時(shí)間因素對(duì)于推薦結(jié)果的影響是本文還沒有完成的,冷啟動(dòng)和時(shí)間因素是下一步主要解決的問題。