鄧秀娟
摘要:面對當今信息過載的問題,推薦系統(tǒng)發(fā)揮了重要的作用,構建一種基于Mahout的推薦引擎使推薦系統(tǒng)發(fā)揮更優(yōu)的推薦效果。本文介紹了Mahout中的各種推薦算法的基本特點,基于某約會網(wǎng)站的數(shù)據(jù)示例,對幾種推薦算法進行嘗試性測試,從而找出最優(yōu)的算法組合方案實現(xiàn)一個推薦引擎。
關鍵詞:推薦系統(tǒng);Mahout;單機內(nèi)存算法;組件
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2016)25-0171-02
隨著信息技術和互聯(lián)網(wǎng)的發(fā)展,人們逐漸從信息匱乏的時代進入了信息過載的時代。推薦系統(tǒng)的出現(xiàn)可以幫助用戶發(fā)現(xiàn)對自己有價值的信息,同時能夠讓信息展現(xiàn)在對它感興趣的用戶面前。個性化推薦系統(tǒng)依賴于用戶的行為數(shù)據(jù),目前被廣泛地應用在包括電子商務、社交網(wǎng)絡、電影和視頻、音樂、個性化郵件和廣告、基于位置的服務、閱讀等領域中,從而提高相關網(wǎng)站的點擊率和轉(zhuǎn)化率。Mahout是來自Apache的、開源的機器學習軟件庫,主要提供了機器學習領域的推薦引擎(協(xié)同過濾)、聚類和分類算法的實現(xiàn),為推薦系統(tǒng)的應用和研究提供了支持。
本文通過對Mahout中的推薦算法進行研究,使用一個示例對推薦算法進行評估,從而找到一個有效的推薦程序應用到示例中,為用戶實現(xiàn)推薦。
1 Mahout的推薦算法
基于Hadoop分布式框架的機器學習算法庫Mahout封裝了多種機器學習算法的分布式實現(xiàn),由多個組件混搭而成,各個組件的組合可以定制,從而針對特定應用提供理想的推薦。通常包括的組件如下:數(shù)據(jù)模型由DataModel實現(xiàn);用戶間的相似性度量由UserSimilarity實現(xiàn);用戶近鄰的定義由UserNeighborhood實現(xiàn);推薦引擎由一個Reommender實現(xiàn)。從數(shù)據(jù)處理能力上,Mahout推薦算法可以分為單機內(nèi)存算法和基于Hadoop的分布式算法,本文僅討論單機內(nèi)存算法。
1.1 推薦數(shù)據(jù)的表示
推薦引擎的輸入是偏好數(shù)據(jù)(preference data),通常用(用戶ID,物品ID,偏好值)的元組集合來表示。在Mahout中使用DataModel對推薦程序的輸入數(shù)據(jù)進行封裝,GernericDataModel是現(xiàn)有DataModel實現(xiàn)中最簡單的,它通過程序在內(nèi)存中構造數(shù)據(jù)表示形式,將偏好作為輸入,將用戶ID映射到這些用戶數(shù)據(jù)所在的PreferenceArray(一個接口,表示一個偏好的聚合)上。若用戶和物品的數(shù)據(jù)無偏好值時,可以使用GenericBooleanPrefDataModel來實現(xiàn)?;谖募臄?shù)據(jù)使用FileDataModel,從文件中讀取數(shù)據(jù),將所得的偏好數(shù)據(jù)存儲到內(nèi)存,即GernericDataModel中。基于數(shù)據(jù)庫的數(shù)據(jù)用JDBCDataModel實現(xiàn),若使用MySQL數(shù)據(jù)庫,可以使用其子類MySQLJDBCDataModel。
1.2 相似性度量
基于用戶的推薦程序和基于物品的推薦程序都依賴于UserSimilarity這個組件,及用戶或物品之間的相似性,缺乏對用戶或物品的相似性定義的推薦方法是毫無意義的。相似度算法包括了歐氏距離相似度(EuclideanDistanceSimilarity)、皮爾遜相關系數(shù)相似度(PearsonCorrelationSimilarity)、曼哈頓距離相似度(CityBlockSimilarity)、對數(shù)似然相似度(LogLikehoodSimilarity)、谷本系數(shù)相似度(TanimotoCoefficientSimilarity)等
1.3 用戶近鄰
近鄰算法適用于基于用戶的協(xié)同過濾算法,選出前N個最相似的用戶構成鄰域,作為最終推薦參考的用戶。近鄰算法分為2種:基于固定大小和基于閾值的。NearestNUserNeighborhood實現(xiàn)基于固定大小的鄰域,指定N的個數(shù),如選出前10個最相似的用戶;ThresholdUserNerghborhood實現(xiàn)基于閾值的鄰域,指定比例,如選擇前10%最相似的用戶。
1.4 推薦算法
Mahout的推薦算法以Recommender作為基礎父類,實現(xiàn)類有基于用戶的推薦算法、基于物品的推薦算法、基于物品的KNN的推薦算法、Slope-one推薦算法、基于奇異值分解(SVD)的推薦算法、基于聚類(TreeCluster)的推薦算法。推薦算法對比如表1所示。
2 Mahout在推薦系統(tǒng)中的應用
上節(jié)介紹了Mahout提供的推薦算法,接下來講述如何在數(shù)據(jù)集上使用Mahout開發(fā)推薦系統(tǒng)。首先分析樣本數(shù)據(jù),對數(shù)據(jù)做預處理,然后選取一個方法,收集數(shù)據(jù)、評估結(jié)果,多次重復這個過程,找到最優(yōu)的推薦算法創(chuàng)建一個推薦引擎。
本示例數(shù)據(jù)來自捷克的一個約會網(wǎng)站(http://libimseti.cz)。該網(wǎng)站的用戶可以對其他用戶的檔案進行評分,分值從1到10不等,分值1代表“喜歡”,分值10代表“不喜歡”。
2.1 數(shù)據(jù)的輸入
示例數(shù)據(jù)集有17359346份評分,存儲為ratings.dat文件,是一個簡單地以逗號分界的文件,包含用戶ID、檔案ID和評分,檔案是指其他用戶的檔案。每行代表一個用戶對另一個用戶檔案的一次評分,如:1,133,8,表示用戶ID為“1”的用戶對檔案ID為“133”的評分值為8。輸入數(shù)據(jù)的格式直接可以用于Mahout的FileDataModel。即用戶和檔案是數(shù)字,文件按字段依次以逗號分隔:用戶ID,物品ID,偏好值。
2.2 尋找一個有效的推薦程序
為了創(chuàng)建一個推薦引擎來處理示例數(shù)據(jù),需要從Mahout中挑選一個推薦程序。通過在基于用戶的推薦程序和基于物品的推薦程序下選擇幾種不同的相似性度量和鄰域定義進行嘗試性測試,測試結(jié)果如表2、表3所示。
以上的結(jié)果較為理想。這些推薦程序估計的用戶偏好平均偏差在1.12~1.56之間,而取值范圍為1~10。最佳的方案是選擇基于歐氏距離相似性度量和2個最近鄰域的基于用戶的推薦程序,其評分估值為1.12。
從結(jié)果看出,平均誤差,即估計值和實際值的平均差值翻了大概2倍,具體值超過了2,顯然基于物品的推薦方法相較于基于用戶的推薦方法效果不佳。
Slope-one推薦程序在數(shù)據(jù)模型中的大多數(shù)物品對之間求得一個差值。示例數(shù)據(jù)集中有168791個物品(檔案),意味著潛在存儲了280億個差值,它太龐大因而無法存入內(nèi)存??梢钥紤]在數(shù)據(jù)庫中存儲這些差值,但會極大地降低性能。對于示例數(shù)據(jù)集,Slope-one推薦程序也并非最佳選擇。
讀者還可以嘗試更多的組合進行測試,經(jīng)過目前所做的測試進行對比分析,這里在Mahout中選擇最佳方案:基于用戶的推薦程序,采用歐氏距離測度且鄰域為2。
2.3 評估性能
使用Mahout的LoadEvaluator類評估該數(shù)據(jù)集上使用的推薦程序,采用如下的標識類參數(shù):-server –d64 –XmX2048 –XX:+UseParallelGC –XX:+UserParallelOldGC。在測試機上平均每次推薦會用218ms。這個程序在運行時僅占用1GB左右的堆空間。這些測試結(jié)果是否可被接受,依賴于應用的需求和可用的硬件資源。對于許多應用而言,這些測試數(shù)據(jù)應該還是符合要求的。
3 結(jié)束語
本文通過使用一個來自約會網(wǎng)站的數(shù)據(jù)作為示例,分析了數(shù)據(jù)的格式,使之成為適合Mahout應用的數(shù)據(jù)輸入格式。通過嘗試性測試不同算法組件的組合進行對比,找出最佳的推薦程序,并對推薦程序進行性能評估,使讀者了解在Mahout選擇和創(chuàng)建一個推薦引擎的基本過程。本文僅討論了基于單機內(nèi)存的算法,基于Hadoop的分布式算法將是今后考慮的研究方向。
參考文獻:
[1] 朱倩,錢立.基于Mahout的推薦系統(tǒng)的分析與設計[J].科技通報,2013(6):35-36.
[2] 韓懷梅,李淑琴.基于Mahout的個性化推薦系統(tǒng)架構[J].北京信息科技大學學報:自然科學版,2014(4):51-54.
[3] 陶維成,王婷婷,姚琪.基于Mahout的推薦系統(tǒng)構建[J].重慶科技學院學報:自然科學版,2014(2):143-146.
[4] 奉國和,黃家興.基于Hadoop與Mahout的協(xié)同過濾圖書推薦研究[J].圖書情報工作,2013(18):116-121.