薛羽, 李煒, 沈奇威
(1 北京郵電大學網(wǎng)絡與交換技術(shù)國家重點實驗室, 北京 100876;2 東信北郵信息技術(shù)有限公司, 北京 100191)
基于SQL-Like語言的分布式推薦系統(tǒng)*
薛羽1,2, 李煒1,2, 沈奇威1,2
(1 北京郵電大學網(wǎng)絡與交換技術(shù)國家重點實驗室, 北京 100876;2 東信北郵信息技術(shù)有限公司, 北京 100191)
Hadoop應用的開發(fā)要求用戶掌握分布式編程的相關(guān)知識,造成了一定的開銷,Apache Pig則提供了一種輕量級的開發(fā)方式,用戶通過編寫類SQL(Structured Query Language)語句,即可調(diào)用Hadoop的分布式處理能力。本文將結(jié)合Apache Pig和Item-Based協(xié)同過濾算法,設計并實現(xiàn)一種輕量級、可維護性較高的分布式推薦系統(tǒng)。
推薦系統(tǒng);分布式;Hadoop;SQL;協(xié)同過濾
隨著互聯(lián)網(wǎng)行業(yè)的迅猛發(fā)展,出現(xiàn)了信息過載的現(xiàn)象,用戶很難從海量信息中找到其感興趣的內(nèi)容。推薦系統(tǒng)很好地解決了這一問題,它通過對用戶的歷史行為進行分析,得出用戶行為習慣,并根據(jù)這種習慣產(chǎn)生推薦結(jié)果,達到信息過濾的目的。然而,用戶的歷史行為記錄往往都是海量數(shù)據(jù),對存儲和計算環(huán)境有著較高的要求。Hadoop是一個開源的分布式計算平臺,適用于大數(shù)據(jù)處理,它主要包括Hadoop分布式文件系統(tǒng)(HDFS, Hadoop Distributed File System)和分布式計算框架MapReduce。Hadoop應用的開發(fā)要求用戶掌握分布式編程的相關(guān)知識,造成了一定的開銷,Apache Pig則提供了一種輕量級的開發(fā)方式,用戶通過編寫類SQL語句,即可調(diào)用Hadoop的分布式處理能力。本文將結(jié)合Apache Pig和Item-Based協(xié)同過濾算法,設計并實現(xiàn)一種輕量級、可維護性較高的分布式推薦系統(tǒng)[1,2]。
1.1 功能模塊劃分
根據(jù)推薦系統(tǒng)的一般處理流程[3],將推薦系統(tǒng)分為6個功能模塊,如圖1所示,本文將重點介紹推薦引擎部分的實現(xiàn)過程。
(1) 數(shù)據(jù)采集:從多種數(shù)據(jù)源獲取用戶記錄,存儲在HDFS中;
(2) 數(shù)據(jù)清洗:對原始數(shù)據(jù)做初步統(tǒng)計,過濾不符合規(guī)定格式的記錄;
(3) 數(shù)據(jù)準備:處理數(shù)據(jù),使其符合推薦引擎輸入數(shù)據(jù)的格式要求;
(4) 推薦引擎:根據(jù)用戶歷史記錄,利用推薦算法,產(chǎn)生推薦結(jié)果;
(5) 結(jié)果展示:將推薦結(jié)果展示給用戶,包括Web、報表等多種形式;
(6) 反饋修復:根據(jù)用戶對推薦結(jié)果的反饋情況,修改相關(guān)推薦參數(shù)。
1.2 相關(guān)定義說明
設用戶集合為U,物品集合為B:
(1) “用戶-物品”矩陣:矩陣中的每個元素表示用戶對物品的偏好值pref,如果pref=0,表示不存在相應的(uid, bid,pref)記錄。
(4) 物品間相似度矩陣:矩陣中的每個元素表示兩個物品間的相似程度sim,值越大,表示這兩個物品被多個用戶同時喜歡的程度越高。
Pig中的數(shù)據(jù)被抽象為一張張的關(guān)系表,后文中統(tǒng)一用phase:(uid, bid, pref)表示,關(guān)系表中列的類型也可以為一張關(guān)系表,如:(uid,{(bid, pref)})[2]。
圖1 模塊劃分
用戶對物品的偏好值往往都帶有一定的用戶特征。比如,有的用戶對物品的打分整體偏高,而有的用戶卻恰好相反,所給出的分數(shù)都分布在一個低分區(qū)間,用戶之間的這種特征差異會影響后續(xù)物品之間相似度計算的準確性。偏好值的標準化處理屏蔽了這種差異,具體處理步驟如下(如圖2和圖3所示):
圖2 偏好值標準化-運算步驟
圖3 偏好值標準化-數(shù)據(jù)結(jié)構(gòu)變化及Pig代碼
圖4 計算相似度矩陣-分母處理
(1) 從“用戶-物品”關(guān)系矩陣中獲取用戶特征向量。
(2) Pig使用group by語句實現(xiàn)了這一步驟(phase21),將分散存儲在集群中不同節(jié)點上的具有相同uid的用戶記錄匯聚到同一個節(jié)點(聚合結(jié)點);parallel指定了聚合結(jié)點的個數(shù);
(4) 恢復“用戶-物品”關(guān)系矩陣。flatten語句可以將已經(jīng)聚合的數(shù)據(jù)展開,相當于group by的逆操作(phase24)。phase22的作用是保證上下文列名的一致性,后面的步驟中還會出現(xiàn)相同類型的語句,將不再進行解釋。
圖5 計算相似度矩陣-相似度計算
圖6 生成推薦結(jié)果-運算步驟
3.1 分母處理
3.2 相似度計算
(2) 將分散在各個結(jié)點上的(bid1, bid2, sim)按照(bid1, bid2)進行聚合(phase411, phase412),并在各個聚合節(jié)點上計算相同(bid1, bid2)組合的sim和。
可見,通過簡單的公式變換,整個相似度計算過程充分利用了分布式計環(huán)境的性能。
圖7 生成推薦結(jié)果-數(shù)據(jù)結(jié)構(gòu)變化及Pig代碼
將物品間相似度矩陣乘以“用戶-物品”矩陣,即可得到用戶對物品的推薦偏好值(預測用戶對某個物品的喜好程度),具體處理步驟如下(如圖6和圖7所示):
(1) 將分散存儲的矩陣元素(bid1, bid2, sim)按照bid1進行聚合(phase501);
(2) 將用戶偏好記錄中的偏好值pref乘以記錄中所指定的物品bidi與其他物品之間的相似度,這個過程分散在用戶偏好記錄所在的結(jié)點執(zhí)行(phase503~phase507);
(3) 將(uid, bid)相同的記錄的pref* sim值進行加權(quán)(phase508~phase509);
(4) 過濾推薦結(jié)果中用戶已打過分的物品(phase511~phase513),cogroup by根據(jù)指定的主鍵對多個關(guān)系表進行聚合;
(5) 對推薦結(jié)果進行降序排列,以及推薦物品個數(shù)的限制。order by desc語句表示降序排列,limit的作用為指定輸出記錄的數(shù)量。
互聯(lián)網(wǎng)的飛速發(fā)展,將我們帶入了信息爆炸時代,用戶面對海量信息,往往會眼花繚亂。個性化推薦系統(tǒng)通過分析用戶行為,為用戶推薦有價值的信息,實現(xiàn)了信息的過濾,很好的解決了上述問題。同時,由于用戶行為記錄的數(shù)據(jù)量通常都非常大,這就要求推薦系統(tǒng)具有較高的存儲能力和計算能力。
本文設計并實現(xiàn)了一種輕量級的分布式推薦系統(tǒng),其使用類SQL語言的編程方式,調(diào)用底層的Hadoop分布式處理能力,從海量數(shù)據(jù)中為用戶選擇其感興趣的內(nèi)容,代碼量少,開發(fā)效率高,具有較好的可維護性。
[1] 許海玲. 互聯(lián)網(wǎng)推薦系統(tǒng)比較研究[J]. 軟件學報, 2009,(2):350-362.
[2] Apache Foundation. Apache Pig[EB/OL]. http://pig.apache.org,2012-07-24.
[3] 項亮. 推薦系統(tǒng)實踐[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);長江學者和創(chuàng)新團隊發(fā)展計劃資助(No. IRT1049);國家科技重大專項(No. 2011ZX03002-001-01,移動互聯(lián)網(wǎng)總體架構(gòu)研究)。