推薦系統(tǒng)的體系結(jié)構(gòu)
整個推薦系統(tǒng)的結(jié)構(gòu)如圖:

Snip20161201_6.png
看起來還是挺簡單的。分布式流計算主要負(fù)責(zé)了五塊:
- 點(diǎn)擊曝光等上報數(shù)據(jù)處理
- 新視頻標(biāo)簽化
- 短期興趣模型計算
- 用戶推薦
- 候選集計算,如最新,最熱(任意時間段)
存儲采用的有:
- Codis (用戶推薦列表)
- HBase (用戶畫像和視頻畫像)
- Parquet(HDFS) (歸檔數(shù)據(jù))
- ElasticSearch (HBase的副本)
下面這張圖則是對流式計算那塊的一個細(xì)化:

Snip20161201_7.png
用戶上報采用的技術(shù)方案:
- Nginx
- Flume (收集Nginx日志)
- Kafka (接收Flume的上報)
對于第三方內(nèi)容(全網(wǎng)),我們自己開發(fā)了一個采集系統(tǒng)。
個性化推薦示

Snip20161201_10.png
所有候選集都是實(shí)時更新的。
這里我們說下參數(shù)配置服務(wù)器的概念。
假設(shè)我有三個算法A,B,C ,他們分別由三個流式程序完成,各個程序是互相獨(dú)立的,最后都會算出各自的結(jié)果集。因?yàn)椴煌蜻x集和算法算出的內(nèi)容數(shù)據(jù)量和頻度都會有差異,假設(shè)A算出的結(jié)果集過大,B算出的結(jié)果集很小,但是質(zhì)量很好,這個時候他們在發(fā)送到用戶推薦隊列的時候,需要將自己的情況提交給參數(shù)配置服務(wù)器,并且由參數(shù)服務(wù)器決定最后能夠發(fā)送到隊列的量。參數(shù)服務(wù)器也可以控制對應(yīng)頻度。比如A算法距離上次推薦結(jié)果才10s就有新的要推薦了,參數(shù)服務(wù)器可以拒絕他的內(nèi)容寫入到用戶推薦隊列。
上面是一種多算法流程的控制。其實(shí)還有一種,就是我希望A,B的結(jié)果讓一個新的算法K來決定混合的規(guī)則,因?yàn)樗兴惴ǘ际荢treamingPro中的一個可配置模塊,這個時候A,B,K 會被放到一個Spark Streaming應(yīng)用中。K可以周期性調(diào)用A,B進(jìn)行計算,并且混合結(jié)果,最后通過參數(shù)服配置服務(wù)器的授權(quán)寫入到用戶推薦隊列。
一些感悟
我14,15年做的一次推薦系統(tǒng),那個時候還沒有流式計算的理念,而且也不能復(fù)用一些已有的技術(shù)體系,導(dǎo)致系統(tǒng)過于復(fù)雜,產(chǎn)品化也會比較困難。而且推薦的效果也只能隔日看到,導(dǎo)致效果改良的周期非常長。當(dāng)時整個開發(fā)周期超過了一個多月。然而現(xiàn)在基于StreamingPro,兩三人沒人么天只能投入兩三小時,僅僅用了兩個禮拜就開發(fā)出來了。后續(xù)就是對用戶畫像和視頻畫像的進(jìn)一步深入探索,核心是構(gòu)建出標(biāo)簽體系,然后將這些標(biāo)簽打到用戶和視頻身上。我們組合了LDA,貝葉斯等多種算法,獲得不少有益的經(jīng)驗(yàn)。
原文鏈接:http://www.jianshu.com/p/83af9502acb6
著作權(quán)歸作者所有,轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),并標(biāo)注“簡書作者”。