轉(zhuǎn)帖|行業(yè)資訊|編輯:陳俊吉|2016-05-23 10:36:18.000|閱讀 400 次
概述:隨著大數(shù)據(jù)時代的來臨,如何幫助用戶從大量信息中迅速獲得對自己有用的信息成為眾多商家的重要任務,個性化推薦系統(tǒng)應運而生。個性化推薦系統(tǒng)以海量數(shù)據(jù)挖掘為基礎(chǔ),引導用戶發(fā)現(xiàn)自己的信息需求,現(xiàn)已廣泛應用于很多領(lǐng)域。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
傳統(tǒng)的個性化推薦系統(tǒng),采用定期對數(shù)據(jù)進行分析的做法來更新模型。由于是定期更新,推薦模型無法保持實時性,對用戶當前的行為推薦結(jié)果可能不會非常精準。實時個性化推薦實時分析用戶產(chǎn)生的數(shù)據(jù),可以更準確地為用戶進行推薦,同時根據(jù)實時的推薦結(jié)果進行反饋,更好地改進推薦模型。
大數(shù)據(jù)實時計算平臺TRC[1]由實時數(shù)據(jù)接入TDBank、實時數(shù)據(jù)處理TDProcess、和分布式K-V存儲TDEngine等部分組成,其中TDBank主要負責從業(yè)務側(cè)接入實時數(shù)據(jù),如用戶行為數(shù)據(jù)、物品信息數(shù)據(jù)等;TDProcess基于Storm對實時流入的數(shù)據(jù)進行計算,并利用TDEngine存儲計算結(jié)果,以供推薦引擎等使用。
TRC的主要框架如上圖所示,有關(guān)TRC的文章已經(jīng)有很多,這里不作詳述,有興趣的讀者可以參考文章[1]獲得詳細描述。
基于Storm的實時計算能夠針對海量流式數(shù)據(jù)進行有效的統(tǒng)計處理,然而流式計算在機器學習算法方面有著天然的劣勢,而要完成實時推薦,只是實時統(tǒng)計顯然是不夠的,我們希望能實現(xiàn)推薦算法的實時化更新計算。
流式實時計算在機器學習方面的局限性主要表現(xiàn)在兩方面:首先,由于數(shù)據(jù)是以流的形式進入Storm平臺計算,在任何時刻,我們都只有目前流入的數(shù)據(jù),而沒有傳統(tǒng)的全局數(shù)據(jù)概念,而在全局數(shù)據(jù)上進行迭代計算正是許多機器學習算法需要的;其次,Storm平臺是計算數(shù)據(jù)易失的,在海量數(shù)據(jù)背景下,如何保證模型的有效存儲及更新維護成為一個挑戰(zhàn)。
對于上述第二點不足,我們使用了TDE作為解決方案,TDE作為一個高容錯、高可用性的分布式K-V存儲,很好的滿足了我們對計算數(shù)據(jù)的存儲需求。而對于第一點不足,我們通過精細的設(shè)計,將原始的離線計算轉(zhuǎn)化為增量計算,并實現(xiàn)了幾類經(jīng)典算法:
CF算法:協(xié)同過濾算法,根據(jù)當前時間用戶對物品的行為,實時更新物品間的共現(xiàn)數(shù)據(jù)和用戶的興趣分布數(shù)據(jù),以計算物品間和用戶間的相似度,進行基于物品或用戶的協(xié)同推薦。
CB算法:通過分析用戶的實時行為數(shù)據(jù),更新計算用戶和不同物品間的內(nèi)容相似度,以對用戶進行推薦。
Hot算法:通過接收所有用戶的實時行為數(shù)據(jù),實時更新物品的熱度,分析得到當前的熱點物品,如實時熱點新聞等,以對用戶進行實時的推薦。
MF算法:協(xié)同過濾矩陣分解算法,根據(jù)用戶對物品的行為評分矩陣,將矩陣分解為用戶和物品的特征向量,以預測用戶對物品的喜好,來進行推薦。
實現(xiàn)框架
下圖為基于Storm實現(xiàn)的框架圖,系統(tǒng)可以分為五層,數(shù)據(jù)接入層,數(shù)據(jù)預處理層,算法處理層,商品信息補充層,和存儲層。數(shù)據(jù)接入層負責接收數(shù)據(jù),預處理層負責根據(jù)歷史數(shù)據(jù)對數(shù)據(jù)進行補全或者過濾等。算法處理層,是系統(tǒng)的主體部分,負責對數(shù)據(jù)進行分析處理,實現(xiàn)相關(guān)推薦算法的計算,將算法結(jié)果傳入下一層。商品信息補充層負責對算法結(jié)果進行商品信息補全,這里補全是為了后續(xù)與離線模型結(jié)合或向用戶推薦時,進一步對推薦結(jié)果做篩選的。最后一層是存儲層,負責將結(jié)果存入存儲部分,以供使用。
數(shù)據(jù)接入層
數(shù)據(jù)接入層負責接入數(shù)據(jù),并且做簡單的檢查,對應TdbankSpout。通用推薦平臺接收的數(shù)據(jù)共有五類,包括類別數(shù)據(jù),行為權(quán)重數(shù)據(jù),商品屬性,用戶屬性,以及用戶行為數(shù)據(jù)。
類別數(shù)據(jù):是各個商品的類別的描述和等級,用于基礎(chǔ)數(shù)據(jù)統(tǒng)計
行為權(quán)重數(shù)據(jù):各個行為的權(quán)重,用于基礎(chǔ)數(shù)據(jù)統(tǒng)計
商品屬性:各個商品的基本屬性,基礎(chǔ)數(shù)據(jù)統(tǒng)計
用戶屬性:用戶的基本屬性,基礎(chǔ)數(shù)據(jù)統(tǒng)計
用戶行為數(shù)據(jù):記錄了用戶的行為,是系統(tǒng)主要要分析的數(shù)據(jù)。
數(shù)據(jù)預處理層
包括兩個部分,一個是基礎(chǔ)信息構(gòu)建,對應的bolt是BaseInfoBolt,一個是對用戶行為數(shù)據(jù)進行預處理,對應的是PretreatmentBolt。基礎(chǔ)信息構(gòu)建接受類別、行為權(quán)重、商品屬性和用戶屬性四種數(shù)據(jù),并存入相應的table。預處理bolt接受用戶行為數(shù)據(jù),根據(jù)用戶群信息和歷史數(shù)據(jù)對用戶行為記錄進行補全或者過濾等。
算法處理層
算法處理層是系統(tǒng)的主體部分,又可以分為數(shù)據(jù)統(tǒng)計部分和算法計算部分。數(shù)據(jù)統(tǒng)計部分包括用戶詳細信息統(tǒng)計,最近訪問商品統(tǒng)計,人群行為數(shù)據(jù)統(tǒng)計,人群商品共現(xiàn)數(shù)據(jù)統(tǒng)計,場景Ctr統(tǒng)計等。
算法計算部分實現(xiàn)了CF,MF,Hot,CB等算法。這里對算法進行描述。
商品信息補全層
商品信息補充層負責對算法結(jié)果進行商品信息補全,這里補全是為了后續(xù)與離線模型結(jié)合或向用戶推薦時,根據(jù)商品信息來對算法推薦結(jié)果進行篩選后對相應用戶進行推薦,比如,根據(jù)商品價格和離線模型分析的用戶財富層次等對推薦結(jié)果進行篩選,有些商品是vip免費的,可以對vip用戶推薦,而對普通用戶則要慎重考慮。
存儲層
存儲層是系統(tǒng)的最后一層,負責將推薦結(jié)果存入tde,tde是騰訊構(gòu)建的一個內(nèi)存k-v存儲,對用戶進行在線推薦時,從tde中取出推薦結(jié)果,與離線模型結(jié)合,對推薦結(jié)果進一步處理后推薦給用戶。
針對實現(xiàn)過程中遇到的問題和挑戰(zhàn),我們提出了幾點優(yōu)化策略以優(yōu)化資源使用、提升效果。
分群計算:在實際計算過程中,我們根據(jù)不同的用戶群體對數(shù)據(jù)進行了劃分,并在劃分數(shù)據(jù)集上進行計算。用戶群體可根據(jù)用戶年齡、性別等進行劃分,也可根據(jù)其他信息如職業(yè)、活躍度等進行劃分。由于不同群體內(nèi)的用戶行為模式可能不同,在經(jīng)過劃分的數(shù)據(jù)集上進行計算,可以得到更準確的用戶行為模式。
滑動窗口:為了保證數(shù)據(jù)模型的實時性,某些情況下需要對歷史數(shù)據(jù)進行“遺忘”,即只使用最近一段時間的數(shù)據(jù)來進行計算。為此,我們實現(xiàn)了滑動窗口,對于某個時間單位,我們維護近n個時間窗口的數(shù)據(jù)信息,這些窗口會實時滑動,丟掉最遠的數(shù)據(jù),保留最近的實時數(shù)據(jù)信息用于計算。
局部集成:為了有效維護計算數(shù)據(jù),我們使用了TDE作為數(shù)據(jù)外部存儲,而在計算過程中與TDE的交互成為了計算開銷不可忽視的一部分。為了減少與TDE的交互,降低資源使用,我們使用了局部集成策略,根據(jù)不同的計算特點,將數(shù)據(jù)先在worker內(nèi)部做集成,然后再將局部集成結(jié)果合并到TDE。實踐證明,這一策略有效降低了與TDE的交互,減少了資源使用。
多層Hash:在計算過程中,會出現(xiàn)有多個worker需要寫同一個Key-Value值得到情況,稱之為寫沖突,為了保證TDE的高可用性,我們使用了多層Hash策略來解決寫沖突問題,減小了TDE在數(shù)據(jù)一致性上的負擔。通過多層Hash策略,對同一個key的寫操作將只發(fā)生在同一個worker上。
實時可擴展item-based CF
基于物品的協(xié)同過濾推薦[2](item-based CF)是亞馬遜于2003年公布的推薦算法,由于其推薦效果較好且易于實現(xiàn)等特點,在工業(yè)界得到了廣泛應用。這里我們以item-basedCF算法為例,解釋實時推薦算法的具體實現(xiàn)[3],有關(guān)其他算法的具體描述可參考論文[3]和[4]。
Item-based CF的基本思想是認為用戶會喜歡和他以前所喜歡的物品相似的物品,其計算分為相似物品計算和用戶喜好預測兩部分,相似物品計算是整個算法的關(guān)鍵部分,用戶喜好預測根據(jù)物品相似度加權(quán)預測用戶對新物品的評分。
在傳統(tǒng)的推薦算法中,用戶對物品的喜好評分由用戶打分決定,而現(xiàn)實世界中,用戶對物品的打分數(shù)據(jù)較少,大部分數(shù)據(jù)是用戶行為數(shù)據(jù),如瀏覽、點擊等,這些用戶行為具有不確定性,比如,用戶點擊一個物品詳情頁后關(guān)閉,可能表示用戶喜歡該物品因為用戶點擊了詳情頁,也可能表示用戶不喜歡該物品因為用戶又關(guān)閉了詳情頁。這種情況下,我們只能從用戶行為數(shù)據(jù)中去猜測用戶的喜好。
為了降低對用戶行為數(shù)據(jù)的錯誤理解造成的損失,我們對原始item-basedCF算法進行了改進。具體來說,我們?yōu)槊總€用戶行為類型設(shè)置了評分權(quán)重,衡量不同行為表示的用戶喜好的可靠性,如,對點擊行為我們設(shè)定其評分權(quán)重為一分,而購買行為三分,因為用戶的購買比點擊更有可能說明用戶喜歡該物品。對于一個物品,用戶可能有多種行為,比如點擊、購買、評論等,這時我們?nèi)?quán)重最高的用戶行為評分作為該用戶對物品的喜好。
我們定義了用戶對兩個物品的共同評分用于計算物品相似度,如下:
通過將物品的共同評分設(shè)定為兩個物品評分中較低的那個,我們限定了對行為錯誤估計的損失為兩者的較小值。相應的,兩個物品的相似度計算如下:
為了實現(xiàn)流式實時計算,實時更新物品的相似度,我們將上式計算分為了三部分,如下:
其中, ,
在實際計算過程中,我們發(fā)現(xiàn),由于數(shù)據(jù)量太大,用戶的某一個行為會帶來大量的物品需要重新計算。具體來說,我們一般認為用戶在某一時間段中交互的物品相互之間相關(guān),即可能相似,這個時間段可能是一天或者一個月,那么一個用戶行為帶來的物品評分更新,可能會造成數(shù)十甚至數(shù)百個物品對的相似度需要重新計算,而這些物品對很多可能是不那么相似的,即
隨著近年來個性化服務的發(fā)展,推薦系統(tǒng)在實際應用中的價值也得到越來越多的認可,實時推薦在推薦效果上的優(yōu)秀表現(xiàn),以及其巨大的發(fā)展空間,使其獲得很多的關(guān)注。大數(shù)據(jù)實時推薦仍然有許多值得探索的地方,如實時矩陣分解、實時LR、實時深度學習等在線學習算法。
via:騰訊大數(shù)據(jù)
詳情請咨詢“”!
客服熱線:023-66090381
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn