Flink + 強化學習搭建實時推薦系統 思維導圖
強化學習
決策 代表強化學習本身的特點。需要對瞬息萬變的局勢進行評估並快速作出相應的選擇,同時需要考慮長期的目標而非僅僅是短期收益
強化學習的最終目標是學習出一個策略來最大化期望獎勵。策略指的是智能體如何根據環境狀態來決定下一步的動作,對應到推薦的場景中就是根據用戶過往行為記錄來決定下一步推薦的物品
不同於監督學習的需要預先人工收集數據並標注,強化學習的數據來源於不斷地與環境進行互動,繼而用收集來的數據更新模型
訓練強化學習時也收集一堆固定的數據,然后不斷重復利用,不再收集新的,仿照深度學習那樣在固定數據集上大力出奇跡,而推薦系統就很適合這種模式,因為直接線上探索交互代價太大,影響用戶體驗,但收集用戶行為日志卻相對容易且數據量大
Flink
Flink 官網上的自我介紹是 數據流上的有狀態計算 (Stateful Computations over Data Streams)
隨着數據的不斷流入,其可以保存和訪問之前的數據和中間結果,當到達特定的條件后一並計算
強化學習模型需要累計一定的用戶行為才能作為模型輸入作推薦,所以需要在 Flink 中實時保存之前的行為數據,用到 Flink 強大的狀態管理功能
傳統離線訓練使用的深度學習框架是 PyTorch,這個不像 Tensorflow 那樣部署方便,所以采用近年來流行的 FastAPI 做成 api 服務,在 Flink 中獲取滿足條件的特征后直接調用服務進行推理,產生推薦后存到數據庫中,服務器在下次用戶請求時可直接從數據庫中調用推薦結果
FlinkRL
FlinkRL 是一個基於 Flink 和強化學習的推薦系統,二者的結合使得推薦系統能夠捕獲用戶興趣的動態變化規律並提供富有洞察力的推薦結果
https://github.com/massquantity/flink-reinforcement-learning
FlinkRL 主要用於在線推理,而離線訓練在另一個倉庫 DBRL 中實現
為模擬在線環境,由一個數據集作為生產者發送數據到 Kafka,Flink 則從 Kafka 消費數據
DBRL
DBRL 是一個用於訓練強化學習推薦模型的工具,和傳統強化學習的訓練不同,DBRL 中只使用靜態數據來訓練模型,而不與環境作任何進一步的交互
https://github.com/massquantity/DBRL
訓練完成后的模型可用於在線服務,主要使用 Flink 和訓練后的強化學習模型作在線推薦