這是一個(gè)我們?cè)诋a(chǎn)品形式上比較熟悉的推薦系統(tǒng),它的核心是一套大規(guī)模矩陣分解算法,利用已有的協(xié)同矩陣為你推薦可能想建立聯(lián)系的新Item,包括用戶、App、公共主頁(yè)等。
Facebook的廣告形態(tài)非常多樣,包括:
- Suggested Page(你可能喜歡的公眾頁(yè))
- Page Post(公眾號(hào)帖子推廣)
- Suggested App(你可能喜歡的應(yīng)用)
- Video Ads(視頻廣告)
所有的數(shù)據(jù)都顯示,重排序后的NewsFeed可以讓用戶閱讀積極性提高很多。因此,雖然外界一直有質(zhì)疑和爭(zhēng)吵,但是NewsFeed重排序并沒有停止過。顯然“大家一起窮,各自拼人品”的時(shí)間線不符合商業(yè)社會(huì)的基本哲學(xué),提高效率的興趣Feed才是一種必然。
并不復(fù)雜的興趣Feed實(shí)現(xiàn)
興趣Feed如何實(shí)現(xiàn)?這里先介紹創(chuàng)意內(nèi)容收集工具Pinterest的Smart Feed,然后總結(jié)一些通用技術(shù)點(diǎn)。
Smart Feed技術(shù)實(shí)現(xiàn)
整個(gè)Smart Feed后端主要模塊邏輯如圖2,由三個(gè)部分構(gòu)成:
- 后臺(tái)任務(wù)(Worker)
- 內(nèi)容生成器(Content Generator)
- 前端服務(wù)(Service)

圖2 Smart Feed后端架構(gòu)后臺(tái)任務(wù)(worker)
后臺(tái)任務(wù)(worker)
Worker的職責(zé)有兩個(gè):
- 接收數(shù)據(jù)源產(chǎn)生的新Pin,決定這個(gè)Pin該推送給哪些用戶,并針對(duì)每一個(gè)它該推送的用戶,給出這個(gè)Pin對(duì)這個(gè)用戶的吸引程度,俗稱“打分”。
- 存儲(chǔ)這些經(jīng)過打分的Pin,備用。

圖3 Smart Feed后臺(tái)任務(wù)模塊
打了分的Pin就會(huì)根據(jù)其不同來(lái)源分開存儲(chǔ)(Pool)。存儲(chǔ)結(jié)構(gòu)是一個(gè)優(yōu)先隊(duì)列,按照打分排序,新的Pin進(jìn)來(lái)和原來(lái)(但用戶還未看)的Pin一起排序。
這個(gè)存儲(chǔ)的Pool可以直接用KV數(shù)據(jù)庫(kù)頂上,HBase、Redis都可以,每次送入數(shù)據(jù)庫(kù)的數(shù)據(jù)是一個(gè)三元組:(user, pin, score)。Pinterest選用的是HBase。一共有兩個(gè)HBase集群,一個(gè)存還沒看過的Pin,一個(gè)存已經(jīng)看過的Pin。
當(dāng)數(shù)據(jù)源產(chǎn)生了新的Pin之后,需要由一個(gè)叫PinLater的模塊經(jīng)過Zen(封裝了HBase基本操作的圖數(shù)據(jù)存儲(chǔ)模塊)推送給粉絲。這里推送是異步的,有幾秒到幾分鐘的延遲。
內(nèi)容生成器(Content Generator)
如圖4,內(nèi)容生成器要做的是:
- 決定返回多少個(gè)Pin,數(shù)量不是固定的,會(huì)根據(jù)用戶訪問頻繁程度以及上次看到的新內(nèi)容多少來(lái)決定。
- 分配來(lái)源的比例構(gòu)成,這塊Pinterest沒有透露分配比例,我們可以猜一下,也許是固定比例,也許是有一些啟發(fā)式算法。
- 將Pin排成一定的順序,按照分?jǐn)?shù)排序就好了。
- 待推送內(nèi)容要從Pool中刪除,以保證每次請(qǐng)求的都是沒看過的。

圖4 Smart Feed內(nèi)容生成器模塊
每一次產(chǎn)生的待推送內(nèi)容合在一起叫做一個(gè)“塊”(chunk)。
前端服務(wù)(Feed service)
如圖5,F(xiàn)eed service提供前端的服務(wù)。為了提供高可用服務(wù),F(xiàn)eed service的任務(wù)有二個(gè):
- 接收從內(nèi)容生成器返回的“新”內(nèi)容。
- 新內(nèi)容合并上一次的“舊”內(nèi)容。

圖5 Smart Feed前端服務(wù)模塊
Pinterest排序算法
排序算法名字叫做Pinnability。我們可以將其翻譯成“可Pin度”,可Pin度是一組機(jī)器學(xué)習(xí)模型,用于衡量一個(gè)用戶對(duì)一條Pin產(chǎn)生互動(dòng)的可能性。

圖6 Pinnability排序算法的任務(wù)
Pinnability模型用到的機(jī)器學(xué)習(xí)算法都是比較常用的模型,包括邏輯回歸(LR)、支持向量機(jī)(SVM)、GBDT和卷積神經(jīng)網(wǎng)絡(luò)(CNN)。整個(gè)Pinnability的模型流程如圖7所示。模型產(chǎn)生的流程分為三個(gè)階段:準(zhǔn)備訓(xùn)練數(shù)據(jù)、訓(xùn)練模型、上線使用。
