推薦系統學習祕籍

本篇博客主要內容是對推薦系統進行詳細的概述及講解,對新手來說是非常適合的。


本篇文章主要內容包括推薦系統的相關概念推薦系統的架構和流程、常見的推薦算法挖掘召回排序評估總結這幾部分。

推薦系統本質上是解決 用戶、信息和環境的匹配,即,Y=F(Xi,Xu,Xc)Y = F(X_i, X_u, X_c)

推薦系統

推薦系統包括整體技術架構推薦系統架構推薦引擎架構

整體技術架構

在這裏插入圖片描述
從下往上依次爲數據的生產、存儲、候選集觸發,融合過濾重排序。重排序之後就是輸出的推薦結果,然後再供各業務調用,比如猜你喜歡等等。

推薦系統架構

整個推薦系統可以看作是一個加工廠,輸入用戶和物品數據,輸出用戶可能會感興趣的物品清單,然後從物品清單中取前若干個作爲推薦結果給到用戶。

在這個過程中還需要做一些過濾,排序工作,輸出結果的時候最好能讓用戶知道爲什麼推薦這個東西,這樣用戶的接受度會高一些。
在這裏插入圖片描述
比如已經產生了一個用戶可能感興趣物品的Top100,之後需要把用戶已經買過的東西過濾掉。

然後再基於用戶的一些歷史行爲進行排序,比如經常看的東西權重高一些,很久之前看的東西權重低一些,最終排一個名次,再按照排序名次取前10個展示給用戶。

這個過程就需要依賴於很多推薦引擎,簡單理解就是會很多個推薦人,各自負責推薦一些候選結果。

推薦引擎架構

推薦引擎整體可以分爲四部分,分別是

  • 用戶特徵
  • 物品候選集
  • 用戶-物品匹配
  • 過濾、融合和排序
    在這裏插入圖片描述

用戶特徵部分做的事情主要是將用戶的行爲數據(點擊、瀏覽、購買等)和屬性數據(人口屬性、用戶關係、興趣愛好等)轉化爲對應的特徵,供用戶-物品匹配部分利用。

物品候選集就是需要給用戶匹配的物品,通常也需要轉化爲對應的物品特徵。

有了物品特徵和用戶特徵之後,需要做的就是生成用戶-物品的初始化推薦列表。

再之後就是基於初始推薦列表的一些處理,過濾掉一些東西,按照用戶的行爲反饋、物品屬性和一些產品策略再進行列表順序的調整,生成最終的推薦結果。

通用推薦流程

理論上推薦流程可以分爲挖掘 -> 召回 -> 排序這幾部分。

挖掘就是用戶特徵和物品特徵的生成部分,這部分做好了,後面的推薦結果纔會有好的效果。

召回就是從原始數據集中基於種種策略先挑選一部分物品,這部分需要儘可能全的覆蓋用戶需求,通常會把十萬甚至百萬級的候選集過濾到數百量級。

排序就是針對召回的數百個物品進行更深層次的加工,優先選擇若干個結果推薦給用戶,通常數量在數十級。

以上是理論上的流程,然而實際上每個部分都比較複雜,而且也不僅僅只有一個模型,通常情況下都會有N多模型,不同的模型用到的可能是不同的算法和策略。

常見推薦算法

基於流行度的推薦
基於內容的推薦
近鄰推薦
基於用戶的協同推薦
基於物品的協同過濾
矩陣分解
基於關聯規則的推薦
基於圖模型的推薦
深度學習
混合推薦

挖掘

挖掘也就是通常說的特徵工程,有效的特徵和特徵組合直接決定着後續推薦結果的好壞。

特徵工程整體流程大致可以分爲特徵清洗、特徵預處理、特徵處理和特徵監控這幾部分。

特徵清洗主要是將一些異常樣本進行清洗,對一些樣本進行採樣。

特徵預處理主要是對單個特徵類型的一些轉換,同時對異常值、缺失值進行處理,此外還有對多個特徵的降維、選擇。

