焦亞琴 劉曉云 張銀葉
摘要:互聯網技術的發(fā)展把電子商務帶入了海量數據時代,這種“信息過載”現象不但沒有給信息檢索帶來便利,反而帶來了不少困惑。個性化推薦系統正是解決這一問題的有效手段之一。傳統的研究主要側重推薦算法等理論研究,并沒有考慮到實際系統的開發(fā)難度問題。本文從實際應用出發(fā)結合開源框架Mahout來設計與實現推薦系統,首先對Mahout源碼相關知識進行分析,研究Mahout推薦引擎的源碼實現以及使用方式,然后采用MVC設計模式設計了整個系統架構和平臺開發(fā)的技術路線,最后結合javaEE技術實現了整個系統功能并進行了實驗分析。
關鍵詞:電子商務;推薦系統;個性化;Mahout;系統設計
中圖分類號: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
隨著互聯網技術的發(fā)展,電子商務已經進入海量數據時代,這一變化卻讓人感覺到知識匱乏[1],原因是從海量數據里檢索感興趣的信息會花費較多的時間,而且檢索過程不再跟以前一樣簡單。這種情況促進了個性化推薦系統(Personalized Recommendation System,PRS)的產生,其能根據歷史內容自動提供相關信息給用戶。
電子商務是互聯網技術迅速發(fā)展的必然產物[2],隨著網絡技術和信息技術的不斷發(fā)展,電子商務也得到了蓬勃的發(fā)展。當人們在享受電子商務帶來方便的時候,卻出現了一些新的問題,一方面,出現了“信息過載”現象,另一方面,商家與消費者失去了當面溝通的機會。個性化服務能預測潛在的需求,提供針對性服務,讓客戶與商家雙贏,目前PRS已經成為解決上面兩個問題的一種有效手段。PRS能搜集用戶歷史信息,然后根據其從互聯網海量信息里尋找潛在的資源,最后為用戶提供個性化推薦功能。推薦實際是根據歷史信息,判斷用戶將來估計會感興趣的資源,并將其展示給用戶。
目前推薦系統研究成果已經應用到很多領域,雖然經過多年的發(fā)展,還是存在擴展性、稀疏性等問題。國內對PRS的研究絕大多數是停留在對算法本身的研究與改進上,更側重理論研究,雖然有的算法在理論上得到了很好的提升,但是并沒有考慮到實際的編碼工作,這給開發(fā)系統帶來了很大的難度。本文并沒有依據傳統的研究方式,而是從工程實際出發(fā),真正的把推薦功能應用到電子商務中;本文結合了開源的Mahout來開發(fā)系統,減少了編碼工作量,同時利于系統的擴展;設計系統采用“B/S架構”,服務器上存放著數據,業(yè)務數據不需要保存在客戶端,這樣就解決了數據安全性問題,每一筆交易都直接進入數據庫,解決了數據一致性問題,客戶端能更新實時數據,從而提高了系統的實時性;本系統為提高用戶體驗而將推薦結果設計為可視化界面。
1 相關研究
1.1 推薦系統的作用
1)對消費者的作用
目前,個性化電子商務推薦系統的作用和意義主要是針對供應商,然而,推薦系統的真正使用者是消費者,只有消費者認可才能產生它應有的作用。如果根據消費者的互聯網瀏覽歷史來向其推薦物品當作是對消費者作出的一項決策,將會產生如下作用。
縮短決策時間。在購物決策方面體現的尤其明顯。消費者可能盲目的在互聯網中搜索產品或輸入關鍵字搜索,但仍然是面向海量、異構的商品。推薦系統則可以依據消費者的歷史購物信息或偏好推薦最為匹配的物品,在有限的商品里尋找到最中意的物品會變得容易。
提高決策質量。在信息查找決策方面體現的尤其明顯。信息質量的高低是利用信息的基礎,面對“信息過載”現象,推薦系統充當過濾器作用,幫助快而準的找到最適合的信息,從而避免大海撈針。
2 )對供應商的作用
提高消費者對供應商的忠誠度。一個高效運行的電子商務系統總是能讓消費者快速找到自己需要的資源、從而作出決策,只有提供友好的用戶體驗的系統才能獲得消費者持久支持。推薦系統分析用戶的歷史信息,根據不同情況向用戶提供具體有價值的推薦。若推薦效果很好,那么消費者會在一定程度上依賴該推薦系統。
提高利潤和交叉銷售能力。推薦系統在一定程度上能幫助商家將潛在的客戶轉化為實際的客戶,比如網站的瀏覽者,通過追蹤瀏覽痕跡再實時適當為其推薦合適物品。推薦系統在另外一種程度上還有效提高了交叉銷售能力,現實中主要借助CRM(客戶關系管理)進行交叉銷售,發(fā)現顧客的需求,并通過滿足其需求而附帶銷售多種相關服務。推薦系統很好的充當了“銷售員”的作用,其在幫助消費者完成購買的同時推薦那些確實需要但在購物過程中可能忽略的物品。
1.2 推薦系統面臨的挑戰(zhàn)
結果的解釋。推薦系統就是以向用戶推薦與其興趣符合的物品為目的,需要對結果進行說明,但是目前的主要解釋方式有其他用戶的評價與銷售排行,這些能說明推薦結果,然而說服力不強,所以需要進一步研究解釋方式。
實時性與推薦質量。實時性和推薦質量是相互矛盾的,一般情況下實時推薦是以犧牲推薦質量為代價的,提高推薦質量往往是以實時性為代價的,所以如何在二者之間達到平衡亟待解決。
靈活性?,F階段推薦系統結構比較單一,隨著用戶多樣性變化與電子商務的發(fā)展,要求電子商務推薦模型能適應這種需求的變化。
1.3 Mahout簡介
本文系統設計使用的是Mahout,其為Apache Software Foundation旗下的一個開源項目[4],其提供了一些金典算法實現用于機器學習領域,能幫助快速開發(fā)智能處理應用系統。本文之所以使用Mahout是因為其不僅提供了推薦(Recommendation)模塊的實現還增加了對Hadoop的支持[5],這樣便于將來擴展系統到云計算的環(huán)境里。分析源碼可以得出結論,引擎主要由數據模型模塊、近鄰算法模塊、相似度算法模塊、推薦算法模塊和算法評分器等模塊組成。數據處理能力方面,Mahout提供了單機算法實現的同時還提供了基于Hadoop的分布式實現。單機版由Taste項目實現,主要的UserCF、ItemCF都支持單機運行,但是存在內存數量有限、數據瓶頸等問題。分布式算法是把內存算法并行化,通過多臺計算機一起來完成任務,但是也存在網絡通信、數據合并和存儲等問題。
1.4 開發(fā)程序的流程
研究源碼可知算法是按照模塊化設計來實現的,這樣減少了開發(fā)的工作量,其中數據模型模塊是用戶偏好的接口抽象,其實現支持從任意數據源抽取偏好信息,Taste支持從文件和數據庫讀取偏好信息。相似度模塊是推薦引擎的核心部分,其定義了兩個用戶間的相似度。在UserCF算法里,推薦的工作是找到與當前用戶偏好相似的鄰居用戶。推薦模塊是推薦引擎的接口抽象,Taste項目里其實現類有GenericUserBasedRecommender和GenericItemBasedRecommender,為其提供一個DataModel,它就可以計算出不同用戶的推薦內容。
1.5 相似度算法實現
1)數據模型實現
DataModel是數據模型的抽象,數據是進行推薦的基礎,Mahout支持匹配不同的數據源,包括文件、SQL數據庫與NOSQL數據庫。Mahout支持兩種具體的數據文件格式。GenericDataModel:用戶ID,物品ID,偏好(用戶對物品的評分值)。GenericBooleanPrefDataModel:用戶ID,物品ID。把這些數據文件按照規(guī)定的文件格式存儲供引擎調用進行推薦。
2) 基于用戶相似度算法
UserCF算法度量用戶間的相似度主要通過不同用戶對物品的偏好不同,然后依據相關性給出推薦結果,即給用戶推薦其相似用戶喜好的物品。UserCF的算法相對簡單,首先利用用戶對某物品的偏好找到相似鄰居,然后把相似鄰居的喜好物品推薦給該用戶,實際計算的過程就是把用戶對物品的偏好以向量的形式保存。再計算與其它用戶之間的相似度,找出距離最小的鄰居后,根據相似度與偏好值來預測該用戶目前還沒有偏好的物品,最后將得到的推薦結果展示給用戶。Mahout提供了完整的UserCF算法實現。
3 )基于物品相似度算法
ItemCF評價Item之間的相似性主要通過用戶對不同物品的偏好不同,然后根據偏好值之間的相似性來推薦,也就是根據用戶的喜好推薦類似的物品。ItemCF與UserCF具有一定的相似性,其利用用戶對物品偏好值數據來計算物品之間相似度,得到相似的物品以后,預測那些用戶還沒有表示偏好的物品,把推薦結果呈現給用戶。Mahout實現了完整的ItemCF算法實現。
4) 相似度距離計算
上面兩個算法都會使用到相似度的計
算,Mahout通過了大量的相似度計算實現,可以根據具體的使用情況進行選擇。其中歐式距離:[d(x,y)=(xi-yi)2],該距離計算方法沒有考慮數據重疊對結果的影響[6],Mahout利用枚舉類來解決這個問題。皮爾森相似度:
[p(x,y)=nxiyi-xiyinxi2-(xi)2nyi2-(yi)2],使用該相似度計算的前提是數據滿足正態(tài)分布,且數據是等間距的,Mahout同樣使用枚舉參數來解決這個問題。當對數據進行中心化以后余弦相似度與皮爾森相似度計算結果是一樣的。秩相關系數相似度存在大量的排序,計算非常慢,所以一般不采用。Tanimoto相似度:[t(x,y)=xiyix2i+y2i-xiyi],專門負責處理沒有偏好的數據。根據上面的分析,計算相似度要根據具體的情況選擇合適的實現。
2 系統設計與實現
2.1 系統設計
本文采用“B/S”架構來設計這個個性化推薦系統,能支持多用戶的并發(fā)使用情況,采用了分層的形式來設計系統,本文設計的系統的總體示意圖如圖1。系統包含五個層面,從下往上分別是底層數據源層、數據集成層、數據庫操作層、業(yè)務邏輯層和用戶界面層。這些層按照它們在系統的功能來分層設計,各自實現自己的功能與接口,通過分層來設計有利于系統的擴展。
圖1 系統示意圖
本文采用Java語言結合開源框架來實現系統,為了復用代碼,采用模塊化設計方法實現。其實現結構圖如圖2所示。
圖2 系統結構圖
根據圖2可知,系統采用的是MVC的設計模式,表現層使用的是JSF開源框架,控制層主要是通過Spring來管理各種Bean,持久化層使用的是ORM框架Hibernate,為了提高系統可視化功能,把PrimeFaces的圖形模塊引入系統的設計。
2.2 系統實現
本文使用課題組某電商平臺區(qū)域數據集進行實驗,其中包含10000用戶、6000件物品名字和100萬偏好值,用戶對物品的偏好值是取自1~5范圍的整數值,取值越大也就說明用戶對該物品的喜好程度越大。偏好數據格式為:物品編號(goodsID),用戶編號(userID),時間(timestamp),偏好值(preference)。由于數據都存儲在數據庫里,對持久層數據進行數據庫的優(yōu)化設計與導入相關數據,最后按照前面的設計實現了系統要求的功能。
3 實驗分析
目前主要有兩種方式評價推薦系統[7],一種是決策支持精度度量方法,另外一種是統計精度度量方法。前者通過系統推薦給用戶的項目對用戶實際有效性來度量,其常見的指標有:召回率(Recall)和精確度(Precision),設S為原始數據集,R為推薦數據集合。則精確度的計算公式:[preision=S?RR],召回率的計算公式:[recall=S?RS],其實兩個指標是相互矛盾的,實際使用是把兩個指標賦予相同權重。后者通過計算系統項目評分值與實際評分值的差來度量,常見指標有:均方根誤差(RMSE)、平均絕對誤差(MAE)和標準化平均絕對誤差(NMAE),MAE由于計算簡單還能直觀對系統進行度量得到了廣泛的使用,設集合[{p1,p2,...,pn}]為系統給用戶推薦的項目評分值,其中[pi]為用戶對第[i]個項目的預測評分,集合[{q1,q2,...,qn}]為用戶對項目的實際評分值,則MAE的計算公式:[MAE=i=1npi-qin],其中[i=1,2,3,...n]。MAE值越小表明推薦質量越高。本文在實驗數據集的基礎上得到了不同鄰居數下的MAE值如下表1所示。
表1 實驗MAE值
[
鄰居數 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\&]
根據上表可知隨著鄰居數目增大,MAE只逐漸減小,推薦精度逐漸增加,根據實驗結果可知此數據集更適合ItemCF算法。
4 總結與展望
本文分析了電子商務的發(fā)展趨勢、作用和面臨的挑戰(zhàn),在此基礎上分析了推薦系統。本文在開源Mahout的基礎上結合MVC設計模式設計了一個電子商務推薦系統。對Mahout源碼相關知識進行了分析,并對利用Mahout開發(fā)應用程序以及推薦引擎在整個推薦系統的結構與作用進行了研究,對系統進行了模塊化的設計,并對實現過程的技術路線進行了設計,采用JavaEE技術實現了本文設計的系統,并且對系統進行了驗證。本文并不是按照傳統的研究方法來對推薦算法進行研究,而是從工程實際出發(fā),主要是從快速開發(fā)系統和用戶體驗等角度來考慮系統的設計,真正的快速地把推薦功能應用到電子商務,Mahout提供了分布式版本,便于把系統擴展到云平臺下。后期主要的研究方向是把更多的推薦算法應用到系統,把系統遷移至云平臺下[8],提高系統基于大數據推薦能力。
參考文獻:
[1] 李琪. 電子商務概論[M]. 北京:高等教育出版社,2009.
[2] 陳發(fā)鴻.電子商務發(fā)展與政府應對策略[J]. 企業(yè)經濟,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,Friedman E. Mahout in action[M]. Manning,2011:28-35.
[5] 董西成. Hadoop 技術內幕:深入解析MapReduce架構設計與實現原理[M]. 北京:機械工業(yè)出版社,2013:32-36.
[6] 項亮. 推薦系統實踐[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] 尹小明. 基于價值網的云計算商業(yè)模式研究[D]. 北京: 北京郵件大學, 2009.