薛羽, 李煒, 沈奇威
(1 北京郵電大學網絡與交換技術國家重點實驗室, 北京 100876;2 東信北郵信息技術有限公司, 北京 100191)
基于SQL-Like語言的分布式推薦系統*
薛羽1,2, 李煒1,2, 沈奇威1,2
(1 北京郵電大學網絡與交換技術國家重點實驗室, 北京 100876;2 東信北郵信息技術有限公司, 北京 100191)
Hadoop應用的開發要求用戶掌握分布式編程的相關知識,造成了一定的開銷,Apache Pig則提供了一種輕量級的開發方式,用戶通過編寫類SQL(Structured Query Language)語句,即可調用Hadoop的分布式處理能力。本文將結合Apache Pig和Item-Based協同過濾算法,設計并實現一種輕量級、可維護性較高的分布式推薦系統。
推薦系統;分布式;Hadoop;SQL;協同過濾
隨著互聯網行業的迅猛發展,出現了信息過載的現象,用戶很難從海量信息中找到其感興趣的內容。推薦系統很好地解決了這一問題,它通過對用戶的歷史行為進行分析,得出用戶行為習慣,并根據這種習慣產生推薦結果,達到信息過濾的目的。然而,用戶的歷史行為記錄往往都是海量數據,對存儲和計算環境有著較高的要求。Hadoop是一個開源的分布式計算平臺,適用于大數據處理,它主要包括Hadoop分布式文件系統(HDFS, Hadoop Distributed File System)和分布式計算框架MapReduce。Hadoop應用的開發要求用戶掌握分布式編程的相關知識,造成了一定的開銷,Apache Pig則提供了一種輕量級的開發方式,用戶通過編寫類SQL語句,即可調用Hadoop的分布式處理能力。本文將結合Apache Pig和Item-Based協同過濾算法,設計并實現一種輕量級、可維護性較高的分布式推薦系統[1,2]。
1.1 功能模塊劃分
根據推薦系統的一般處理流程[3],將推薦系統分為6個功能模塊,如圖1所示,本文將重點介紹推薦引擎部分的實現過程。
(1) 數據采集:從多種數據源獲取用戶記錄,存儲在HDFS中;
(2) 數據清洗:對原始數據做初步統計,過濾不符合規定格式的記錄;
(3) 數據準備:處理數據,使其符合推薦引擎輸入數據的格式要求;
(4) 推薦引擎:根據用戶歷史記錄,利用推薦算法,產生推薦結果;
(5) 結果展示:將推薦結果展示給用戶,包括Web、報表等多種形式;
(6) 反饋修復:根據用戶對推薦結果的反饋情況,修改相關推薦參數。
1.2 相關定義說明
設用戶集合為U,物品集合為B:
(1) “用戶-物品”矩陣:矩陣中的每個元素表示用戶對物品的偏好值pref,如果pref=0,表示不存在相應的(uid, bid,pref)記錄。
(4) 物品間相似度矩陣:矩陣中的每個元素表示兩個物品間的相似程度sim,值越大,表示這兩個物品被多個用戶同時喜歡的程度越高。
Pig中的數據被抽象為一張張的關系表,后文中統一用phase:(uid, bid, pref)表示,關系表中列的類型也可以為一張關系表,如:(uid,{(bid, pref)})[2]。

圖1 模塊劃分
用戶對物品的偏好值往往都帶有一定的用戶特征。比如,有的用戶對物品的打分整體偏高,而有的用戶卻恰好相反,所給出的分數都分布在一個低分區間,用戶之間的這種特征差異會影響后續物品之間相似度計算的準確性。偏好值的標準化處理屏蔽了這種差異,具體處理步驟如下(如圖2和圖3所示):

圖2 偏好值標準化-運算步驟

圖3 偏好值標準化-數據結構變化及Pig代碼

圖4 計算相似度矩陣-分母處理
(1) 從“用戶-物品”關系矩陣中獲取用戶特征向量。
(2) Pig使用group by語句實現了這一步驟(phase21),將分散存儲在集群中不同節點上的具有相同uid的用戶記錄匯聚到同一個節點(聚合結點);parallel指定了聚合結點的個數;
(4) 恢復“用戶-物品”關系矩陣。flatten語句可以將已經聚合的數據展開,相當于group by的逆操作(phase24)。phase22的作用是保證上下文列名的一致性,后面的步驟中還會出現相同類型的語句,將不再進行解釋。


