深入淺出推薦系統:一文帶你解讀推薦系統的核心設計思路
下面這篇文章是筆者整理分享的關于推薦系統的核心設計思路的相關內容,想要了解或者對推薦系統感興趣的同學可以進來看看哦!相信你會收獲到你想要的知識。
本文約5000字,閱讀需15-20分鐘。但筆者非常有信心,如果你之前對推薦系統的了解不多或知識零散,認真讀完這篇文章,一定會讓你收獲頗多。
打開手機,推薦無處不在。甚至,你之所以看到這篇文章也可能來自推薦。
寫推薦的文章很多,但對于非技術背景的人,閱讀門檻往往較高,因為文章里可能有大量的公式、構架等,讓人望文卻步。
但一個好的推薦系統,除了技術本身,還需要非技術人員賦予它可靠的數據以及深入的業務理解,因此非技術人員也得懂推薦系統。懂到什么程度呢?懂到你和項目干系人不會因為在推薦系統上的認知差異而無效溝通即可。
筆者認為要想了解推薦系統,可以從以下兩個部分入手:
a、推薦系統是為了解決什么問題而存在?即推薦系統的核心設計思路,也是本文的重點,不會涉及任何的公式;
b、解決對應問題的方案,包括常見的系統構架、算法、評估方式,筆者會在闡述1的過程中進行提及,但不會展開介紹,有需要或感興趣的讀者可自行擴展閱讀。文章末尾也會為大家推薦相關書籍和博主。
一、推薦系統核心設計思路
推薦系統最早應用在20世紀90年代,至今已30年,但推薦系統真正在國內被廣泛關注是在今日頭條上線的2012年之后。
一方面,移動互聯網的信息嚴重過載,在用戶弱目標的情況下,如何為用戶匹配感興趣或有用的物品成為了主流訴求,而這正是推薦系統的價值所在;另一方面,移動互聯網數據的豐富性、可記錄性為推薦系統的發展提供了基礎。
筆者認為,推薦系統的核心思路其實非常簡單,即如何通過已有數據資源,為目標用戶u找到更好/足夠好的物品i且將物品i更有效得呈現?;诖耍覀冃枰M一步思考4個問題:
a、我的平臺有哪些數據資源?
b、更好/足夠好的物品標準是什么?
c、如何找到更好/足夠好的物品?
d、找到更好/足夠好的物品后,如何將它們高效得呈現在用戶面前?
(Tips:可以短暫停頓思考下…)
下面我們對這4個問題逐一展開:
1.?我的平臺有哪些數據資源?
由于目標是為用戶找物品,可以分別從物品、用戶兩個維度來盤點平臺數據資源。
(1)用戶維度
a、用戶本身自有的畫像數據,比如用戶性別、年齡、常居城市、職業類型等。平臺獲取這類數據的途徑一般是通過讓用戶授權來收集或者基于用戶在平臺的行為進行推測;
b、用戶在其他平臺產生的數據,比如社交關系等。一般是通過和其他平臺合作且讓用戶授權后進行收集;
c、用戶因為使用了平臺而產生的平臺獨有數據,比如用戶ID、用戶訪問次數、訪問時間等。這類數據由平臺實時記錄;
(2)物品維度
a、物品屬性數據,比如在視頻內容平臺,視頻的時長、標題、分類、來源等。這類數據一般在物品創建完成時產生,或者從外部導入的物品,在同步過來后對相關屬性數據進行二次加工;
b、物品在其他平臺下被用戶消費所產生的數據,比如視頻播放量等,在同步過來后也是對相關數據進行適配加工;
c、物品在平臺下被用戶消費所產生的數據,比如在電商平臺,商品的瀏覽量、訂單量、成交額等。和上面用戶維度C一樣,這類數據也由平臺實時記錄。
2.?“更好/足夠好”的物品標準是什么?
首先我們需要搞清楚誰來當這個裁判員?是平臺還是用戶?
從推薦系統的思路來看,這里的裁判員只能是用戶,而平臺更像是為了讓裁判員給高分,不斷挑選、訓練運動員的教練。
因此推薦系統推的物品是好還是壞,最終均是由用戶行為指標來評價的,比如在電商平臺可能是點擊率、GMV轉化;在內容平臺,可能是點擊率、停留時長。
另外需要說明的是,在評價指標里,大家往往會看到部分看似與用戶行為不掛鉤的指標,比如物品新穎性、多樣性,一來這類指標并不會作為最核心的評價指標,一般僅作為輔助;二來這類指標屬于平臺的生態指標,更側重于長期價值,其設計初衷也是為了維持更長久的用戶行為。
3.?如何找“更好/足夠好”的物品
在盤點完數據資源、確定評價指標后,我們來仔細盤一盤平臺如何給用戶匹配物品的問題。
我們先做個簡單任務。現在有一個房間,房間里有若干物品,待會兒會進來一個人,你的任務就是給這個人找到他喜歡的一個物品。為了完成這個任務,你會做些什么?
你可能會:a、去逐個了解這個房間里的物品;b、等這個人進來和他溝通,去了解他的喜好;c、把你認為他可能喜歡的那個物品給到他。
現在任務難度升級?,F在有一個屋子,屋子里有上百萬、千萬、甚至上億的物品,屋子有多個門,以及若干個房間,隨時有大量的人涌進來,然后逛不同的房間。你的任務是在每一個人進來房間后給他找到他喜歡的物品。為了完成這個任務,你會做些什么?
這個任務的難點在于,物品和人太多,如果還像簡單任務那樣,逐個去了解匹配,那等你完成任務,房間里的人都成仙了。因此我們需要提前設計好讓物品和人匹配的自動化程序,等人一來,程序一轉,誒~物品就出來了。
由于是等人來了,程序再轉出物品,因此在匹配路徑上是用戶在前,物品在后。目前主流的推薦系統,共4條匹配路徑:用戶——>物品、用戶—>“物品”—>物品、用戶—>“用戶”—>物品、用戶—>概念—>物品。下面逐個展開介紹。
(1)用戶——>物品
非個性化匹配路徑,某個用戶群體里的所有用戶看到的推薦物品列表一致。平臺主要是將物品按照熱門、最新、高質量等規則進行排序得出。這種方案所需數據資源少,系統程序簡單,比較適合冷啟動階段。
(2)用戶—>“物品”—>物品
該路徑中間加入了“物品”,該“物品”與用戶有某種關聯的關系,最常見的就是用戶消費過該“物品”?;谶@個關系,又可以延伸出兩種常見的匹配方式:
a、讓物品等于“物品”,即給用戶推薦他曾經消費過的物品。這種方案雖然簡單,但使用場景有限,僅在生鮮電商、音樂這類需重復消費同一物品的平臺使用較多;
b、讓物品相似于“物品”,即給用戶推薦他曾經消費過的相似物品,這里涉及相似度的計算(余弦相似度、jaccard定理),感興趣可進一步了解基于物品的協同過濾(Item-CF)。這種方案系統程序不算復雜,偏統計計算。另外這種方案下,由于會不斷得給用戶推薦他感興趣的相似且不重復的物品,因此適合物品豐富且用戶個性化需求強烈的平臺,比如電商和內容平臺;
(3)用戶—>“用戶”—>物品
該路徑中間加入了“用戶”,該“用戶”與用戶有某種關聯的關系,常見有:
a、用戶和“用戶”是好友關系,即給用戶推薦他的好友消費過/生產的物品,比如微信視頻號在冷啟動階段就是側重使用了這一方案;
b、用戶和“用戶”是關注關系,即給用戶推薦他的關注的賬號消費過/生產的物品,這種方案在內容、社區平臺使用廣泛;
c、用戶和“用戶”是相似關系,即給用戶推薦與他相似的用戶消費過的物品,這里也涉及相似度的計算,感興趣可進一步了解基于用戶的協同過濾(User-CF)。這種方案下,由于是提前計算好用戶之間的相似性,只要新物品一旦被某個用戶消費,該物品就會立即被推薦給其他相似用戶,對新物品非常友好,因此適合物品更新速度快且用戶個性化需求不那么強烈的平臺,比如新聞類平臺。
(4)用戶—>概念—>物品
該路徑中間加入了概念,這里的概念是從用戶或物品中提取出的抽象的東西,常見有:
a、標簽,是一種業務上可解釋的概念,比如某個長視頻帶有綜藝、沈騰、喜劇等標簽。前期一般由人工對物品進行提取,當積累一定數據量后也可由機器學習自動提取。然后如果某個用戶經常消費某個標簽的物品,那該用戶也會通過數據統計的方式,被打上該標簽偏好,于是會給用戶推薦他所偏好的標簽物品。這種方案和前面的物品相似于“物品”其實是同一種思想;
b、向量,是一種業務上不可解釋的概念。前面提到的“物品”、“用戶”、標簽,都是為了讓用戶和物品之間建立關系。從技術的角度,也可以基于歷史的用戶行為數據,為用戶和物品之間構建關系,只是中間的這個連接點由隱向量K來完成(Embedding、隱向量模型/隱語義模型(LFM)/矩陣分解模型、雙塔模型)。相比前面提到的方案,這種方案能在一定程度上解決用戶-物品矩陣數據稀疏的問題,但核心思想一致;
c、特征,是一種業務上可解釋的概念。特征和標簽的主要區別在于,標簽更多是刻畫物品和用戶的靜態屬性,而特征是萬物皆可刻畫,你可以這樣理解,只要是平臺的數據資源,均可轉化成特征,比如單特征(靜態屬性、請求屬性、畫像)、衍生特征(占比、轉化率)、交叉特征(交叉特征有時是為了拓寬特征量,不一定具有業務意義)、實時特征(接口入參)。
那特征可以用來干什么呢?編碼后的特征值可以做為入參來生成預測模型(邏輯回歸、決策樹算法、深度學習),預測前面提到的所有用戶核心指標,比如點擊率、轉化率、停留時長等。這種方案在系統程序上最復雜,數據資源要求也非常高,但效果也是最佳的。
另外,匹配路徑的效果評估,除了上線后看用戶的行為指標外(裁判員給分),也需要在上線前評估這些路徑的效果(教練員給分)。以上所提到的協同過濾、隱語義模型、邏輯回歸等均屬于分類任務,針對分類任務,常見的離線效果指標有混淆矩陣(召回率、精準率、準確率)、AUC等。
4.?找到“更好/足夠好”的物品后,如何更有效得呈現在用戶面前
為用戶找到物品,任務還遠沒有結束。我們前面完成的任務是:在每一個人進來房間后給他找到他喜歡的物品。但是,找多久呢?物品呈現足夠清晰嗎?用戶拿取方便嗎?等。畢竟評價推薦系統的核心指標是用戶行為,我們所有的設計需要為相關指標的達成所服務。
這里展開談談找多久的問題。移動互聯網用戶體驗的及格線大致0.5秒,也就是等人一來,程序最多只能轉0.5秒,就得把物品給出來。
在前面提到的匹配路徑,我們說到特征那里效果是最好的,但是由于其模型復雜,如果只采用這個方案,等程序轉出來,用戶早就對你say byebye了。因此,為了保證效果,又保證程序轉得快,構架采用了召回層——>粗排層——>精排層的方式來進行。
其中可以提前離線算好或者系統性能耗時少的,比如規則類、協同過濾類、向量模型類,就放到召回層,它們作為多路召回(主路、旁路),負責相關性的計算,且各路有個召回的數量目標,讓總物品量從萬量級篩選到千量級甚至更少;
然后再用相對簡單一點的模型,或者直接對前面多路召回的物品結果歸一化后截斷進行粗排,從千級篩選至百級甚至更少;
最后再用復雜但準確的模型,對這百級物品進行排序。由于模型復雜,光是減少計算的物品還不夠,在前面提到的模型是通過編碼后的特征入參來生成的,因此特征選擇非常重要,特征越多,計算耗時越高,所以需要選擇有效特征讓模型有增益。另外前面也提到特征的分類,可以將非實時的特征在離線入參,計算出超參數,在某用戶進入對應推薦場景時,超參數由于離線已經算好,只需要將該用戶的實時特征進行入參計算。
所以總結下來,為了保證耗時:
a、用耗時少的路徑先篩選,減少計算的物品量級;
b、有效的特征選擇;
c、離線計算好超參數;
另外在構架里,還往往能看到重排層、過濾層,以及在召回、粗排、精排層里出現的保送。其中重排層是為了全局最優、過濾層和保送都是業務干預。感興趣的讀者也可自行拓展了解。
二、擴展閱讀推薦
1.? 書籍推薦
關于推薦系統相關的書籍,我目前只推薦兩本。
《推薦系統實踐》,作者項亮,豆瓣評分8.1。算是我入門推薦系統的一本書,當時讀完腦袋里只有一些雛形,但是對于的整體的框架還是無法清晰建立。個人建議是有一定基礎后再去閱讀;
《策略產品經理——模型與方法論》,作者青十五,豆瓣評分8.3。這本書我是今年讀的,作者是算法出身,書里作者一直非常強調將問題模型化,個人認為前面部分收獲蠻多,后面部分有些湊字數,但整體還是值得一讀。是目前帶有“策略產品經理”字樣里最好的一本了。
2. 博主推薦
KingJames
賬號在知乎和人人都是產品經理平臺,也是算法出身,相比前面的書籍,更加通俗易懂,而且結合了業務場景。除了推薦搜索專題,還有專門的AI、機器學習專題。他的自我介紹里有這樣一句——“最擅長給小白深入淺出介紹AI &機器學習知識的博主”。他也有一本策略產品經理的書籍正在出版中,還是比較期待的。
以上便是筆者對推薦系統的核心思路的解讀,由于經驗有限,不嚴謹的地方歡迎指正和探討。本篇側重于推薦系統的理論科普,下一篇筆者會以UGC社區為例進行推薦系統的實戰介紹,歡迎關注~
本文由@wen 原創發布于人人都是產品經理,未經許可,禁止轉載。
題圖來源于Unsplash,基于CC0協議
該文觀點僅代表作者本人,人人都是產品經理平臺僅提供信息存儲空間服務。
老師寫的真好,很通俗易懂
想入門有什么推薦的書籍呀,作者大大!
建議你可以看看B站UP主ShusenWang的視頻
期待下一篇~~