目前,丁香人才和丁香園app都已接入新版的個性化推薦系統,而且已經取得至關不錯的效果。本文咱們就來分享一下推薦系統的架構設計。html
目前,丁香人才和丁香園app都已接入新版的個性化推薦系統,而且已經取得至關不錯的效果。本文咱們就來分享一下推薦系統的架構設計。html
總體架構
總體架構圖mysql
推薦系統能夠說是一個閉環的生態系統了。從總體架構圖中,咱們就能夠看出來,推薦列表從RankServer
產生,用戶點擊推薦列表產生的日誌又副作用於畫像系統的更新,模型訓練,新的推薦算法的實驗,以及BI
報表的生產,而這些又都是RankServer
依賴的模塊。web
Rank Server
Rank Server算法
各部分說明
Rank Server
是推薦系統最爲關鍵的一環,下面咱們將詳細介紹各個模塊的功能。sql
ABTest:
ABTest
主要包含了下列幾點功能:緩存
支持定向策略服務器
支持多種實驗微信
支持灰度發佈架構
支持
Rolling Update
app
爲用戶/內容打標籤,包括召回,配比,排序三個參數。具體作法能夠利用uuid將用戶/內容切分爲多個bucket。每一個bucket分配不一樣的策略。非法id隨機分配。添加配置白名單,方便測試。
ABTest
1.召回:召回模型編號,配比:多個召回模型所佔百分比,排序:排序算法編號。
2.AB測試元數據寫zookeeper
。(配置量小,實時生效)
召回配比排序元數據寫mysql
。
召回模型
從全量候選集直接獲取召回模型所需數據每每不容易,能夠經過標籤檢索來篩選初步數據。因此召回模塊就是爲了完成候選集範圍縮小的目的。
召回模型主要分爲兩類:batch
和streaming
批處理的召回模型對歷史的數據作分析。召回結果寫cache。如協同過濾,關聯規則等。
流式計算對實時數據源(如最新,最熱,優質)分析。(主題模型)
NOTE: 若是召回模型沒法爲當前用戶/內容做出推薦時候,採用候補資源推薦
下圖顯示的是典型的在線召回模型
典型的在線召回
上圖顯示是一個典型召回策略,咱們會在用戶畫像中記錄用戶的興趣標籤及其權重,緩存服務存儲了興趣標籤的實時推薦列表倒排索引,最後咱們根據用戶的興趣標籤召回對應的標籤倒排索引。在具體實現時,咱們採用了
Elasticsearch
,做爲咱們倒排索引存儲服務。
下圖顯示的是典型的離線召回模型(User-Base CF)
典型的離線召回
排序
rerank
模型也能夠分爲離線模型(如LR
,GBDT
等)和在線模型(如FTRL
等)兩種。
排序模塊根據ab測試爲推薦數據打的標籤(排序字段),調用不一樣的排序模型服務對召回結果集進行排序,得到最終有序結果集。
排序模塊可能涉及多種類型特徵,特徵獲取和計算關係到Rank Server
總體的響應速度。
NOTE: 在具體實現過程當中,
rerank
模塊也是咱們遇到問題比較多的一個模塊。這裏我總結幾個關鍵點:
並行特徵獲取。 正如咱們上述中提到的,每每一次排序,咱們可能就須要獲取多達上千篇內容的多維特徵,因此並行特徵獲取是提高總體相應時間的關鍵一步。在具體實現上,參考了[1]的設計,採用
akka
進行並行特徵獲取。利用GPU加速排序計算。 排序模型每每涉及到高緯矩陣計算,一開始咱們將
tensorflow
模型放在了cpu
服務器上,實驗發現效果至關不理想,最終咱們選擇了gpu
服務器,獲得了10+倍的性能提高。
CPU 32核 |
GPU |
|
300篇帖子 |
200- 300ms |
10ms |
500篇帖子 |
500-600ms |
20ms |
1000篇帖子 |
800+ms |
40ms |
壓力測試 |
100qps 1s |
200qps 400-500ms |
tensorflow在cpu/gpu服務器上的性能對比
排序模型評估
離線部分:上線以前須要計算AUC
/MAP
,達到上線標準以後,方可手動上線。
在線部分:經過ABtest
觀察一段時間,對比實際效果。
黑名單
黑名單由兩部分組成,一部分是用戶瀏覽的歷史記錄,一部分是運營人員定義的人工規則。
重複推薦可能對推薦結果帶來影響,以及很差的用戶體驗,因此有必要過濾掉最新點擊的topN用戶/內容。
運營人員可能須要屏蔽一些用戶/內容。
推薦系統指標
因爲推薦系統依賴衆多的外部服務,這就增長了系統維護的複雜性,肯定一個推薦系統是否健康指標,咱們能夠將其分爲兩大類,程序指標和數據指標。
程序指標
程序指標咱們收集的比較簡單,包括CPU
,Memory
使用率和GC
相關指標。
CPU
Memory
GC Time
數據指標
數據指標比較複雜,這裏我就放出一些關鍵的指標數據。
召回過濾比例
召回率
召回排序分鐘級別統計
多個召回的曝光點擊率對比
Pi
推薦系統管理後臺
因爲推薦系統的複雜性,因此很難在線下環境中,提供一套完整的測試環境,因此在咱們的場景,咱們須要一個端到端的推薦請求模擬平臺,Pi
管理後臺也由此運營而生。
推薦模擬
經過Pi
後臺,咱們能夠獲取用戶推薦結果,直觀的判斷用戶推薦結果是否符合咱們的推薦預期。
模擬用戶推薦請求
Reference
[1]美團排序線下篇 http://tech.meituan.com/rerank_solution_offline.html
[2]美團排序線上篇 http://tech.meituan.com/meituan-search-rank.html
[3]達觀搜索引擎排序案例 http://www.infoq.com/cn/articles/a-search-engine-scheduling-architecture-for-reference
[4]job recommendation https://www.oreilly.com.cn/ideas/?p=424
[5] 今日頭條推薦算法原理 https://36kr.com/p/5114077.html
本文分享自微信公衆號 - 浪尖聊大數據(bigdatatip)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。