圖5 計算相似度矩陣-相似度計算

圖6 生成推薦結果-運算步驟
3.1 分母處理
3.2 相似度計算
(2) 將分散在各個結點上的(bid1, bid2, sim)按照(bid1, bid2)進行聚合(phase411, phase412),并在各個聚合節點上計算相同(bid1, bid2)組合的sim和。
可見,通過簡單的公式變換,整個相似度計算過程充分利用了分布式計環境的性能。

圖7 生成推薦結果-數據結構變化及Pig代碼
將物品間相似度矩陣乘以“用戶-物品”矩陣,即可得到用戶對物品的推薦偏好值(預測用戶對某個物品的喜好程度),具體處理步驟如下(如圖6和圖7所示):
(1) 將分散存儲的矩陣元素(bid1, bid2, sim)按照bid1進行聚合(phase501);
(2) 將用戶偏好記錄中的偏好值pref乘以記錄中所指定的物品bidi與其他物品之間的相似度,這個過程分散在用戶偏好記錄所在的結點執行(phase503~phase507);
(3) 將(uid, bid)相同的記錄的pref* sim值進行加權(phase508~phase509);
(4) 過濾推薦結果中用戶已打過分的物品(phase511~phase513),cogroup by根據指定的主鍵對多個關系表進行聚合;
(5) 對推薦結果進行降序排列,以及推薦物品個數的限制。order by desc語句表示降序排列,limit的作用為指定輸出記錄的數量。
互聯網的飛速發展,將我們帶入了信息爆炸時代,用戶面對海量信息,往往會眼花繚亂。個性化推薦系統通過分析用戶行為,為用戶推薦有價值的信息,實現了信息的過濾,很好的解決了上述問題。同時,由于用戶行為記錄的數據量通常都非常大,這就要求推薦系統具有較高的存儲能力和計算能力。
本文設計并實現了一種輕量級的分布式推薦系統,其使用類SQL語言的編程方式,調用底層的Hadoop分布式處理能力,從海量數據中為用戶選擇其感興趣的內容,代碼量少,開發效率高,具有較好的可維護性。
[1] 許海玲. 互聯網推薦系統比較研究[J]. 軟件學報, 2009,(2):350-362.
[2] Apache Foundation. Apache Pig[EB/OL]. http://pig.apache.org,2012-07-24.
[3] 項亮. 推薦系統實踐[M]. 北京: 人民郵電出版社, 2012.
[4] Sarwar B. et al. Item-based collaborative filtering recommendation algorithms[A]. The 10th International Conference on World Wide Web[C],2001,285-295.
[5] Linden G, Smith B, York J, Amazon. com recommendations: itemto-item collaborative filtering[J]. Internet Computing, IEEE, 2003, (1):76-80.
[6] Ni P. et al. Web information recommendation based on user behaviors[A].Computer Science and Information Engineering, 2009 WRI World Congress on[C], 2009.
[7] Schelter S. Distributed itembased collaborative filtering with apache mahout [EB/OL].http://isabel-drost.de/hadoop/slides/collabMahout. pdf,2010-10-07.
Distributed recommendation system based on SQL-like language
XUE Yu1,2, LI Wei1,2, SHEN Qi-wei1,2
(1 State Key Laboratory of Networking and Switching Technology, Beijing University of Posts and Telecommunications, Beijing 100876, China; 2 EBUPT Information Technology Co., Ltd., Beijing 100191, China)
Hadoop is an open source distributed computing platform, it’s suitable to the large data processing, but we must learning distributed programming skills before developing Hadoop applications. Apache Pig provides a lightweight development way, it allows us to make use of distributed processing capacity of Hadoop by using SQL (Structured Query Language) language. In this paper we will design and implements a lightweight and high maintainability distributed recommendation system through the combination between Apache Pig and item-based collaborative fi ltering algorithm.
recommendation system; distributed; hadoop; SQL; collaborative fi ltering
TN929.5
A
1008-5599(2012)11-0084-05
2012-10-10
國家自然科學基金(No. 61072057,61101119,61121001,61271019,60902051);長江學者和創新團隊發展計劃資助(No. IRT1049);國家科技重大專項(No. 2011ZX03002-001-01,移動互聯網總體架構研究)。