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