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

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

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

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