焦亞琴 劉曉云 張銀葉
摘要:互聯(lián)網(wǎng)技術(shù)的發(fā)展把電子商務(wù)帶入了海量數(shù)據(jù)時代,這種“信息過載”現(xiàn)象不但沒有給信息檢索帶來便利,反而帶來了不少困惑。個性化推薦系統(tǒng)正是解決這一問題的有效手段之一。傳統(tǒng)的研究主要側(cè)重推薦算法等理論研究,并沒有考慮到實際系統(tǒng)的開發(fā)難度問題。本文從實際應(yīng)用出發(fā)結(jié)合開源框架Mahout來設(shè)計與實現(xiàn)推薦系統(tǒng),首先對Mahout源碼相關(guān)知識進行分析,研究Mahout推薦引擎的源碼實現(xiàn)以及使用方式,然后采用MVC設(shè)計模式設(shè)計了整個系統(tǒng)架構(gòu)和平臺開發(fā)的技術(shù)路線,最后結(jié)合javaEE技術(shù)實現(xiàn)了整個系統(tǒng)功能并進行了實驗分析。
關(guān)鍵詞:電子商務(wù);推薦系統(tǒng);個性化;Mahout;系統(tǒng)設(shè)計
中圖分類號:TP393 文獻標識碼:A 文章編號:1009-3044(2015)11-0261-04
Research on Personalized Recommendation System of E-commerce based on Mahout
JIAO Ya-qin1, LIU Xiao-yun1, ZHANG Yin-ye2
(1.School of Business, Anhui University, Hefei 230601, China; 2.Automation Department, University of Science and Technology of China, Hefei 230027, China)
Abstract: E-commerce has come into the era of massive data with the development of Internet technology, this " information overload" phenomenon not only failed to bring convenience to the information of find, but also brings a lot of confusion. Personalized recommendation system is one of effective means to solve this problem, traditional research mainly focuses on the recommendation algorithm research, does not take the difficulty of the problem of the actual system development into account. In this paper, design and implement a recommendation system with Mahout open source framework. Firstly, analysis Mahout with open source, study on the implementation and use of the recommendation engine. Secondly using the MVC design pattern to design the entire system and design the technology road map for development system. Finally, implementation the entire system with javaEE technology, and analysis of experiments based on open data sets .
Key words: E-commerce; recommended system; personalized; mahout; system design
隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,電子商務(wù)已經(jīng)進入海量數(shù)據(jù)時代,這一變化卻讓人感覺到知識匱乏[1],原因是從海量數(shù)據(jù)里檢索感興趣的信息會花費較多的時間,而且檢索過程不再跟以前一樣簡單。這種情況促進了個性化推薦系統(tǒng)(Personalized Recommendation System,PRS)的產(chǎn)生,其能根據(jù)歷史內(nèi)容自動提供相關(guān)信息給用戶。
電子商務(wù)是互聯(lián)網(wǎng)技術(shù)迅速發(fā)展的必然產(chǎn)物[2],隨著網(wǎng)絡(luò)技術(shù)和信息技術(shù)的不斷發(fā)展,電子商務(wù)也得到了蓬勃的發(fā)展。當(dāng)人們在享受電子商務(wù)帶來方便的時候,卻出現(xiàn)了一些新的問題,一方面,出現(xiàn)了“信息過載”現(xiàn)象,另一方面,商家與消費者失去了當(dāng)面溝通的機會。個性化服務(wù)能預(yù)測潛在的需求,提供針對性服務(wù),讓客戶與商家雙贏,目前PRS已經(jīng)成為解決上面兩個問題的一種有效手段。PRS能搜集用戶歷史信息,然后根據(jù)其從互聯(lián)網(wǎng)海量信息里尋找潛在的資源,最后為用戶提供個性化推薦功能。推薦實際是根據(jù)歷史信息,判斷用戶將來估計會感興趣的資源,并將其展示給用戶。
目前推薦系統(tǒng)研究成果已經(jīng)應(yīng)用到很多領(lǐng)域,雖然經(jīng)過多年的發(fā)展,還是存在擴展性、稀疏性等問題。國內(nèi)對PRS的研究絕大多數(shù)是停留在對算法本身的研究與改進上,更側(cè)重理論研究,雖然有的算法在理論上得到了很好的提升,但是并沒有考慮到實際的編碼工作,這給開發(fā)系統(tǒng)帶來了很大的難度。本文并沒有依據(jù)傳統(tǒng)的研究方式,而是從工程實際出發(fā),真正的把推薦功能應(yīng)用到電子商務(wù)中;本文結(jié)合了開源的Mahout來開發(fā)系統(tǒng),減少了編碼工作量,同時利于系統(tǒng)的擴展;設(shè)計系統(tǒng)采用“B/S架構(gòu)”,服務(wù)器上存放著數(shù)據(jù),業(yè)務(wù)數(shù)據(jù)不需要保存在客戶端,這樣就解決了數(shù)據(jù)安全性問題,每一筆交易都直接進入數(shù)據(jù)庫,解決了數(shù)據(jù)一致性問題,客戶端能更新實時數(shù)據(jù),從而提高了系統(tǒng)的實時性;本系統(tǒng)為提高用戶體驗而將推薦結(jié)果設(shè)計為可視化界面。
1 相關(guān)研究
1.1 推薦系統(tǒng)的作用
1)對消費者的作用
目前,個性化電子商務(wù)推薦系統(tǒng)的作用和意義主要是針對供應(yīng)商,然而,推薦系統(tǒng)的真正使用者是消費者,只有消費者認可才能產(chǎn)生它應(yīng)有的作用。如果根據(jù)消費者的互聯(lián)網(wǎng)瀏覽歷史來向其推薦物品當(dāng)作是對消費者作出的一項決策,將會產(chǎn)生如下作用。
縮短決策時間。在購物決策方面體現(xiàn)的尤其明顯。消費者可能盲目的在互聯(lián)網(wǎng)中搜索產(chǎn)品或輸入關(guān)鍵字搜索,但仍然是面向海量、異構(gòu)的商品。推薦系統(tǒng)則可以依據(jù)消費者的歷史購物信息或偏好推薦最為匹配的物品,在有限的商品里尋找到最中意的物品會變得容易。
提高決策質(zhì)量。在信息查找決策方面體現(xiàn)的尤其明顯。信息質(zhì)量的高低是利用信息的基礎(chǔ),面對“信息過載”現(xiàn)象,推薦系統(tǒng)充當(dāng)過濾器作用,幫助快而準的找到最適合的信息,從而避免大海撈針。
2 )對供應(yīng)商的作用
提高消費者對供應(yīng)商的忠誠度。一個高效運行的電子商務(wù)系統(tǒng)總是能讓消費者快速找到自己需要的資源、從而作出決策,只有提供友好的用戶體驗的系統(tǒng)才能獲得消費者持久支持。推薦系統(tǒng)分析用戶的歷史信息,根據(jù)不同情況向用戶提供具體有價值的推薦。若推薦效果很好,那么消費者會在一定程度上依賴該推薦系統(tǒng)。
提高利潤和交叉銷售能力。推薦系統(tǒng)在一定程度上能幫助商家將潛在的客戶轉(zhuǎn)化為實際的客戶,比如網(wǎng)站的瀏覽者,通過追蹤瀏覽痕跡再實時適當(dāng)為其推薦合適物品。推薦系統(tǒng)在另外一種程度上還有效提高了交叉銷售能力,現(xiàn)實中主要借助CRM(客戶關(guān)系管理)進行交叉銷售,發(fā)現(xiàn)顧客的需求,并通過滿足其需求而附帶銷售多種相關(guān)服務(wù)。推薦系統(tǒng)很好的充當(dāng)了“銷售員”的作用,其在幫助消費者完成購買的同時推薦那些確實需要但在購物過程中可能忽略的物品。
1.2 推薦系統(tǒng)面臨的挑戰(zhàn)
結(jié)果的解釋。推薦系統(tǒng)就是以向用戶推薦與其興趣符合的物品為目的,需要對結(jié)果進行說明,但是目前的主要解釋方式有其他用戶的評價與銷售排行,這些能說明推薦結(jié)果,然而說服力不強,所以需要進一步研究解釋方式。
實時性與推薦質(zhì)量。實時性和推薦質(zhì)量是相互矛盾的,一般情況下實時推薦是以犧牲推薦質(zhì)量為代價的,提高推薦質(zhì)量往往是以實時性為代價的,所以如何在二者之間達到平衡亟待解決。
靈活性?,F(xiàn)階段推薦系統(tǒng)結(jié)構(gòu)比較單一,隨著用戶多樣性變化與電子商務(wù)的發(fā)展,要求電子商務(wù)推薦模型能適應(yīng)這種需求的變化。
1.3 Mahout簡介
本文系統(tǒng)設(shè)計使用的是Mahout,其為Apache Software Foundation旗下的一個開源項目[4],其提供了一些金典算法實現(xiàn)用于機器學(xué)習(xí)領(lǐng)域,能幫助快速開發(fā)智能處理應(yīng)用系統(tǒng)。本文之所以使用Mahout是因為其不僅提供了推薦(Recommendation)模塊的實現(xiàn)還增加了對Hadoop的支持[5],這樣便于將來擴展系統(tǒng)到云計算的環(huán)境里。分析源碼可以得出結(jié)論,引擎主要由數(shù)據(jù)模型模塊、近鄰算法模塊、相似度算法模塊、推薦算法模塊和算法評分器等模塊組成。數(shù)據(jù)處理能力方面,Mahout提供了單機算法實現(xiàn)的同時還提供了基于Hadoop的分布式實現(xiàn)。單機版由Taste項目實現(xiàn),主要的UserCF、ItemCF都支持單機運行,但是存在內(nèi)存數(shù)量有限、數(shù)據(jù)瓶頸等問題。分布式算法是把內(nèi)存算法并行化,通過多臺計算機一起來完成任務(wù),但是也存在網(wǎng)絡(luò)通信、數(shù)據(jù)合并和存儲等問題。
1.4 開發(fā)程序的流程
研究源碼可知算法是按照模塊化設(shè)計來實現(xiàn)的,這樣減少了開發(fā)的工作量,其中數(shù)據(jù)模型模塊是用戶偏好的接口抽象,其實現(xiàn)支持從任意數(shù)據(jù)源抽取偏好信息,Taste支持從文件和數(shù)據(jù)庫讀取偏好信息。相似度模塊是推薦引擎的核心部分,其定義了兩個用戶間的相似度。在UserCF算法里,推薦的工作是找到與當(dāng)前用戶偏好相似的鄰居用戶。推薦模塊是推薦引擎的接口抽象,Taste項目里其實現(xiàn)類有GenericUserBasedRecommender和GenericItemBasedRecommender,為其提供一個DataModel,它就可以計算出不同用戶的推薦內(nèi)容。
1.5 相似度算法實現(xiàn)
1)數(shù)據(jù)模型實現(xiàn)
DataModel是數(shù)據(jù)模型的抽象,數(shù)據(jù)是進行推薦的基礎(chǔ),Mahout支持匹配不同的數(shù)據(jù)源,包括文件、SQL數(shù)據(jù)庫與NOSQL數(shù)據(jù)庫。Mahout支持兩種具體的數(shù)據(jù)文件格式。GenericDataModel:用戶ID,物品ID,偏好(用戶對物品的評分值)。GenericBooleanPrefDataModel:用戶ID,物品ID。把這些數(shù)據(jù)文件按照規(guī)定的文件格式存儲供引擎調(diào)用進行推薦。
2) 基于用戶相似度算法
UserCF算法度量用戶間的相似度主要通過不同用戶對物品的偏好不同,然后依據(jù)相關(guān)性給出推薦結(jié)果,即給用戶推薦其相似用戶喜好的物品。UserCF的算法相對簡單,首先利用用戶對某物品的偏好找到相似鄰居,然后把相似鄰居的喜好物品推薦給該用戶,實際計算的過程就是把用戶對物品的偏好以向量的形式保存。再計算與其它用戶之間的相似度,找出距離最小的鄰居后,根據(jù)相似度與偏好值來預(yù)測該用戶目前還沒有偏好的物品,最后將得到的推薦結(jié)果展示給用戶。Mahout提供了完整的UserCF算法實現(xiàn)。
3 )基于物品相似度算法
ItemCF評價Item之間的相似性主要通過用戶對不同物品的偏好不同,然后根據(jù)偏好值之間的相似性來推薦,也就是根據(jù)用戶的喜好推薦類似的物品。ItemCF與UserCF具有一定的相似性,其利用用戶對物品偏好值數(shù)據(jù)來計算物品之間相似度,得到相似的物品以后,預(yù)測那些用戶還沒有表示偏好的物品,把推薦結(jié)果呈現(xiàn)給用戶。Mahout實現(xiàn)了完整的ItemCF算法實現(xiàn)。
4) 相似度距離計算
上面兩個算法都會使用到相似度的計
算,Mahout通過了大量的相似度計算實現(xiàn),可以根據(jù)具體的使用情況進行選擇。其中歐式距離:[d(x,y)=(xi-yi)2],該距離計算方法沒有考慮數(shù)據(jù)重疊對結(jié)果的影響[6],Mahout利用枚舉類來解決這個問題。皮爾森相似度:
[p(x,y)=nxiyi-xiyinxi2-(xi)2nyi2-(yi)2],使用該相似度計算的前提是數(shù)據(jù)滿足正態(tài)分布,且數(shù)據(jù)是等間距的,Mahout同樣使用枚舉參數(shù)來解決這個問題。當(dāng)對數(shù)據(jù)進行中心化以后余弦相似度與皮爾森相似度計算結(jié)果是一樣的。秩相關(guān)系數(shù)相似度存在大量的排序,計算非常慢,所以一般不采用。Tanimoto相似度:[t(x,y)=xiyix2i+y2i-xiyi],專門負責(zé)處理沒有偏好的數(shù)據(jù)。根據(jù)上面的分析,計算相似度要根據(jù)具體的情況選擇合適的實現(xiàn)。
2 系統(tǒng)設(shè)計與實現(xiàn)
2.1 系統(tǒng)設(shè)計
本文采用“B/S”架構(gòu)來設(shè)計這個個性化推薦系統(tǒng),能支持多用戶的并發(fā)使用情況,采用了分層的形式來設(shè)計系統(tǒng),本文設(shè)計的系統(tǒng)的總體示意圖如圖1。系統(tǒng)包含五個層面,從下往上分別是底層數(shù)據(jù)源層、數(shù)據(jù)集成層、數(shù)據(jù)庫操作層、業(yè)務(wù)邏輯層和用戶界面層。這些層按照它們在系統(tǒng)的功能來分層設(shè)計,各自實現(xiàn)自己的功能與接口,通過分層來設(shè)計有利于系統(tǒng)的擴展。
圖1 系統(tǒng)示意圖
本文采用Java語言結(jié)合開源框架來實現(xiàn)系統(tǒng),為了復(fù)用代碼,采用模塊化設(shè)計方法實現(xiàn)。其實現(xiàn)結(jié)構(gòu)圖如圖2所示。
圖2 系統(tǒng)結(jié)構(gòu)圖
根據(jù)圖2可知,系統(tǒng)采用的是MVC的設(shè)計模式,表現(xiàn)層使用的是JSF開源框架,控制層主要是通過Spring來管理各種Bean,持久化層使用的是ORM框架Hibernate,為了提高系統(tǒng)可視化功能,把PrimeFaces的圖形模塊引入系統(tǒng)的設(shè)計。
2.2 系統(tǒng)實現(xiàn)
本文使用課題組某電商平臺區(qū)域數(shù)據(jù)集進行實驗,其中包含10000用戶、6000件物品名字和100萬偏好值,用戶對物品的偏好值是取自1~5范圍的整數(shù)值,取值越大也就說明用戶對該物品的喜好程度越大。偏好數(shù)據(jù)格式為:物品編號(goodsID),用戶編號(userID),時間(timestamp),偏好值(preference)。由于數(shù)據(jù)都存儲在數(shù)據(jù)庫里,對持久層數(shù)據(jù)進行數(shù)據(jù)庫的優(yōu)化設(shè)計與導(dǎo)入相關(guān)數(shù)據(jù),最后按照前面的設(shè)計實現(xiàn)了系統(tǒng)要求的功能。
3 實驗分析
目前主要有兩種方式評價推薦系統(tǒng)[7],一種是決策支持精度度量方法,另外一種是統(tǒng)計精度度量方法。前者通過系統(tǒng)推薦給用戶的項目對用戶實際有效性來度量,其常見的指標有:召回率(Recall)和精確度(Precision),設(shè)S為原始數(shù)據(jù)集,R為推薦數(shù)據(jù)集合。則精確度的計算公式:[preision=S?RR],召回率的計算公式:[recall=S?RS],其實兩個指標是相互矛盾的,實際使用是把兩個指標賦予相同權(quán)重。后者通過計算系統(tǒng)項目評分值與實際評分值的差來度量,常見指標有:均方根誤差(RMSE)、平均絕對誤差(MAE)和標準化平均絕對誤差(NMAE),MAE由于計算簡單還能直觀對系統(tǒng)進行度量得到了廣泛的使用,設(shè)集合[{p1,p2,...,pn}]為系統(tǒng)給用戶推薦的項目評分值,其中[pi]為用戶對第[i]個項目的預(yù)測評分,集合[{q1,q2,...,qn}]為用戶對項目的實際評分值,則MAE的計算公式:[MAE=i=1npi-qin],其中[i=1,2,3,...n]。MAE值越小表明推薦質(zhì)量越高。本文在實驗數(shù)據(jù)集的基礎(chǔ)上得到了不同鄰居數(shù)下的MAE值如下表1所示。
表1 實驗MAE值
[
鄰居數(shù) MAE\&UserCF\&ItemCF\&10\&0.878\&0.876\&20\&0.874\&0.873\&30\&0.875\&0.870\&40\&0.870\&0.868\&50\&0.868\&0.863\&60\&0.864\&0.860\&70\&0.858\&0.855\&80\&0.854\&0.851\&90\&0.844\&0.843\&100\&0.834\&0.832\&]
根據(jù)上表可知隨著鄰居數(shù)目增大,MAE只逐漸減小,推薦精度逐漸增加,根據(jù)實驗結(jié)果可知此數(shù)據(jù)集更適合ItemCF算法。
4 總結(jié)與展望
本文分析了電子商務(wù)的發(fā)展趨勢、作用和面臨的挑戰(zhàn),在此基礎(chǔ)上分析了推薦系統(tǒng)。本文在開源Mahout的基礎(chǔ)上結(jié)合MVC設(shè)計模式設(shè)計了一個電子商務(wù)推薦系統(tǒng)。對Mahout源碼相關(guān)知識進行了分析,并對利用Mahout開發(fā)應(yīng)用程序以及推薦引擎在整個推薦系統(tǒng)的結(jié)構(gòu)與作用進行了研究,對系統(tǒng)進行了模塊化的設(shè)計,并對實現(xiàn)過程的技術(shù)路線進行了設(shè)計,采用JavaEE技術(shù)實現(xiàn)了本文設(shè)計的系統(tǒng),并且對系統(tǒng)進行了驗證。本文并不是按照傳統(tǒng)的研究方法來對推薦算法進行研究,而是從工程實際出發(fā),主要是從快速開發(fā)系統(tǒng)和用戶體驗等角度來考慮系統(tǒng)的設(shè)計,真正的快速地把推薦功能應(yīng)用到電子商務(wù),Mahout提供了分布式版本,便于把系統(tǒng)擴展到云平臺下。后期主要的研究方向是把更多的推薦算法應(yīng)用到系統(tǒng),把系統(tǒng)遷移至云平臺下[8],提高系統(tǒng)基于大數(shù)據(jù)推薦能力。
參考文獻:
[1] 李琪. 電子商務(wù)概論[M]. 北京:高等教育出版社,2009.
[2] 陳發(fā)鴻.電子商務(wù)發(fā)展與政府應(yīng)對策略[J]. 企業(yè)經(jīng)濟,2011(11):138-140.
[3] Liu R R, Jia C X, Zhou T. Personal recommendation via modified collaborative filtering[J]. Physic A, 2009,388:462-468.
[4] Anil R,Dunning T,F(xiàn)riedman E. Mahout in action[M]. Manning,2011:28-35.
[5] 董西成. Hadoop 技術(shù)內(nèi)幕:深入解析MapReduce架構(gòu)設(shè)計與實現(xiàn)原理[M]. 北京:機械工業(yè)出版社,2013:32-36.
[6] 項亮. 推薦系統(tǒng)實踐[M]. 北京:人民郵電出版社,2012:37-40.
[7] Sarwar B,Karypis G,Konstan J,et al.Item-based collaborative filteringre commendation algorithms. In: Proceedings of the 10th International Conference on WorldWide Web. New York: ACM Press,2001:285-295.
[8] 尹小明. 基于價值網(wǎng)的云計算商業(yè)模式研究[D]. 北京: 北京郵件大學(xué), 2009.