產(chǎn)品推薦系統(tǒng)架構(gòu)初探
想象一下,站在推薦引擎面前的你被抽離出一個數(shù)字的軀體。你找到一面鏡子,卻驚詫的發(fā)現(xiàn)自己的身體被無數(shù)數(shù)據(jù)所填充,許是:科技10%、籃球4%、熱火隊2.3%、歷史1%、自然0.3%。你仔細(xì)觀察,甚至發(fā)現(xiàn)了很多連你自己都沒有注意到的細(xì)節(jié):雖然熱愛旅游,但你喜歡博物館遠(yuǎn)多過自然景觀。當(dāng)然,你也會發(fā)現(xiàn)自己的身體上仍然有一團(tuán)團(tuán)的迷霧,那是尚未被系統(tǒng)所發(fā)掘的興趣點。
專門為你適配的內(nèi)容如一群螢火蟲般朝你涌來,你伸手點擊了一條內(nèi)容將它點亮。就在點擊的那一瞬間、你身上的迷霧有一絲散去了,同時顯示出了新的興趣點:“極限運動:0.01%”,那些原本就存在的密密麻麻的數(shù)字也有一些發(fā)生了變化:有的權(quán)重上升、有的權(quán)重下降。每一次選擇與反饋,你都在進(jìn)化著自己的數(shù)字軀體。
現(xiàn)在,你生出了雙翅、原地飛翔了起來,能夠從高處俯瞰整個推薦系統(tǒng)。你看到了一個又一個數(shù)字?jǐn)M態(tài)的人,在不同的信息流中暢游。每個人身邊圍繞著許許多多的信息光點、又同其他人之間有著若隱若現(xiàn)的連接。一個個信息被閱讀的點亮、被忽略的變暗。每一個被點亮的光點就像被延續(xù)了生命一樣,得以被分裂成更多光點、順著人和人之間的連接,飛舞到更多的人身邊。此起彼伏的光點明滅,共同照亮了整座系統(tǒng),讓它仿佛有生命一般慢慢擴(kuò)張。

這個過程聽起來或許科幻,但用來描繪推薦系統(tǒng),怕是再恰當(dāng)不過了。
推薦是一個協(xié)作與進(jìn)化的過程:
- 對于內(nèi)容而言,每一個用戶既是消費者又是決策者,被認(rèn)可的內(nèi)容得以進(jìn)一步擴(kuò)散,不被認(rèn)可的內(nèi)容被糾偏、不至于影響更多的人。
- 對于用戶而言,每一次行為反饋都在不斷完善自己的用戶畫像;而系統(tǒng)的興趣探索行為,也在進(jìn)一步給這幅畫像補充了更多維度。
大致了解推薦系統(tǒng)的架構(gòu),能夠幫助我們認(rèn)知到:信息是如何匹配給用戶的,而用戶的選擇又是如何影響后續(xù)的信息分發(fā)的。
作為一個工程問題,推薦系統(tǒng)的架構(gòu)與搜索系統(tǒng)的架構(gòu)具有一定的相似度:都做的是信息與用戶意圖之間的匹配。
搜索系統(tǒng)是將海量內(nèi)容與用戶表意明確的查詢相關(guān)聯(lián),推薦系統(tǒng)則是將海量內(nèi)容與用戶沒有明確表達(dá)的偏好相關(guān)聯(lián)。
如果我們將推薦問題極度簡化:用戶只有一個愛好“NBA”時,那么推薦引擎給用戶的結(jié)果就可以近似搜索引擎在“NBA”這個搜索詞下的結(jié)果。
那么,一個簡化的搜索架構(gòu)是什么?

