你以為的推薦系統(tǒng),其實只是推薦模型
構(gòu)建推薦系統(tǒng)最大的入門難點之一是理解推薦系統(tǒng)如何在實際中應(yīng)用。
目前,關(guān)于推薦系統(tǒng)的網(wǎng)絡(luò)資料大部分關(guān)注的是推薦模型本身,而且僅限于介紹一些簡單的協(xié)同過濾(Collaborative Filtering)模型。對新手來說,只了解簡單的推薦模型并不足以讓他們構(gòu)建出一個真正能在實際生產(chǎn)中使用的推薦系統(tǒng)。
無論是簡單的協(xié)同過濾模型,還是DLRM等深度學(xué)習(xí)模型,推薦模型的作用都是對用戶可能感興趣的內(nèi)容進(jìn)行排序(Ranking),更準(zhǔn)確地說,是評分(Scoring)。但在現(xiàn)實場景中,光有評分并不足以實現(xiàn)良好的推薦效果。
本文將結(jié)合Meta、Netflix和 Pinterest 等公司的實例介紹一種構(gòu)建推薦系統(tǒng)的主流模式。 NVIDIA Merlin 團(tuán)隊認(rèn)為,這種模式是構(gòu)建端到端推薦系統(tǒng)的核心,并希望通過介紹這種模式,幫助你理解推薦系統(tǒng)(而不僅僅是推薦模型)如何應(yīng)用在實際生產(chǎn)中。
1.兩階段推薦系統(tǒng):檢索和評分
待推薦條目(items)越多,往往就會帶來問題。待推薦目錄中的內(nèi)容可達(dá)幾百萬項甚至數(shù)十億項,這時,針對每位用戶的喜好對每項內(nèi)容進(jìn)行評分并不現(xiàn)實。評分需要消耗巨大的算力。在實際操作中,系統(tǒng)通常只會從所有條目中快速選一個與用戶喜好相關(guān)的子集,給其中的1000或10,000項條目評分。
因此,推薦系統(tǒng)可分為兩個階段。在我們對條目進(jìn)行評分之前,我們需要選擇一個合理的相關(guān)合集,其中包含用戶最終將接觸到的條目,這個階段叫候選檢索階段(也叫候選生成),即選出用戶有可能感興趣的條目集。候選檢索模型有多種,包括矩陣分解模型(Matrix Factorization)、雙塔模型(Two-Tower)、線性模型、近似最近鄰模型(Approximate Nearest Neighbor)和圖遍歷模型(Graph Traversal)。它們的計算效率通常都比評分模型高得多。
2016年,Google發(fā)表了一篇關(guān)于YouTube推薦系統(tǒng)的論文( https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/45530.pdf ),這是有關(guān)候選檢索架構(gòu)最早的公開文獻(xiàn)之一,這個方法如今已被行業(yè)廣泛應(yīng)用。Eugene Yan對此也寫過一篇優(yōu)秀的文章( https://eugeneyan.com/writing/system-design-for-discovery/ ),他將推薦系統(tǒng)分為兩個階段(即候選檢索和評分),我們在此基礎(chǔ)上獲得啟發(fā),并將其細(xì)化為四個階段(下文將詳述)。
值得一提的是,在同一推薦系統(tǒng)中使用多種候選來源也是一種常見做法,這樣可以確保對用戶展現(xiàn)更多樣的候選條目,在此先按下不提。
2.過濾階段的必要性
雖然候選檢索和評分這兩個階段看似足以應(yīng)付大規(guī)模推薦任務(wù),但推薦系統(tǒng)還需支持另外一些限制條件。因為大多數(shù)情況下,總有一些你不希望展現(xiàn)給用戶的內(nèi)容,例如缺貨的商品、不適合用戶年齡層的內(nèi)容、用戶已看過的內(nèi)容和用戶所在國家未許可上線的內(nèi)容等。
與其讓評分或檢索模型來推理上述業(yè)務(wù)邏輯,以避開不能推薦的內(nèi)容,不如直接為推薦系統(tǒng)增加“過濾”(Filtering)階段。
過濾階段通常緊隨檢索階段之后,也可以與檢索階段結(jié)合(過濾階段最復(fù)雜的問題是確保檢索之后有足量的候選條目),有時甚至可以在評分階段結(jié)束后再過濾。通過過濾可以實現(xiàn)模型本身難以執(zhí)行的業(yè)務(wù)邏輯規(guī)則。有時,實行過濾只需簡單的排除查詢,有時則更復(fù)雜,例如用Bloom Filter篩掉用戶接觸過的內(nèi)容。
3.排序階段:Ranking or Ordering?
目前我們已介紹了三個階段:候選檢索、過濾和評分。經(jīng)過這三個階段,系統(tǒng)已選出相關(guān)推薦內(nèi)容并一一評分。每項條目的分?jǐn)?shù)代表評分系統(tǒng)估計的用戶感興趣程度。
推薦內(nèi)容通常以列表形式向用戶呈現(xiàn),這就帶來一個有趣的難題:最理想的推薦列表不能局限于系統(tǒng)的評分,還要保證一定的多樣性,為用戶展示一些他們平常不會接觸的內(nèi)容,幫助他們探索未知領(lǐng)域,避免陷入信息繭房。
部分文獻(xiàn)會把推薦系統(tǒng)的評分階段稱為“排名(Ranking)”,但給用戶的推薦列表中的最終排名(或位置)很少會直接對齊模型輸出的結(jié)果(譯注:比如推薦列表中排在末尾的內(nèi)容通常不是被模型評分最低的內(nèi)容)。而通過提供一個顯式的“排序(Ordering)”階段,我們能將推薦模型的評分和其他業(yè)務(wù)需求的限制條件進(jìn)行對齊。
4.推薦系統(tǒng)的四個階段和實例
候選檢索、過濾、評分和排序這四個階段構(gòu)成目前絕大部分推薦系統(tǒng)的設(shè)計模式。下圖展示了四個階段的如何訓(xùn)練、部署并支持推理時間查詢,應(yīng)用于實際生產(chǎn)的推薦系統(tǒng)比基本的推薦模型復(fù)雜得多。我們認(rèn)為下圖較準(zhǔn)確地呈現(xiàn)了當(dāng)今大多數(shù)實際推薦系統(tǒng)的構(gòu)建方法。
接下來讓我們看看推薦系統(tǒng)的實際應(yīng)用。首先,通過研究常見推薦任務(wù),我們發(fā)現(xiàn)以下用例都具有相似的模式,符合上述四個階段。
然后,我們可以分析現(xiàn)實中的推薦系統(tǒng),看看其中的各個步驟分別屬于哪一個階段。
Meta公司的Instagram團(tuán)隊曾發(fā)布一篇文章 Powered by AI: Instagram’s Explore recommender system (IGQL query language) ,介紹其開發(fā)的查詢語言(Query Language),它可以讓推薦系統(tǒng)的開發(fā)更加簡便。Instagram提供了如下例子,從中可見,這種查詢語言可以完全映射我們總結(jié)的四個階段。
Pinterest也有一系列關(guān)于推薦系統(tǒng)的論文: Related Pins at Pinterest:The Evolution of a Real-World Recommender System 、 Pixie: A System for Recommending 3+ Billion Items to 200+ Million Users in Real-Time 和 Applying deep learning to Related Pins 。下圖摘自上述第一篇論文,展示了Pinterest系統(tǒng)架構(gòu)的演變。同樣, Pinterest的推薦系統(tǒng) 總體也符合四個階段,只是候選檢索和過濾被整合為同一階段。
最后,Instacart在2016年公布了如下推薦架構(gòu)( http://slideshare.net/SharathRao6/recommendation-systems-instacart ),也符合我們所說的四個階段。首先是檢索候選商品,過濾用戶已購買的商品,然后對待推薦商品評分,最后對待推薦商品進(jìn)行重新排序,以增加展示條目的多樣性。
總之,實際的推薦系統(tǒng)比單獨的推薦模型復(fù)雜得多,而業(yè)內(nèi)新手在網(wǎng)絡(luò)上查到的推薦系統(tǒng)資料大部分都只介紹協(xié)同過濾模型,因此,當(dāng)他們真正著手構(gòu)建推薦系統(tǒng)時難免會一頭霧水。