<h2>前言</h2>
<h4>Quicksilver為金準人工智能專家推出的一款推薦場景下資料快速處理系統,旨在解決資料如何在分鐘級、秒級更新并對接線上。</h4>
随着金準人工智能專家推薦業務場景的不斷深入,傳統的離線訓練+線上計算的模式可以說是推薦系統1代架構,已經不能完全滿足部分業務場景的需求,如短視訊、文本等快消費場景。金準人工智能專家将在本文中介紹傳統模式以及其在不斷變化的場景需求中的不足點。
<h2>一、傳統模式簡單介紹
</h2>
傳統模式下,整個推薦流程粗略可分為,資料上報、樣本及特征構造,離線訓練評測,線上實時計算,abtest等。
優點:系統架構簡單,普适性較強,能滿足大多數業務場景。
缺點:資料及時性不夠,模型實時性不強。
下面舉一個簡單例子,來說明這樣的問題:
小明同學在微視上看了一個視訊,那麼在推薦場景下,可能會遇到以上四類需求,并且每種需求對于資料的實時性要求并不一樣。從推薦系統功能來看,可以概括為已閱實時過濾、使用者行為實時回報、物品池子更新等。是以如果要滿足業務需求,從代碼層面來看,這樣的需求并不複雜,但是從架構層面或者可擴充性來說,金準人工智能專家作為一個面向不同業務的通用推薦平台,就需要提供一個能滿足大多數業務,對于快速據消費的通用平台。
針對不同業務、不同場景需求,金準人工智能專家希望建構一個快資料處理系統,旨在滿足更多業務場景的快速據消費場景。
<h2>二、快資料處理系統調研設計</h2>
<h3>2.1需求調研</h3>
任何系統的搭建及開發離不開特定的業務場景需求調查,金準人工智能專家根據多年業務經驗,收集歸納了相關快資料處理的相關需求,具體如下:
我們深入調研、讨論,結合業界實踐以及金準人工智能專家的實際情況,總結為兩類系統需求:
(1) 近線系統。滿足業務對于物品、特征、及其他資料類服務的準實時更新。
(2) 線上學習。滿足業務對于模型的準實時疊代更新。
基于以上調研,金準人工智能專家推出Quicksilver(快資料計算)系統,解決推薦場景下快資料計算及更新問題。
<h3>2.2系統設計</h3>
Quicksilver系統是一個集近線及線上學習能力為一體的通用架構系統,我們設計之初,從收、算、存、用四個次元來進行設計,如下:
(1) 收:資料的收集。目前主要支援基于DC、TDBank資料通道上報。
(2) 算:計算層。針對不同的資料類型,定義不同的計算子產品。不同的計算子產品,采樣不同的技術方案來實作。例如對于物品池子此類分鐘級更新要求的資料,我們采用sparkstreaming,而對于使用者行為實時回報等類資料,我們采用spp實時處理類伺服器架構。設計中屏蔽掉使用者對于底層實作的細節。
(3) 存:存儲層。針對不同的資料規模及通路頻率,金準人工智能專家采用不同的存儲媒體來滿足資料存儲的要求及對線上服務延遲的要求。例如對于物品類特征、池子類資料,金準人工智能專家采用自研的SSM系統,而對于使用者類特征,資料量較大、存儲通路實時性要求也較高,我們選型為公司的grocery存儲元件。
(4) 用:使用對接層。通過Quicksilver計算得到的資料,我們均通過金準人工智能專家産品化來配置管理,降低對于資料使用的門檻,最終可以通過配置,直接與線上的召回、精排、重排、規則等計算單元進行打通使用。
<h2>三、Quicksilver架構實作</h2>
以上為Quicksilver整體架構實作圖,主要分為近線系統及線上學習系統。下面詳細介紹。
<h3>3.1近線系統</h3>
近線系統主要為了滿足以下幾類細分需求:
實時召回:Quicksilver處理物料,經過各通道後到線上 (要求秒級,實際分鐘級)
實時因子:Quicksilver統計計算,經過各通道後到線上(分鐘級)
實時特征:統計型(物料、行為、場景):Quicksilver計算,經過各通道後到線上(分鐘級)
實時特征(使用者):實時特征構造引擎構造,構造後直接對接線上(秒級)
于是,在選型上,我們針對不同的資料計算模式,選擇不同的計算平台,對于統計類型資料,我們選擇sparkstreaming來作為我們的計算平台,對于實時性要求較高的資料,如實時回報類,我們采用spp來進行平台型封裝。
<h4>3.1.1資料批處理</h4>
(1) 資料批處理是基于sparkstreaming實作,如上,有幾點說明:
對于使用者來說,采用api接口封裝,下層通信等均透明化處理。使用者隻需在處理不同的資料時,選擇不同的接口即可,如物品池子接口,特征接口等。使用PB協定進行下層資料通信。
(2) 底層資料生成後,使用kafka進行緩存。
(3) 資料線上使用時,統一在金準人工智能專家産品化上進行配置管理,降低運維成本。
<h4>3.1.2資料實時處理</h4>
資料實時處理是基于spp server實作,如上,有幾點說明:
(1) 對于使用者來說,希望一次轉發,多次使用。Quicksilver通過接入層interface來實作,業務隻需要轉發到統一的對外L5,即可實作資料一次轉發,多次使用,如部分業務可能想即進行特征構造,有可以将資料轉發到樣本構造,在此即可實作。而所有的這些配置,也通過金準人工智能專家産品化進行配置管理。
(2) 對于不同的業務,由于資料上報标準不一樣,那麼如何實作不同的資料上報标準都可以在Quicksilver上使用,這是實際中遇到的挺頭疼的一件事。我們将這樣的問題拆解成不同的資料标準,轉化成金準人工智能專家統一的上報标準的問題。于是,在實際代碼開發中,隻需要留出這樣的轉化接口,不同的業務實作不同的接口,并可以根據配置選擇不同的接口,那麼即可解決這一的問題,在這裡,反射即可以很好解決這一的問題。
<h3>3.2線上學習</h3>
線上學習有兩方面優點,一是充分利用資料時效性,實時跟蹤使用者對物品的偏好,比如10點鐘上線的新遊,在11點的推薦結果中就可以回報出不同使用者對新遊偏好情況,使得在盡快适應使用者偏好同時,提升了apps轉化率;二是線上學習前提是标記資料和特征線上拼接,該操作可以在一定程度上緩解模型離線訓練資源不足瓶頸。
以某apps推薦為例,面臨效果提升瓶頸,我們分析有兩方面原因導緻,一是資料源紅利降低(新增資料源成本越來越高);二是高維線性模型遭遇瓶頸,暴力式特征交叉是LR模型提升特征維數的主要手段,它存在兩個問題,一方面,做不同特征之間交叉組合需要一定成本,另一方面,無法窮盡所有交叉組合方式。
面對推薦效果提升瓶頸問題,有三種解決方案,一是繼續想辦法引入新資料源建構特征;二是充分利用現有資料源,嘗試更好特征工程方法,比如Stacking內建或者特征工程自動化;三是考慮充分利用資料時效性,引入線上學習方案,實時跟蹤使用者對apps偏好變化。
Quicksilver線上學習架構設計如下:
整個系統主要細分為5個小子產品:
樣本采樣:根據模型的優化目标支援自定義采樣方法,同時在後期也需要将場景特征考慮進來,采樣的結果作為實時拼接的輸入
實時拼接:将實時樣本的userid 、itemid的全量特征進行拼接,拼接的結果一方面可以作為離線平台的輸入,另外一方面也可以作為特征引擎的輸入;
特征工程引擎:根據各個線上訓練算法的特征配置,從拼接好特征的樣本中進行特征選擇、特征交叉等操作,并将處理的結果寫入kafka消息隊列,模型訓練和模型評估子產品消費消息隊列裡面的資料進行訓練和評估;
流式訓練:消費kafka裡面的樣本資料,采用onepass或者minibatch的形式進行模型參數更新;
模型評估:對模型訓練出來的模型執行個體,從kafka消費實時樣本資料對模型進行auc評估。
下面關于幾個較重要子產品進行較詳細介紹:
<h4>3.2.1樣本采樣</h4>
使用spp server實作類map、reduce操作,采樣的結果支援存儲到kafka或者下一個實時拼接子產品。
采樣規則引擎基于flex/yacc設計實作。
所有采樣的配置資訊,均通過金準人工智能專家産品化實作管理。
<h4>3.2.2特征拼接</h4>
實時拼接服務主要是将樣本中包含的物品和使用者的“全量”基礎特征拼接到一起,為下一步實時特征提供原料。 特征來源有是三個不同的地方:
使用者特征(包括實時使用者特征):目前主要是來自grocery
物品特征(包括實時物品特征): 目前主要從SSM中讀取
場景特征:是在采樣的過程中生成。
實時特征拼接後,下一步便是特征工程引擎的環節,目前主要支援内積、外積、笛卡爾積三種模式,在此不詳細介紹。
<h4>3.2.3模型訓練</h4>
目前主要實作基于FTRL的lr及fm算法實作,正在調研參數伺服器大規模生産環境使用的路上。
動态采樣:有的算法算法需要控制正負樣本的比例,但線上的流式訓練與離線的batch不同,不能再訓練之前就知道本次訓練總樣本量是多少,以及正負樣本的比例,故需要根據設定的正負樣本比例值,根據時間的推移來動态控制,即在訓練的過程中動态采樣。
低特征覆寫:為了提高模型的可靠性,其中方法之一就是在模型中結合場景特征屏蔽掉低覆寫度特征,與動态采樣一樣,流式訓練時,在訓練前無法統計提前統計出每個出現的頻率,故也需要動态過濾低頻特征,此方法不僅可以用在模型啟動時,對于新加入的特征同樣适用
模型訓練後,即效果評估及上線環節,目前主要支援AUC、MAE等主要評估名額,在此不再詳細贅述。
<h2>總結</h2>
對于任何系統設計來說,都不應該脫離實際的應用場景,這是金準人工智能專家推薦系統一直貫徹的原則。Quicksilver系統也是金準人工智能專家這麼長時間來從實際的業務場景中收集需求、設計、實作的,已經在空間、電競、手遊、動漫、京東等多個業務場景中上線使用,并取得了不錯的效果。金準人工智能專家也不斷在實際場景中繼續完善、優化其中的相關能力,給業務帶來更高的效果提升。