丁香園推薦系統實戰

目前,丁香人才和丁香園app都已接入新版的個性化推薦系統,而且已經取得至關不錯的效果。本文咱們就來分享一下推薦系統的架構設計。html

總體架構


總體架構圖mysql


推薦系統能夠說是一個閉環的生態系統了。從總體架構圖中,咱們就能夠看出來,推薦列表從RankServer產生,用戶點擊推薦列表產生的日誌又副作用於畫像系統的更新,模型訓練,新的推薦算法的實驗,以及BI報表的生產,而這些又都是RankServer依賴的模塊。web

Rank Server

Rank Server算法


各部分說明

Rank Server是推薦系統最爲關鍵的一環,下面咱們將詳細介紹各個模塊的功能。sql

ABTest:

ABTest主要包含了下列幾點功能:緩存

  • 支持定向策略服務器

  • 支持多種實驗微信

  • 支持灰度發佈架構

  • 支持Rolling Updateapp

爲用戶/內容打標籤,包括召回,配比,排序三個參數。具體作法能夠利用uuid將用戶/內容切分爲多個bucket。每一個bucket分配不一樣的策略。非法id隨機分配。添加配置白名單,方便測試。

ABTest

1.召回:召回模型編號,配比:多個召回模型所佔百分比,排序:排序算法編號。
2.AB測試元數據寫zookeeper。(配置量小,實時生效)
召回配比排序元數據寫mysql

召回模型

從全量候選集直接獲取召回模型所需數據每每不容易,能夠經過標籤檢索來篩選初步數據。因此召回模塊就是爲了完成候選集範圍縮小的目的。

召回模型主要分爲兩類:batchstreaming

批處理的召回模型對歷史的數據作分析。召回結果寫cache。如協同過濾,關聯規則等。

流式計算對實時數據源(如最新,最熱,優質)分析。(主題模型)

NOTE: 若是召回模型沒法爲當前用戶/內容做出推薦時候,採用候補資源推薦

下圖顯示的是典型的在線召回模型


典型的在線召回


上圖顯示是一個典型召回策略,咱們會在用戶畫像中記錄用戶的興趣標籤及其權重,緩存服務存儲了興趣標籤的實時推薦列表倒排索引,最後咱們根據用戶的興趣標籤召回對應的標籤倒排索引。在具體實現時,咱們採用了Elasticsearch,做爲咱們倒排索引存儲服務。

下圖顯示的是典型的離線召回模型(User-Base CF)

典型的離線召回


排序

rerank模型也能夠分爲離線模型(如LRGBDT等)和在線模型(如FTRL等)兩種。
排序模塊根據ab測試爲推薦數據打的標籤(排序字段),調用不一樣的排序模型服務對召回結果集進行排序,得到最終有序結果集。

排序模塊可能涉及多種類型特徵,特徵獲取和計算關係到Rank Server總體的響應速度。

NOTE: 在具體實現過程當中,rerank模塊也是咱們遇到問題比較多的一個模塊。這裏我總結幾個關鍵點:

  1. 並行特徵獲取。 正如咱們上述中提到的,每每一次排序,咱們可能就須要獲取多達上千篇內容的多維特徵,因此並行特徵獲取是提高總體相應時間的關鍵一步。在具體實現上,參考了[1]的設計,採用akka進行並行特徵獲取。

  2. 利用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源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索