開發者學堂課程【《實時數倉入門課程》:基于 Apache Flink + Hologres 的實時推薦系統架構解析】學習筆記,與課程緊密聯系,讓使用者快速學習知識。
課程位址:
https://developer.aliyun.com/learning/course/807/detail/13888基于 Apache Flink + Hologres 的實時推薦系統架構解析
内容介紹:
一、 實時推薦系統原理
二、 實時推薦系統架構
三、 基于 Flink + Hologres 的實時推薦系統關鍵技術
1. 可撤回訂正的特征和樣本
2. 基于事件的流批混合工作流
實時推薦系統原理
靜态推薦系統:
前端使用者應用産生很多日志行為,放入一個消息隊列中,進入到 ETL,然後進入離線系統去做特征生成和模型訓練,再将特征和模型推入到系統中,線上服務便可以調用線上推理服務進而獲得推薦結果。
執行個體:
在日志中我們可以看到:
“ User1 and User2 viewed page#200 and other pages;User1 viewed page#100 and clicked ads#2002;”
使用者日志中通過ETL 将這些行為歸納,然後送到模型訓練中。
在模型訓練過程中會用到一些特征:
“Both User1 and User2 are male users i
n
China;”
而後模型可能學到:
“Show ads#2002 to Male User in China when page#100 is visited;”。
這時将許多使用者的特征資訊推到特征庫,也将模型推到線上去。
靜态推薦系統的特點:
1. 靜态生成模型和特征。
2. 以分類模型為例,根據使用者的相似性進行使用者分類,假設同類使用者有相似的興趣和行為。
l 例如中國男性使用者有類似行為。
l 一旦使用者被劃分為某個類别,則他将一直處于這個類别中,直到被新的模型訓練重新配置設定。
靜态推薦系統的問題:
1. 使用者的行為非常多元化,無法劃分到某個固定類别。
l 上午為父母采購保健品,中午為出差訂酒店,晚上給家人買衣服……
l 靜态系統無法準确将使用者放到當時當刻正确的類别中。
2. 某一類别使用者的行為相似,但是行為本身可能會發生變化。
l 假設使用者“随大流”,但是“大流”可能發生變化。
l 曆史資料看出來的“大流”可能無法反映線上的真是情況。
加入實時特征工程的推薦系統:
為解決靜态推薦系統的問題可以加入動态特征。可以對使用者的實時特征進行采樣,能更好的判斷使用者當時當刻的意圖(可以采集使用者一分鐘之内看了哪些頁面或浏覽的一些商品進而給使用者推薦更合适當時當刻意圖的廣告)。
由于模型訓練是離線進行的,模型可能第二天才被更新,便會對推薦效果帶來影響。
加入實時特征工程的推薦系統的特點及問題:
1. 通過增加動态 feature。
l 實時跟蹤一類使用者的行為,貼合“大流”。
l 實時追蹤使用者的表現,了解使用者當時當刻的表現,并将使用者劃分到更合适的類别中去。
2. 但是當模型的分類方式本身發生變化時,可能無法找到最合适的類别,需要重新訓練模型增加分類。
l 例:新産品上線頻繁,業務高速成長,使用者行為的分布變化比較快。
加入實時模型訓練的推薦系統:
加入實時模型訓練的推薦系統特點:
1. 在動态特征的基礎上,實時訓練模型,使模型盡可能貼近此時此刻使用者行為的分布。
2. 緩解模型的退化。
經典離線推薦系統架構:
實時推薦系統演進:
1. 特征計算:靜态 T+1 特征計算到實時特征計算。
2. 樣本生成:離線 T+1 樣本生成到實時樣本生成。
3. 模型訓練:離線訓練 T+1 更新到增量訓練實時更新。
阿裡巴巴搜推廣線上機器學習流程:
實時推薦系統架構
相比于離線推薦系統,架構發生了一些變化。消息隊列生成的資料除了進入到離線存儲來儲存曆史行為意外,還會把消息隊列中的消息讀出兩份,一份做實時特征計算,也會放到特征存儲中,另外一份放到實時樣本拼接中,得到實時樣本。這個實時樣本可以同時拿到離線的模型訓練和實時的模型訓練。然後進入模型儲存,經過模型驗證最後上線。
基于 Flink + Hologres 的實時推薦方案
實時特征計算及推理(Flink+Hologres):
實時樣品拼接(Flink+Hologres):
實時模型訓練/深度學習(PAI-Alink/Tensorflow):
l 可撤回訂正的特征和樣本
為什麼需要特征和樣本的訂正:
1. 實時日志存在亂序
u 某個使用者點選事件由于系統延遲完到産生 False Negative 樣本
2. 一般通過離線作業重新計算離線樣本
u 重新跑整個離線樣本計算
3. 通過 Flink+Hologres 撤回機制點更新
u 僅更新需要更正的特征和樣本
l 基于事件的流批混合工作流
不同系統之間有一些互相的依賴關系或排程關系,可能是資料依賴或控制依賴。比如:周期的或手動觸發的跑一些離線的靜态特征計算(特征回填或更正實時特征産生的問題);離線模型訓練或線上模型訓練之後需要出發模型驗證;樣本拼接完成之後跑批量的離線模型訓練。這些任務之前的互動就是一個比較複雜的工作流,之中既有批任務又有流任務,則為流批混合工作流。
Flink AI Flow(一個大資料+AI 的頂層工作流抽象):
支援服務(支援完成整個排程語義的支援服務):
1. 中繼資料服務(Metadata Service)
2.通知服務(Notification Service)
l 帶主鍵的事件和事件監聽
3.模型中心(Model Center)
例子:
流批混合的排程器和工作流幫助我們實作端到端的實時推薦系統架構中所有作業所有工作流的串聯。
開源 Flink 生态項目:
https://github.com/alibaba/flink-ai-extended/tree/master/flink-ai-flow