百億級通用推薦系統實踐

版權聲明:本文由呂慧偉原創文章,轉載請註明出處: 
文章原文連接:https://www.qcloud.com/community/article/188html

來源:騰雲閣 https://www.qcloud.com/community算法

 

咱們每一個人天天都會使用到不一樣的推薦系統,不管是聽歌,購物,看視頻,仍是閱讀新聞,推薦系統均可以根據你的喜愛給你推薦你可能感興趣的內容。不知不覺之間,推薦系統已經融入到咱們的生活當中。做爲大數據時代最重要的幾個信息系統之一,推薦系統主要有下面幾個做用:安全

  1. 提高用戶體驗。經過個性化推薦,幫助用戶快速找到感興趣的信息。
  2. 提升產品銷售。推薦系統幫助用戶和產品創建精準鏈接,從而提升產品轉化率。
  3. 發掘長尾價值。根據用戶興趣推薦,使得平時不是很熱門的商品能夠銷售給特定的人羣。
  4. 方便移動互聯網用戶交互。經過推薦,減小用戶操做,主動幫助用戶找到他感興趣的內容。

以應用寶爲例,對於兩個不一樣用戶A和B,打開應用程序的界面是很不同的。用戶A是一個年輕男性用戶,平時可能喜歡玩手機遊戲和看小說,因此應用寶的推薦系統會給他推薦遊戲的應用。而用戶B是一個年輕女性用戶,平時喜歡購物和輕遊戲,因此應用的推薦系統就會給她推薦購物的應用。這樣一來,從用戶的角度,減小了他找到本身喜歡的應用的時間;從產品的角度,用戶更願意去點擊和安裝他喜歡的應用,因此提升了產品的轉化率。

圖1. 應用寶首頁界面架構

除了應用寶以外,騰訊雲推薦系統還應用在騰訊的QQ空間、QQ、企鵝FM、QQ會員和黃鑽貴族等12個不一樣的業務的200多個不一樣推薦場景,天天處理的推薦請求有上百億個。那麼,這個日均百億級請求的推薦系統是怎麼打造而成的呢?主要須要解決兩個問題:框架

  1. 支持衆多業務和場景。
  2. 支持海量用戶請求。

1.通用化推薦算法庫

首先要解決的問題是如何支持衆多業務和場景。對於不一樣的場景,用到的數據、算法和模型都會有不少的不一樣,若是對於每一個場景都從頭開發,將會耗費很是多的時間和人力。那麼有沒有更好的方法呢?畢竟經常使用的推薦算法就是那麼幾種,有沒有一種方法使得同一個推薦算法能夠複用到不一樣的推薦場景呢?那就須要對推薦算法庫進行通用化設計。運維

下面舉一個例子來講明推薦系統是什麼,又是怎麼工做的。如圖2所示,一個推薦系統是由學習系統、模型和推薦系統三部分組成的。其中,學習系統經過機器學習的方法對用戶的歷史數據進行統計、分析,從而訓練獲得一個模型。這個模型是用戶行爲規律的總結,會在後面預測系統中對新用戶的請求進行預測。好比圖中簡單的例子,學習系統的輸入是5個不一樣用戶的行爲,對於男性用戶A,他喜歡的《王者榮耀》這個遊戲,對於女性用戶B,她喜歡的則是《奇蹟暖暖》,那麼對於這5個用戶統計獲得的模型是男性用戶喜歡《王者榮耀》的機率是0.67,而女性用戶喜歡《奇蹟暖暖》的機率是1。有了這個簡單的模型之後,若是在預測系統中有一個新的用戶請求,來自一個男性用戶,那麼按照前面的模型,會按照機率的大小,把《王者榮耀》推薦給這個用戶。機器學習


圖2. 推薦系統例子分佈式

實際的推薦系統中,學習系統處理的用戶數據量會更大,數據的維度也更多,用到的推薦模型也會更復雜,經常使用的有協同模型、內容模型和知識模型。其中,協同模型主要經過個人朋友喜歡什麼來猜想我喜歡這麼;內容模型則是根據物品自己來預測用戶喜歡A因此也可能喜歡B;知識模型則是根據用戶的限定條件,按照他的須要進行推薦。工具


圖3. 通用化推薦算法庫學習

一個常見的推薦系統由下面四個部分組成:樣本庫、特徵庫、 算法和模型。其中,樣本庫存儲從流水日誌中提取的用戶行爲和特徵;特徵庫存儲用戶和物品的屬性等特徵;算法是用於訓練模型用到的機器學習算法;模型庫存儲的是從樣本和特徵計算獲得的訓練模型。爲了避免同的算法能夠用於不一樣的樣本和特徵,咱們可使用圖3中的算法配置表來存儲數據、算法和模型的映射關係,將模型、算法、樣本和特徵的關係解耦,使得算法能夠複用。好比,個人模型是從樣本1和特徵1使用算法A訓練獲得。


