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