徐立 李超
摘? 要: 針對(duì)信息過(guò)載而中小企業(yè)又無(wú)力為其用戶提供推薦服務(wù)的現(xiàn)狀,提出了一種個(gè)性化的推薦系統(tǒng),為中小企業(yè)已有系統(tǒng)的用戶提供推薦服務(wù)。該推薦系統(tǒng)采用基于用戶行為和基于好友推薦的推薦方法,可以有效的發(fā)掘用戶顯性和隱性需求,為其提供個(gè)性化的推薦服務(wù);數(shù)據(jù)來(lái)源于原有系統(tǒng)的數(shù)據(jù)庫(kù)及操作日志,運(yùn)算模塊采用map-reduce的方式運(yùn)算,保障了系統(tǒng)的運(yùn)算速度和可擴(kuò)展性。最后以某平臺(tái)為例,簡(jiǎn)要介紹了個(gè)性化推薦系統(tǒng)和已有系統(tǒng)對(duì)接的實(shí)施方案。
關(guān)鍵詞: 推薦系統(tǒng); 推薦功能; 用戶行為; 好友推薦
中圖分類號(hào): TP 399? ? ? ? ? 文獻(xiàn)標(biāo)志碼: A? ? ? ? ? 文章編號(hào): 1671-2153(2019)01-0093-05
0? 引 言
作為解決當(dāng)前“信息過(guò)載”現(xiàn)象的一種有效途徑,推薦系統(tǒng)吸引了越來(lái)越多的專家、學(xué)者及企業(yè)的研究和關(guān)注,其研究的熱點(diǎn)在于各種各樣的推薦算法、優(yōu)劣比較等[1];大型互聯(lián)網(wǎng)企業(yè)也紛紛上線自己的推薦系統(tǒng)(如電商中淘寶、京東、亞馬遜[2];視頻中優(yōu)酷、土豆;社交網(wǎng)絡(luò)中人人網(wǎng);新聞中今日頭條等)。這些推薦系統(tǒng)極大的方便了用戶,能夠發(fā)掘用戶的潛在需求,將合適的、個(gè)性化的內(nèi)容或商品推薦給不同的用戶;企業(yè)因推薦了合適的內(nèi)容或商品,用戶粘合度和訂單轉(zhuǎn)換率大大提高,企業(yè)、用戶雙方受益。
然而,對(duì)于一般中小型企業(yè),由于技術(shù)和資金實(shí)力限制,既不能將專家研究出的優(yōu)秀推薦算法付出實(shí)施,又不能像大型企業(yè)一樣上線自己的推薦系統(tǒng),錯(cuò)失了享受推薦系統(tǒng)紅利的機(jī)會(huì)。本文提出了一種個(gè)性化的推薦系統(tǒng)以及將其應(yīng)用到某些已有系統(tǒng)的實(shí)施方案,借助該系統(tǒng),一般中小企業(yè)的已有系統(tǒng)可以為用戶提供個(gè)性化的推薦服務(wù)。
1? 推薦系統(tǒng)的總體設(shè)計(jì)
推薦系統(tǒng)的定位是:為中小企業(yè)已有系統(tǒng)的用戶個(gè)性化的推薦該系統(tǒng)下的資源(被推薦對(duì)象的種類繁多,如:頁(yè)面、新聞、知識(shí)條目、商品、視頻等,為了描述的方便,以下統(tǒng)稱為資源),其原理是從已有系統(tǒng)中提取數(shù)據(jù),經(jīng)過(guò)數(shù)據(jù)清洗后,按相關(guān)推薦算法運(yùn)算,最終將得到的“用戶-資源”的推薦結(jié)果進(jìn)行存儲(chǔ),以某種規(guī)則和形式推薦給用戶,由于對(duì)推薦服務(wù)的實(shí)時(shí)性要求不高,大型企業(yè)的推薦系統(tǒng)也是采用離線計(jì)算的方式,才使得該設(shè)計(jì)在實(shí)時(shí)性方面能夠達(dá)到同型系統(tǒng)的一般要求,其總體結(jié)構(gòu)如圖1所示。
要對(duì)已有系統(tǒng)增加推薦功能,首先要提取已有系統(tǒng)中的數(shù)據(jù),這些數(shù)據(jù)包括:用戶和資源的基本信息、用戶推薦的資源信息(這是在系統(tǒng)中增加的小功能),這類數(shù)據(jù)屬于從已有系統(tǒng)的數(shù)據(jù)庫(kù)中提取的結(jié)構(gòu)化數(shù)據(jù);原有系統(tǒng)訪問(wèn)日志(一般系統(tǒng)都會(huì)有這種日志,一般形式為某用戶通過(guò)某一個(gè)鏈接操作了某一資源),這些數(shù)據(jù)屬于非結(jié)構(gòu)化數(shù)據(jù)。
圖1中,數(shù)據(jù)清洗模塊主要對(duì)提取的數(shù)據(jù)進(jìn)行運(yùn)算前的處理,處理重點(diǎn)在于日志文件,不同的系統(tǒng)提供的日志形式不完全一樣,需要對(duì)接原有系統(tǒng)時(shí)稍作改動(dòng),在開發(fā)時(shí)要遵循面向接口編程的規(guī)則,對(duì)接時(shí)推薦系統(tǒng)的代碼可以不受影響;也可事先分別對(duì)幾種常見(jiàn)的開源系統(tǒng)的日志進(jìn)行編程,對(duì)接時(shí)通過(guò)配置文件選擇某一種處理方式,避免硬編碼。
算法計(jì)算模塊是推薦系統(tǒng)的核心,由于系統(tǒng)中已有大量真實(shí)數(shù)據(jù),算法的運(yùn)算復(fù)雜度又較高,因此對(duì)運(yùn)算資源的要求較高,單結(jié)點(diǎn)運(yùn)算顯然是無(wú)法滿足性能需求的,因此需要將運(yùn)算任務(wù)分配到不同結(jié)點(diǎn),運(yùn)算結(jié)束后將結(jié)果回收。
結(jié)果存儲(chǔ)模塊將運(yùn)算得到的結(jié)果持久化,存儲(chǔ)結(jié)果比較簡(jiǎn)單:用戶—資源。一般單臺(tái)服務(wù)器即可滿足存儲(chǔ)需求,數(shù)據(jù)量大時(shí),可考慮數(shù)據(jù)庫(kù)橫向拆分,拆分時(shí)要保證同一用戶的所有推薦結(jié)果在一臺(tái)服務(wù)器上。
結(jié)果推送模塊主要負(fù)責(zé)將存儲(chǔ)起來(lái)的推薦結(jié)果按照某個(gè)規(guī)則(推送多少條、過(guò)濾掉已采納資源等)和某種形式推送到原有系統(tǒng)。
2? 推薦算法的設(shè)計(jì)
常見(jiàn)的推薦方法有:基于內(nèi)容的推薦、協(xié)同過(guò)濾推薦和基于關(guān)聯(lián)規(guī)則的推薦,這些方法各有優(yōu)缺點(diǎn),適用場(chǎng)景不同[3]。資源的多樣性決定了采用的推薦方法不能單一,通過(guò)分析用戶和資源的特征、推薦系統(tǒng)的應(yīng)用場(chǎng)景(應(yīng)用于已有系統(tǒng),已存在大量用戶行為數(shù)據(jù),不存在冷啟動(dòng)的問(wèn)題),主要采用的推薦方法有:基于用戶行為的推薦和基于好友的推薦兩種。
2.1? 基于用戶行為的推薦
用戶在使用系統(tǒng)時(shí),無(wú)論是有目標(biāo)的使用還是無(wú)意識(shí)的隨意瀏覽,其行為數(shù)據(jù)都有很大價(jià)值,這些有價(jià)值的數(shù)據(jù)會(huì)被系統(tǒng)的操作日志記錄,這部分?jǐn)?shù)據(jù)相對(duì)互聯(lián)網(wǎng)的整個(gè)用戶行為數(shù)據(jù)庫(kù)體量要小的多,價(jià)值要大的多。
2.1.1? 用戶行為
用戶訪問(wèn)和使用系統(tǒng)時(shí),其行為可分為以下幾種:創(chuàng)建資源;編輯資源;瀏覽資源;發(fā)起提問(wèn);回答問(wèn)題;采納答案;瀏覽答案。經(jīng)分析論證,為每種行為賦權(quán)重,行為權(quán)重表如表1所示。
2.1.2? 實(shí)現(xiàn)技術(shù)及算法
資源類的操作可根據(jù)行為權(quán)重直接映射到資源,問(wèn)答由于是用戶發(fā)起和回答的,內(nèi)容無(wú)固定格式且沒(méi)有關(guān)鍵詞,利用Lucene開源全文檢索工具的中文分詞器對(duì)提問(wèn)和被采納答案的內(nèi)容進(jìn)行切分后加上行為權(quán)重映射到資源。
某用戶對(duì)資源的興趣值記為I,其公式為
式中:BW為表1中的行為權(quán)重值;D為該行為的持續(xù)時(shí)間,即在頁(yè)面上的停留時(shí)間。計(jì)時(shí)有兩種方式:可以借助Ajax技術(shù)來(lái)實(shí)現(xiàn),當(dāng)用戶在頁(yè)面上做點(diǎn)擊鼠標(biāo)、滑動(dòng)光標(biāo)或敲擊鍵盤等操作時(shí),會(huì)觸發(fā)ajax程序向服務(wù)器端發(fā)送信號(hào),從最早接收到信號(hào)到最后一次發(fā)送信號(hào)之間的時(shí)間差可認(rèn)為是停留時(shí)間;如果操作日志較為詳細(xì),也可以通過(guò)獲取同一用戶相鄰兩條操作記錄,計(jì)算其時(shí)間差的方式計(jì)算停留時(shí)間。
某用戶的興趣集中度記為IR,其公式為
式中:Imax為某用戶的最大資源興趣值;IK為該用戶對(duì)資源k的興趣值。IR值越大,則表明用戶的興趣點(diǎn)越集中,其目標(biāo)性越強(qiáng),反之亦然。當(dāng)IR≥50%說(shuō)明其興趣集中度較高,最大興趣值占據(jù)用戶興趣總值半數(shù)以上,該用戶對(duì)該資源興趣濃厚,只推薦與該資源相似度最高的前N條資源,選取前N(N可靈活配置)條進(jìn)行推薦。當(dāng)IR<50%時(shí),說(shuō)明該用戶目標(biāo)性不強(qiáng),可能只是隨便了解些知識(shí),此時(shí)取最感興趣的前M(M可靈活配置)資源下首位相似資源推薦。
2.2? 基于好友的推薦
這里的好友與社交網(wǎng)絡(luò)中的好友不同:社交網(wǎng)絡(luò)中的好友來(lái)源很廣,有可能是生活中的朋友,生意上的伙伴,其興趣點(diǎn)有可能截然不同;該“好友”對(duì)用戶是不可見(jiàn)的,它是通過(guò)用戶相似度計(jì)算獲得的,其計(jì)算公式與基于用戶的協(xié)調(diào)過(guò)濾算法中的計(jì)算公式相同。然而,該方法與后者不同:后者強(qiáng)調(diào)用戶A和B相似度高,則推薦給A的資源,也可推薦給B;該方法強(qiáng)調(diào),A主動(dòng)推薦的資源,可以推薦給B,這樣可以糾正算法計(jì)算時(shí)的偏差和失真,發(fā)揮用戶的主觀能動(dòng)性,盡可能大的利用互聯(lián)網(wǎng)萬(wàn)千用戶的智力資源,其推薦結(jié)果將更準(zhǔn)確、效果更好。
3? 系統(tǒng)的部分實(shí)現(xiàn)
由2中的算法描述可以看到:基于用戶行為的推薦方法首先要從每個(gè)用戶的行為找到其在某段時(shí)間內(nèi)關(guān)注最多的數(shù)個(gè)資源,然后從眾多資源中找出每個(gè)資源最相關(guān)的數(shù)個(gè)資源進(jìn)行推薦;基于好友的推薦也是要找到每個(gè)用戶的“好友”,也就是關(guān)注點(diǎn)最相關(guān)的用戶,運(yùn)算量是巨大的,單憑一個(gè)主機(jī)是無(wú)法滿足性能需求的。為了提升推薦系統(tǒng)的運(yùn)算性能必須采用map?螄reduce的方式將計(jì)算任務(wù)分配給多個(gè)運(yùn)算節(jié)點(diǎn),運(yùn)算結(jié)束后將結(jié)果匯總。Hadoop提供了一個(gè)很好的并行化分布式計(jì)算框架,其兩大核心組件[4]:HDFS用于分布式存儲(chǔ)文件;MapReduce用戶并行化運(yùn)算。
在實(shí)現(xiàn)map?螄reduce計(jì)算之前,先看一下獲取推薦給用戶資源列表和用戶“好友”列表的流程,如圖2所示。
圖2中,對(duì)應(yīng)主要代碼段如下:
/*推薦給用戶的資源列表*/
public List
PreferenceArray preFromUser = getDataModel().getPreferencesFromUser(userID);
if (preFromUser.length() == 0) {return Collections.emptyList();}
FastIDSet possItems = getAllOtherItems(userID, preFromUser, includeKnownItems);
TopItems.Estimator
if(concentrating>50%) {
List
return topItems;}
/*獲取用戶的“好友”*/
public long[] getUserNeighbors(long userID) throws TasteException {DataModel dataModel = getDataModel();
UserSimilarity userSimImpl = getUserSimilarity();
TopItems.Estimator
LongPrimitiveIterator userIDs = SamplingLongPrimitiveIterator.
maybeWrapIterator(dataModel.getUserIDs(),getSamplingRate());
return TopItems.getTopUsers(n, userIDs, null, estimator);}
MapReduce是用來(lái)解決海量數(shù)據(jù)的計(jì)算問(wèn)題提出的一種多節(jié)點(diǎn)并行化運(yùn)算方式,在Hadoop框架下用戶只需實(shí)現(xiàn)map()和reduce()方法即可完成并行化運(yùn)算,具體到資源推薦,定義類ItemRecommend,public class ItemRecommend extends Configured implements Tool,該類集成了org.apache.hadoop.conf包下的Configured,實(shí)現(xiàn)了Tool接口。在該類里定義Item Recommend Mapper和Item Recommend Reducer兩個(gè)靜態(tài)內(nèi)部類,在main方法中,通過(guò)job.set Mapper Class(Item Recommend Mapper.class)和job.set Reducer Class(Item Recommend Reducer.class)運(yùn)行。
4? 推薦系統(tǒng)的應(yīng)用舉例
推薦系統(tǒng)可以應(yīng)用于中小企業(yè)的已有系統(tǒng),為其用戶提供個(gè)性化推薦功能,以茶文化知識(shí)平臺(tái)為例,簡(jiǎn)單介紹其應(yīng)用。
茶文化推廣平臺(tái)是一個(gè)集知識(shí)管理、問(wèn)答、交友的茶文化綜合平臺(tái),包括茶知識(shí)、茶問(wèn)答、茶友空間和后臺(tái)管理等功能,其功能模塊如圖3所示。
推薦的資源為茶文化相關(guān)的知識(shí)條目,該平臺(tái)是基于一些常見(jiàn)開源系統(tǒng)(hdwiki,UCenter等)的二次開發(fā)搭建的,主要功能均由開源系統(tǒng)提供。因此,無(wú)論從日志的完整性和規(guī)范性,還是代碼的規(guī)范性來(lái)講,都為其開發(fā)推薦功能提供了方便。
鑒于推薦系統(tǒng)中基于好友的推薦算法中,需要使用用戶推薦的數(shù)據(jù),對(duì)系統(tǒng)進(jìn)行開發(fā)增加用戶推薦功能,該功能簡(jiǎn)單,數(shù)據(jù)庫(kù)中新增用戶-資源對(duì)照表uc_ recommender,用戶推薦后數(shù)據(jù)庫(kù)里新增一條記錄即可,相應(yīng)的取消推薦功能類似。
獲取數(shù)據(jù)時(shí):一部分?jǐn)?shù)據(jù)來(lái)自于數(shù)據(jù)庫(kù),如wiki_doc(條目基本信息表)、uc_members(用戶基本信息表)、uc_asks(提問(wèn)表)和uc_anwsers(答案表)以及uc_recommender(用戶推薦條目表)等,這部分?jǐn)?shù)據(jù)數(shù)據(jù)結(jié)構(gòu)型數(shù)據(jù),基本不需要處理;另一部分來(lái)自于原系統(tǒng)中的操作日志,操作日志中記錄了用戶通過(guò)某個(gè)類操作了某個(gè)資源,這里只關(guān)注表1中列舉的操作,需要過(guò)濾掉的數(shù)據(jù)較多,逐條判斷,把符合條件的記錄抽取用戶id,資源id和操作類名等信息,實(shí)現(xiàn)起來(lái)較簡(jiǎn)單。至此,已完成了推薦系統(tǒng)與現(xiàn)有系統(tǒng)之間的無(wú)縫對(duì)接。
5? 結(jié)束語(yǔ)
通過(guò)研究推薦系統(tǒng),提出了一種個(gè)性化推薦系統(tǒng)和基于用戶行為和基于好友推薦的方法相結(jié)合的推薦方法:推薦算法運(yùn)算時(shí)采用map-reduce的方式,運(yùn)算能力較強(qiáng);運(yùn)算量大時(shí)可以任意新增運(yùn)算節(jié)點(diǎn),可擴(kuò)展性良好;該系統(tǒng)的實(shí)施技術(shù)難度不大、成本較低、可以方便的應(yīng)用到中小企業(yè)現(xiàn)有系統(tǒng)中,為其用戶提供個(gè)性化的推薦服務(wù)。本文以茶文化知識(shí)平臺(tái)為例,實(shí)施了該推薦系統(tǒng)。
參考文獻(xiàn):
[1] 冷亞軍,陸青,梁昌勇. 協(xié)同過(guò)濾推薦技術(shù)綜述[J]. 模式識(shí)別與人工智能,2014,27(8):720-734.
[2] 洪亮,任秋圜,梁樹賢. 國(guó)內(nèi)電子商務(wù)網(wǎng)站推薦系統(tǒng)信息服務(wù)質(zhì)量比較研究——以淘寶、京東、亞馬遜為例[J]. 圖書情報(bào)工作,2016,60(23):97-110.
[3] 黃立威,江碧濤,呂守業(yè),等. 基于深度學(xué)習(xí)的推薦系統(tǒng)研究綜述[J/OL]. 計(jì)算機(jī)學(xué)報(bào),2018:1-29.
[4] 董新華,李瑞軒,周灣灣,等. Hadoop系統(tǒng)性能優(yōu)化與功能增強(qiáng)綜述[J]. 計(jì)算機(jī)研究與發(fā)展,2013,50(S2):1-15.