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