特徵處理主要是對特徵進行離散、平滑、組合、聚合等處理,以達到更好的效果。

特徵監控一方面是對特徵的有效性進行分析,看特徵是否真的有效,另一方面是監控特徵的重要性是否有變化,避免影響模型效果。

召回

通常情況下候選集的數量可能有十萬,百萬甚至千萬的量級,這種情況下如果直接計算用戶相似度或者物品相似度的話,複雜度會非常高,成本也會非常大。

召回這個環節的主要任務就是從大規模的候選集中初步篩選出來一部分內容,供後續的排序環節使用,所以這個環節需要覆蓋很廣很全的範圍。

召回的觸發機制主要是基於用戶特徵和環境特徵,比如用戶畫像相關、興趣相關、行爲相關、上下文相關等,此外還有一些運營規則和產品策略,比如熱門、特定類型提權、降權等。

常見的召回策略包括上文算法部分的那些算法,以及一些其他策略,比如基於熱門、內容、協同過濾、關聯規則、圖模型、地理位置、時間、用戶關係等的召回策略…

有了初步的召回集之後,就可以考慮一些過濾規則了,比如過濾掉用戶曾經購買過、明確表示過不喜歡的物品或者已經失去了時效性的物品等。

如果候選集較小,可以考慮在生成候選集之後就進行過濾,如果候選集較大,可以考慮在初始推薦列表中再過濾掉不該在候選集中的物品。

排序

按照排序類型來劃分的話,排序可以分爲粗排和精排,按照目標來劃分的話,排序可以分爲單目標排序和多目標排序。

單目標和多目標倒還好理解一些,畢竟不同的目標需要的模型和策略可能是不同的,那爲什麼類型又區分成粗排和精排。

主要可以分爲兩方面的原因,一方面大多數用戶其實消費不了那麼多內容,我們精心爲用戶準備了Top100的內容,大多數情況下用戶可能只消費10條內容,那90條內容的工作量可能就浪費了。

另一方面排序的核心任務是對召回集給出的結果進行精準的排序,需要兼顧很多模型和特徵,這就需要在效率、成本和性能之間做平衡了。

基於這兩點原因,將排序又分爲了粗排和精排兩個階段。

粗排階段處理的物品數量在數百級,主要負責對召回的物品進行打分,也可以理解爲用戶的感興趣程度。

精排階段處理的物品在數十級,同時還會有一些產品規則方面的考慮,比如對於多樣性、新穎性、興趣探索方面的考慮,以及對於特定內容的加權、過濾或者強制隔離等。

單目標排序比較常見的是CTR(點擊率)預估,當然這個C並不一定只能是Click,也可以是其他任何行爲。

比如視頻是不是會看完,看完後是不是會收藏,是不是會分享到第三方平臺,查看的商品是不是會購買等,這些都可以看成那個可以被預估發生概率的CTR。

多目標顧名思義就是在排序階段希望能夠滿足多個目標,比如視頻的點擊率+停留時長+完播率,電商的點擊率+購買率+客單價。

知乎的排序模型就是一個多目標模型,有基於點擊率的模型,基於收藏率的模型,基於點贊率,基於評論率等一共8個目標。

排序模型一般用目標值和AUC來進行衡量,目標值就是排序模型最開始的目標,點擊率、停留時長、購買率等。

AUC全稱是Area Under Curve,意思是曲線下的面積,這裏的曲線就是ROC曲線,這個值在數學上等價於模型把關心的那一類樣本排在其他樣本前面的概率。

AUC最大是1,完美結果,0.5就是隨機排列,0就是完美地全部排錯,當然0也可以變成1,效果最差的其實是0.5左右的。


本篇博客主要學習了https://mbd.baidu.com/newspage/data/landingshare?pageType=1&isBdboxFrom=1&context=%7B%22nid%22%3A%22news_10588581899440001861%22%2C%22sourceFrom%22%3A%22bjh%22%7D這篇文章,非常感謝。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章