圖4. 推薦系統的離線和在線計算分工

學習系統訓練一個模型通常會花比較長的時間,這部分咱們稱爲離線計算,對實時性要求並不高,好比,能夠在幾個小時的時間內計算出來,重要的是模型的質量。而預測系統則不同,由於預測系統是直接面向用戶請求,因此要求它響應快,同時必須可以處理海量用戶的請求,系統必須穩定可靠。接下去咱們會使用一個實時計算平臺來知足這部分的要求。

2.面向海量在線服務的實時計算平臺

除了前面提到的通用化算法庫,咱們須要解決的第二個問題是如何處理海量的用戶請求。這部分咱們用的是一個名爲R2的面向海量在線服務的自研實時計算平臺。R2有下面幾個特色:

  1. 海量,目前在R2系統上,天天處理上百億的個性化推薦請求;
  2. 實時,每一個請求的處理平均延時爲18ms;
  3. 可靠,系統穩定性爲99.99%。

R2從一開始就是圍繞線上服務而設計。首先,爲了快速處理海量請求,咱們參考了Apache Storm,把R2定義成一個流處理框架。其次,爲了系統的高可用性,在設計的時候,考慮了系統不會出現單點故障。第三,爲了方便擴容,計算資源是可插拔的。第四,系統能夠支持動態調度以方便負載平衡。第五,爲了方便運維,還緊密結合運維工具提供告警和監控。

咱們先來看一下R2這個流處理框架是如何處理推薦請求的。如圖5所示的推薦場景用於猜想用戶喜歡的手機應用,能夠分爲三步來計算:

  1. 根據id獲得用戶特徵;
  2. 使用決策樹判斷喜歡某個應用的機率;
  3. 對結果從新排序。其中,使用決策樹這一步由於計算量大,能夠經過並行計算來縮短處理時間,每一個處理單元能夠處理子樹的一部分,最後在第三步將結果彙總之後從新排序。


圖5. 流計算場景:猜想用戶喜歡的手機應用

R2的架構如圖6所示,分爲業務層、通訊層和全局配置層三層。其中,業務層負責業務處理邏輯;通訊層負責基於名字的通訊和分佈式流處理;全局配置層負責可適應的拓撲配置、動態擴縮容和動態負載調度。


圖6. 實時計算平臺R2架構

其中,業務層由兩部分組成:計算拓撲圖和計算單元(PU)。計算拓撲圖負責數據的流向,而計算單元負責業務的邏輯計算。通訊層負責PU之間的通訊以及拓撲圖執行跟蹤。其中,Interface負責從業務接入請求,Acker負責跟蹤拓撲圖執行狀況,而R2Server負責轉發PU之間的通訊、啓動PU和監控PU心跳。PU之間的通訊都經過R2Server轉發。全局配置層負責拓撲管理和名字服務,經過Zookeeper來進行動態配置。其中,拓撲管理將邏輯拓撲映射到物理拓撲,名字服務提供PU地址查詢。

3.騰訊雲推薦引擎

基於上面的經驗,咱們打造了騰訊雲推薦引擎。騰訊雲推薦引擎(CRE)是面向廣大中小互聯網企業打造的一站式雲推薦引擎解決方案,提供安全、便捷、精準、可靠的推薦系統服務,提高其業務的點擊轉化率和用戶體驗。如圖7所示,CRE由算法模型和在線計算兩部分組成。算法模型部分因爲採用了通用推薦算法庫設計,用戶在接入推薦場景時只須要經過簡單配置,就能夠直接使用已有的算法模版。在線計算部分集成了R2的優點,系統穩定可靠,而且支持快速擴容。


圖7. 騰訊雲推薦引擎

騰訊雲推薦引擎具備下面的功能:

  1. 一天接入,快速上線;
  2. 模板化算法,節省99%代碼;
  3. 快速擴容,應對業務快速增加;
  4. 穩定可靠,節省運維開銷。

這些功能下降了推薦系統的技術門檻,使得搭建推薦系統變得簡單便捷。更多有關騰訊雲推薦引擎的信息請點擊查看

4.總結

綜上所述,要打造一個百億級通用推薦系統,須要考慮下面幾點:
1.爲了可以支持儘量多的業務和場景,推薦算法庫須要作通用化設計。
2.爲了支撐海量在線用戶的實時請求,實時計算平臺必須低延時,可擴展,並且穩定可靠。
3.雲推薦引擎的解決方案,在通用化的基礎上,同時考慮了易用性,方便用戶接入。

目前騰訊雲推薦引擎正在內測中,更多信息請點擊查看

相關文章
相關標籤/搜索