一、概述推薦系統
推薦系統的目標是給用戶推薦喜歡或者需要的內容,做好推薦系統從宏觀上看就是要做好如下三點:
- 深入理解用戶,包括用戶的基本屬性,社會屬性、行為屬性等,從而知道用戶喜歡什么,需要什么
- 對資源的刻畫,將資源的信息充分挖掘提煉出來
- 選擇適合業務場景的策略與模型,將用戶和資源實現最佳匹配,這部分屬於推薦系統的核心,也是推薦系統演進的動力所在
二、推薦系統架構
召回:主要根據用戶部分特征,從海量的資源庫里,快速找出用戶潛在感興趣的物品,然后交給排序環節。
粗排:有時候召回返回的物品數量比較多,所以加一個粗排,只用物品和用戶的少量特征構建一個簡單模型,在保證一定精准的前提下,進一步減少往后傳送的物品數量,粗排往往是可選的,更業務場景有關系。
精排:用你能想到的任何特征,可以上你能承受速度極限的復雜模型,盡量精准地對物品進行個性化排序。
重排:去已讀、去重、打散、多樣性保證、固定類型物品插入等等,主要以產品策略主導或者為了改進用戶體驗的。
根據上面的邏輯處理環節,對應的工業級推薦系統大概如下圖:
資源池:存儲各種類型的海量資源,一般由數據庫存儲,如 mysql、hive、redis 等
標簽生成:對資源更多維度的結構化刻畫。比如:類別標簽、主題、關鍵詞、質量分等
特征表示:對資源進行更細粒度的特征表示,比如文本的字數,閱讀量,點擊率等,這些特征可以帶入模型。
索引:對資源的各類標簽、關鍵詞建立倒排索引,及相似向量檢索引擎等。
用戶畫像:用戶屬性及根據用戶的歷史行為給用戶打的標簽
離線模型:對用戶歷史行為日志進行清洗、加工,整理成離線訓練數據,並周期性地更新推薦模型
實時模型:實時收集用戶行為反饋,並選擇訓練實例,實時抽取拼接特征,並近乎實時地更新在線推薦模型。這樣用戶的最新興趣能夠近乎實時地體現到推薦結果里。
三、召回
工業界推薦系統中的召回怎么做呢,還是有挺多花式召回策略的。主要可以分為兩大部分:1)經典的多路召回策略,2)基於embedding的模型召回
1、多路召回
目前工業界推薦系統在召回階段,大部分還是采用了多路召回策略,尤其是資源比較少的小企業內,因為比較容易搭建起來,且靈活度高,隨時可以增加一路或者去掉一路。比如典型的召回路有:基於用戶興趣標簽的召回;基於協同過濾的召回;基於熱點的召回;基於地域的召回;基於Topic的召回;基於命名實體的召回等等,除此外還有很多其它類型的召回路,少則7/8路,多則幾十路召回也有。
這里面的一個難點就是每一路召回的K怎么設定,因為每個用戶對每一路的興趣程度肯定是不一樣的,所以統一設定顯然會不合理,其實K也可以理解為超參數,通過A/B TEST來確定合理的取值范圍,或者每個用戶都有一個相關k的個性化配置。
2、基於embedding的模型召回
如何在召回階段利用模型來代替多路召回呢?下圖展示基於模型召回的一個通用架構:
核心思想:
在線下,將用戶特征和物品特征分離,各自通過某個具體的模型,分別生成用戶Embedding以及物品Embedding;在線上,可以根據用戶興趣Embedding,采用類似Faiss等高效Embedding檢索工具,快速找出和用戶興趣匹配的物品,這樣就等於做出了利用多特征融合的召回模型了。理論上來說,任何你能見到的有監督模型,都可以用來做這個召回模型,比如FM/FFM/DNN等,常說的所謂“雙塔”模型,指的其實是用戶側和物品側特征分離分別打Embedding的結構而已,並非具體的模型。
模型召回的優勢:
相比多路召回,超參數k的問題解決了,模型召回基於訓練效果,在各個路上的召回數量是具有用戶個性化的。因為模型訓練的時候,能夠根據用戶的個人基本信息和歷史行為數據,充分挖掘其興趣的的差異,所以在模型召回的時候,就體現出差異了。
模型召回的問題和注意點:
模型召回可能存在召回的物料基本都是頭部領域的情況,過於集中,體現不出長尾的物品。解決這個問題的方法包括比如訓練數據對頭部領域的降采樣,減少某些領域主導,以及在模型角度鼓勵多樣性等不同的方法。另外一點值得注意的是:如果在召回階段使用模型召回,理論上也應該同步采用和排序模型相同的優化目標,尤其是如果排序階段采用多目標優化的情況下,召回模型也應該對應采取相同的多目標優化,這樣才能保證是前后一致的。
3、embedding召回的模型設計
基於embeddeing的模型召回,最核心的就是設計什么樣的模型來給用戶和物品打embedding呢?方式方法有不少,因業務場景而已,如上面所說的利用FM、FFM、DNN都可以。下面介紹幾種經典的方式:
1)基於用戶行為序列
用戶在APP上或者網站上瀏覽商品的時候,會產生一系列的行為痕跡,比如點擊了某個物品、收藏了物品、購買了物品,這幾個行為就代表了用戶的一定興趣程度差異,收藏和購買的興趣程度就大一些。這種興趣表征,是細粒度的用戶興趣,對於刻畫用戶興趣具備特別的價值。利用用戶行為過的物品序列,來表征用戶興趣,具備很好的實用價值。
用戶行為序列中的物品,是有時間順序的。理論上,任何能夠體現時序特點或特征局部性關聯的模型,都比較適合應用在這里,典型的比如CNN、RNN、Transformer等,都比較適合用來集成用戶行為序列信息。而目前的很多試驗結果證明,GRU(RNN的變體模型)可能是聚合用戶行為序列效果最好又比較簡單的模型。具體如何根據用戶行為序列打embedding,可以采取有監督的模型,比如Next Item Prediction的預測方式即可,如下圖:
參考論文:Self-Attentive Sequential Recommendation
也可以采用無監督的方式,比如物品只要能打出embedding,就能無監督集成用戶行為序列內容,例如Sum Pooling。
2)用戶興趣拆分
上部分說到依據用戶對物品的行為序列,構建模型打出統一的embedding,但是用戶的興趣卻是多樣的,比如既對足球感興趣,又對排球感興趣,同時又喜歡歷史劇,如果都捏合到一起,打一個embedding顯然會導致行為多的類別興趣占主導,甚至淹沒行為少的類別興趣點。這樣在召回的時候,就可能集中在頭部優勢領域中,造成弱勢興趣不太能體現出來的問題。而如果把用戶興趣進行拆分,每個興趣embedding各自拉回部分相關的物料,則可以很大程度緩解召回的頭部問題。所以這種興趣拆分,在召回階段是很合適的,可以定向解決它面臨的一些實際問題。對於排序環節,是否有必要把用戶興趣拆分成多個,我倒覺得必要性不是太大。
而對於多用戶興趣拆分來說,需要多做些事情,多做什么事情呢?本質上,把用戶行為序列打到多個embedding上,實際它是個類似聚類的過程,就是把不同的Item,聚類到不同的興趣類別里去。目前常用的拆分用戶興趣embedding的方法,主要是膠囊網絡和Memory Network,如下圖:
參考論文:Multi-Interest Network with Dynamic Routing for Recommendation at Tmall
但是理論上,很多類似聚類的方法應該都是有效的,所以完全可以在這塊替換成你自己的能產生聚類效果的方法來做。
3)圖神經網絡做召回(GNN)
圖神經網絡中的節點是各種不同類型的物品及用戶,邊往往是通過用戶行為建立起來的,可以是具體用戶的具體行為,也可以是所有用戶的群體統計行為,比如物品1->物品2可以有邊,邊還可以帶上權重,如果越多的用戶對物品1進行行為后對物品2進行行為,則這條邊的權重越大。在統計層面來看,這本質上是一種協同信息,比如我們常說的“A物品協同B物品”,本質上就是說很多用戶行為了物品A后,大概率會去對物品B進行行為;所以圖具備的一個很好的優勢是:它比較便於把協同信息、用戶行為信息、內容屬性信息等各種異質信息在一個統一的框架里進行融合,並統一表征為embedding的形式,這是它獨有的一個優勢,做起來比較自然。另外的一個特有優勢,就是信息在圖中的傳播性,所以對於推薦的冷啟動以及數據稀疏場景應該特別有用。而且對於用戶或者物品來說,其屬性也可以體現在圖中,比如對於一個微博,它的文本內容、圖片內容、發布者等等屬性都可以引入到圖中。
圖神經網絡,最終獲得的是圖中節點的embedding,這個embedding,就像我們上面說的,其實融合了各種異質信息。所以它是特別適合用來做召回的,比如拿到圖網絡中用戶的embedding和物品embedding,可以直接用來做向量召回。當然,物品和用戶的embedding也可以作為特征,引入排序模型中,這都是比較自然的。
參考論文:Session-based Recommendation with Graph Neural Networks
四、排序模型的發展
最早的LR模型,基本是人工特征工程及人工進行特征組合的,簡單有效但是費時費力;再發展到LR+GBDT的高階特征組合自動化;接着是FM 簡潔優雅地實現了二階特征組合,FM 模型也直接引入任意兩個特征的二階特征組合,但對於每個特征,學習一個大小為 k 的一維向量,兩個特征 Xi 和 Xj 的特征組合的權重值,通過特征對應的向量 Vi 和 Vj 的內積<Vi , Vj>來表示。這本質上是對特征進行 Embedding 化表征,和目前常見的各種實體 Embedding本質思想是一樣的。特征組合對於推薦排序是非常重要的,DNN 模型一樣離不開特征組合這個特點,但 MLP是種低效率地捕獲特征組合的結構,所以排序相關的深度模型,基本都具有類似 FM 組合特征的部分。
在 DeepFM 和其他深度模型的實踐中,比較容易犯的錯誤是不考慮特征組成和樣本數量,直接暴力增加模型復雜度,從而導致訓練時間驟增、模型文件變大和線上的預測時間更久,最終引起推薦系統服務超時。如果特征數量少、特征工程完善和樣本選取合理,使用簡單的深度學習模型反而能夠達到更好的效果。
排序模型可以參考:深度CTR預估模型的演化之路2019最新進展
五 、A/B 實驗
在機器學習領域中,AB 實驗是驗證模型最終效果的主要手段。進行 AB 實驗的主要手段是進行用戶分桶,即將用戶分成實驗組和對照組,對實驗組的用戶施以新模型,對照組的用戶施以舊模型。在分桶的過程中,要注意樣本的獨立性和采樣方式的無偏性,確保同一個用戶每次只能分到同一個桶中,在分桶過程中選取 DeviceId 必須是完全隨機的,這樣才能保證桶中的樣本是無偏的。實驗組和對照組的划分必須是在相同的約束條件下隨機選取 DeviceId。比如可以分別設置2%、5%、10%三組A/B實驗,每一組的實驗組用戶和對照組用戶都必須是完全隨機且數量相等。
參考文獻:
https://zhuanlan.zhihu.com/p/100019681
https://zhuanlan.zhihu.com/p/58160982
https://blog.csdn.net/sinat_26811377/article/details/104559739
https://blog.csdn.net/m0_37586850/article/details/104981089?utm_source=blogxgwz7