1. 程式人生 > >大資料實時推薦-不只是統計

大資料實時推薦-不只是統計

[轉自]http://mt.sohu.com/20160520/n450530688.shtml

隨著大資料時代的來臨,如何幫助使用者從大量資訊中迅速獲得對自己有用的資訊成為眾多商家的重要任務,個性化推薦系統應運而生。個性化推薦系統以海量資料探勘為基礎,引導使用者發現自己的資訊需求,現已廣泛應用於很多領域。傳統的個性化推薦系統,採用定期對資料進行分析的做法來更新模型。由於是定期更新,推薦模型無法保持實時性,對使用者當前的行為推薦結果可能不會非常精準。實時個性化推薦實時分析使用者產生的資料,可以更準確地為使用者進行推薦,同時根據實時的推薦結果進行反饋,更好地改進推薦模型。

  騰訊大資料平臺部和北京大學網路所崔斌教授研究組從2014年起開展大資料實時推薦研究,雙方合作的論文連續兩年在國際頂級會議SIGMOD2015和2016發表:TencentRec: Real-time Stream Recommendation in Practice SIGMOD

2015,Real-time Video Recommendation ExplorationSIGMOD2016 。研究工作側重解決實際應用中存在的問題,針對大資料實時推薦在精準、實時、海量等方面的挑戰,提出了分散式可擴充套件的實時增量更新推薦演算法,使推薦效果得到了明顯的提升。所研究的方法已應用在包括視訊、新聞等多個業務中,推薦效果得到顯著提升。實時推薦系統現每天處理千億條使用者行為,支撐百億級使用者請求。

  1. 大資料實時計算平臺

  騰訊大資料實時計算平臺TRC[1]由實時資料接入TDBank、實時資料處理TDProcess、和分散式K-V儲存TDEngine等部分組成,其中TDBank主要負責從業務側接入實時資料,如使用者行為資料、物品資訊資料等;TDProcess基於Storm對實時流入的資料進行計算,並利用TDEngine儲存計算結果,以供推薦引擎等使用。

  

  TRC的主要框架如上圖所示,有關TRC的文章已經有很多,這裡不作詳述,有興趣的讀者可以參考文章[1]獲得詳細描述。

  2. 推薦演算法實時化

  基於Storm的實時計算能夠針對海量流式資料進行有效的統計處理,然而流式計算在機器學習演算法方面有著天然的劣勢,而要完成大資料實時推薦,只是實時統計顯然是不夠的,我們希望能實現推薦演算法的實時化更新計算。

  流式實時計算在機器學習方面的侷限性主要表現在兩方面:首先,由於資料是以流的形式進入Storm平臺計算,在任何時刻,我們都只有目前流入的資料,而沒有傳統的全域性資料概念,而在全域性資料上進行迭代計算正是許多機器學習演算法需要的;其次,Storm平臺是計算資料易失的,在海量資料背景下,如何保證模型的有效儲存及更新維護成為一個挑戰。

  對於上述第二點不足,我們使用了TDE作為解決方案,TDE作為一個高容錯、高可用性的分散式K-V儲存,很好的滿足了我們對計算資料的儲存需求。而對於第一點不足,我們通過精細的設計,將原始的離線計算轉化為增量計算,並實現了幾類經典演算法:

  CF演算法:協同過濾演算法,根據當前時間使用者對物品的行為,實時更新物品間的共現資料和使用者的興趣分佈資料,以計算物品間和使用者間的相似度,進行基於物品或使用者的協同推薦。

  CB演算法:通過分析使用者的實時行為資料,更新計算使用者和不同物品間的內容相似度,以對使用者進行推薦。

  Hot演算法:通過接收所有使用者的實時行為資料,實時更新物品的熱度,分析得到當前的熱點物品,如實時熱點新聞等,以對使用者進行實時的推薦。

  MF演算法:協同過濾矩陣分解演算法,根據使用者對物品的行為評分矩陣,將矩陣分解為使用者和物品的特徵向量,以預測使用者對物品的喜好,來進行推薦。

  實現框架

  下圖為基於Storm實現的框架圖,系統可以分為五層,資料接入層,資料預處理層,演算法處理層,商品資訊補充層,和儲存層。資料接入層負責接收資料,預處理層負責根據歷史資料對資料進行補全或者過濾等。演算法處理層,是系統的主體部分,負責對資料進行分析處理,實現相關推薦演算法的計算,將演算法結果傳入下一層。商品資訊補充層負責對演算法結果進行商品資訊補全,這裡補全是為了後續與離線模型結合或向用戶推薦時,進一步對推薦結果做篩選的。最後一層是儲存層,負責將結果存入儲存部分,以供使用。

  

  資料接入層

  資料接入層負責接入資料,並且做簡單的檢查,對應TdbankSpout。通用推薦平臺接收的資料共有五類,包括類別資料,行為權重資料,商品屬性,使用者屬性,以及使用者行為資料。

  類別資料:是各個商品的類別的描述和等級,用於基礎資料統計

  行為權重資料:各個行為的權重,用於基礎資料統計

  商品屬性:各個商品的基本屬性,基礎資料統計

  使用者屬性:使用者的基本屬性,基礎資料統計

  使用者行為資料:記錄了使用者的行為,是系統主要要分析的資料。

  資料預處理層

  包括兩個部分,一個是基礎資訊構建,對應的bolt是BaseInfoBolt,一個是對使用者行為資料進行預處理,對應的是PretreatmentBolt。基礎資訊構建接受類別、行為權重、商品屬性和使用者屬性四種資料,並存入相應的table。預處理bolt接受使用者行為資料,根據使用者群資訊和歷史資料對使用者行為記錄進行補全或者過濾等。

  演算法處理層

  演算法處理層是系統的主體部分,又可以分為資料統計部分和演算法計算部分。資料統計部分包括使用者詳細資訊統計,最近訪問商品統計,人群行為資料統計,人群商品共現資料統計,場景Ctr統計等。

  演算法計算部分實現了CF,MF,Hot,CB等演算法。這裡對演算法進行描述。

  商品資訊補全層

  商品資訊補充層負責對演算法結果進行商品資訊補全,這裡補全是為了後續與離線模型結合或向用戶推薦時,根據商品資訊來對演算法推薦結果進行篩選後對相應使用者進行推薦,比如,根據商品價格和離線模型分析的使用者財富層次等對推薦結果進行篩選,有些商品是vip免費的,可以對vip使用者推薦,而對普通使用者則要慎重考慮。

  儲存層

  儲存層是系統的最後一層,負責將推薦結果存入tde,tde是騰訊構建的一個記憶體k-v儲存,對使用者進行線上推薦時,從tde中取出推薦結果,與離線模型結合,對推薦結果進一步處理後推薦給使用者。

  2.2 實現優化策略

  針對實現過程中遇到的問題和挑戰,我們提出了幾點優化策略以優化資源使用、提升效果。

  分群計算:在實際計算過程中,我們根據不同的使用者群體對資料進行了劃分,並在劃分資料集上進行計算。使用者群體可根據使用者年齡、性別等進行劃分,也可根據其他資訊如職業、活躍度等進行劃分。由於不同群體內的使用者行為模式可能不同,在經過劃分的資料集上進行計算,可以得到更準確的使用者行為模式。

  滑動視窗:為了保證資料模型的實時性,某些情況下需要對歷史資料進行“遺忘”,即只使用最近一段時間的資料來進行計算。為此,我們實現了滑動視窗,對於某個時間單位,我們維護近n個時間視窗的資料資訊,這些視窗會實時滑動,丟掉最遠的資料,保留最近的實時資料資訊用於計算。

  區域性整合:為了有效維護計算資料,我們使用了TDE作為資料外部儲存,而在計算過程中與TDE的互動成為了計算開銷不可忽視的一部分。為了減少與TDE的互動,降低資源使用,我們使用了局部整合策略,根據不同的計算特點,將資料先在worker內部做整合,然後再將區域性整合結果合併到TDE。實踐證明,這一策略有效降低了與TDE的互動,減少了資源使用。

  多層Hash:在計算過程中,會出現有多個worker需要寫同一個Key-Value值得到情況,稱之為寫衝突,為了保證TDE的高可用性,我們使用了多層Hash策略來解決寫衝突問題,減小了TDE在資料一致性上的負擔。通過多層Hash策略,對同一個key的寫操作將只發生在同一個worker上。

  實時可擴充套件item-based CF

  基於物品的協同過濾推薦[2](item-based CF)是亞馬遜於2003年公佈的推薦演算法,由於其推薦效果較好且易於實現等特點,在工業界得到了廣泛應用。這裡我們以item-basedCF演算法為例,解釋實時推薦演算法的具體實現[3],有關其他演算法的具體描述可參考論文[3]和[4]。

  3.1 原始Item-basedCF

  Item-based CF的基本思想是認為使用者會喜歡和他以前所喜歡的物品相似的物品,其計算分為相似物品計算和使用者喜好預測兩部分,相似物品計算是整個演算法的關鍵部分,使用者喜好預測根據物品相似度加權預測使用者對新物品的評分。

  

  

  3.2 實時item-basedCF

  在傳統的推薦演算法中,使用者對物品的喜好評分由使用者打分決定,而現實世界中,使用者對物品的打分資料較少,大部分資料是使用者行為資料,如瀏覽、點選等,這些使用者行為具有不確定性,比如,使用者點選一個物品詳情頁後關閉,可能表示使用者喜歡該物品因為使用者點選了詳情頁,也可能表示使用者不喜歡該物品因為使用者又關閉了詳情頁。這種情況下,我們只能從使用者行為資料中去猜測使用者的喜好。

  為了降低對使用者行為資料的錯誤理解造成的損失,我們對原始item-basedCF演算法進行了改進。具體來說,我們為每個使用者行為型別設定了評分權重,衡量不同行為表示的使用者喜好的可靠性,如,對點選行為我們設定其評分權重為一分,而購買行為三分,因為使用者的購買比點選更有可能說明使用者喜歡該物品。對於一個物品,使用者可能有多種行為,比如點選、購買、評論等,這時我們取權重最高的使用者行為評分作為該使用者對物品的喜好。

  我們定義了使用者對兩個物品的共同評分用於計算物品相似度,如下:

  通過將物品的共同評分設定為兩個物品評分中較低的那個,我們限定了對行為錯誤估計的損失為兩者的較小值。相應的,兩個物品的相似度計算如下:

  為了實現流式實時計算,實時更新物品的相似度,我們將上式計算分為了三部分,如下:

  其中, ,

  

  

  3.3 實時剪枝策略

  在實際計算過程中,我們發現,由於資料量太大,使用者的某一個行為會帶來大量的物品需要重新計算。具體來說,我們一般認為使用者在某一時間段中互動的物品相互之間相關,即可能相似,這個時間段可能是一天或者一個月,那麼一個使用者行為帶來的物品評分更新,可能會造成數十甚至數百個物品對的相似度需要重新計算,而這些物品對很多可能是不那麼相似的,即

  

  

  4 總結

  隨著近年來個性化服務的發展,推薦系統在實際應用中的價值也得到越來越多的認可,大資料實時推薦在推薦效果上的優秀表現,以及其巨大的發展空間,使其獲得很多的關注。大資料實時推薦仍然有許多值得探索的地方,如實時矩陣分解、實時LR、實時深度學習等線上學習演算法。

  [1]“騰訊實時計算平臺(TRC)系列之一:初識TRC”

  [2]G. Linden, B. Smith, and J. York. Amazon.com recommendations: Item-to-itemcollaborative filtering. In IEEEInternet Computing, 7(1):76–80, Jan. 2003

  [3] Yanxiang Huang, Bin Cui, Wenyu Zhang, Jie Jiang,and Ying Xu. TencentRec: Real-time Stream Recommendation in Practice. [C]//Procof the 2015 ACM SIGMOD Conference. ACM, 2015: 227-238

  [4]Yanxiang Huang, Bin Cui, Jie Jiang, Kunqian Hong, Wenyu Zhang, Yiran Xie.Real-time video recommendation. In SIGMOD 2016

  文章來源36大資料,www.36dsj.com ,微訊號dashuju36 ,36大資料是一個專注大資料創業、大資料技術與分析、大資料商業與應用的網站。分享大資料的乾貨教程和大資料應用案例,提供大資料分析工具和資料下載,解決大資料產業鏈上的創業、技術、分析、商業、應用等問題,為大資料產業鏈上的公司和資料行業從業人員提供支援與服務。

  End.