離線部分,專注在內(nèi)容的搜集和處理上。
搜索引擎的爬蟲系統(tǒng)會從海量網(wǎng)站上抓取原始內(nèi)容,針對搜索體系的不同要求建立索引體系。在上圖中,為了新內(nèi)容能夠更好的被用戶看到,就專門建立了時效性索引數(shù)據(jù)用于存儲幾個小時之內(nèi)的新內(nèi)容。這是一個基于關(guān)鍵詞的倒排索引,每一個關(guān)鍵詞對應(yīng)一長串提及該關(guān)鍵字的文章。比如,“教育”這個詞命中文章1、2、3;“NBA”命中了另外一批文章1、2、4。
在線部分,負(fù)責(zé)響應(yīng)用戶的搜索,完成文章的篩選、排序并最終返回給用戶。
用戶輸入一個搜索詞“NBA”,這個詞匯會首先經(jīng)過搜索詞的處理(會經(jīng)過分詞、搜索詞變換等步驟),例如“NBA”和“美職籃”是同義詞,那么在兩個詞都可以應(yīng)用在索引的查詢。
經(jīng)歷完搜索詞處理后,進(jìn)入召回環(huán)節(jié)。系統(tǒng)會通過多種召回方式,從索引數(shù)據(jù)里獲得候選集合。在圖中,就分別查詢了全量的索引數(shù)據(jù)和時效性索引數(shù)據(jù),獲得了8篇文章的集合。
在召回的候選集之上,會進(jìn)行排序的步驟,通過進(jìn)一步計算獲得最終結(jié)果反饋給用戶,如圖中的文章10和文章1。
用戶的點擊反饋也會影響排序環(huán)節(jié)的模型。在上圖中,用戶在展示給他的兩篇文章中只點擊了文章10,這一特征會被模型記錄以統(tǒng)計文章10和文章1在搜索詞 “NBA”下的表現(xiàn)情況。
借由搜索系統(tǒng)為參考,可以更好的理解推薦系統(tǒng)。

離線部分,同樣需要通過各種方式來獲取待推薦的內(nèi)容(用戶提交、協(xié)議同步、數(shù)據(jù)庫導(dǎo)入等)。并依據(jù)推薦引擎處理的不同維度對這些內(nèi)容進(jìn)行索引處理,如話題、類目、實體詞等。在上圖中展示了兩個維度:分類維度和實體詞維度。
在線部分,其理亦然:量化用戶的請求,完成文章的篩選和排序。
推薦與搜索最大的差異,在于用戶表意的不明確性,故而,需要盡可能的完善用戶的長期畫像(對哪些類目、實體詞、話題感興趣)和短期場景(時間、地點),以此獲得用戶的意圖,從而進(jìn)行意圖和內(nèi)容的匹配。
- 當(dāng)用戶打開內(nèi)容推薦軟件時,提交給系統(tǒng)的信息如:時間、地理位置、網(wǎng)絡(luò)環(huán)境、手機(jī)設(shè)備型號、登陸用戶ID等。
- 基于用戶ID,推薦系統(tǒng)會取出用戶的畫像數(shù)據(jù)(User Profile)。在分類維度,用戶對體育和科技的內(nèi)容感興趣;在實體詞維度,對于NBA感興趣。
- 根據(jù)用戶的畫像信息,發(fā)起不同的召回過程(類目查詢和實體詞查詢),獲取各種類型的內(nèi)容構(gòu)成候選集合。
- 按照特定預(yù)估目標(biāo)(如點擊導(dǎo)向、互動導(dǎo)向)對候選集統(tǒng)一排序,并反饋給用戶。
值得注意的是:對于推薦系統(tǒng)而言,用戶的行為不僅具有針對內(nèi)容價值評估的群體投票意義(如:某篇關(guān)于NBA的文章,偏好NBA的用戶都不點擊,那么其在“NBA”這個實體詞下應(yīng)該權(quán)重降低)同樣具有針對自身畫像的個體進(jìn)化意義(如:用戶總是點擊有關(guān)于熱火隊的NBA文章,那么這個用戶的畫像中會補充“熱火”這個實體詞,影響后續(xù)他自己的推薦內(nèi)容流。)