本文的主要内容是推薦系統相關的東西,會涵蓋推薦系統相關的大部分知識點,對于非技術人員應該是能基本了解推薦系統了。
建議Mark之後慢慢看,畢竟文章有點長,而且第一遍也不一定能看懂…
本文主要包括推薦系統的相關概念、推薦系統的架構和流程、常見的推薦算法、挖掘、召回、排序、評估和總結這幾部分。
概念部分會簡述推薦系統相關的理論知識,架構和流程主要是介紹推薦系統的通用架構和常規的推薦流程。
算法部分主要是一些常見的推薦算法介紹,挖掘》召回》排序主要是基于推薦流程的詳細展開。
評估部分指的是如何評估一個推薦系統的好壞,總結部分主要是整體内容的回顧,以及一個真實推薦系統的案例。
可以按照個人興趣直接跳至對應的小節浏覽,也可以按照順序進行閱讀,遇到看不懂的部分建議先跳過,遇到讀不下去的情況,建議先Mark…
以下,開始正文部分。
推薦系統的相關概念
從下往上依次為數據的生産、存儲、候選集觸發,融合過濾重排序。重排序之後就是輸出的推薦結果,然後再供各業務調用,比如猜你喜歡,看了又看,買了又買…
推薦系統架構
整個推薦系統可以看作是一個加工廠,輸入用戶和物品數據,輸出用戶可能會感興趣的物品清單,然後從物品清單中取前若幹個作為推薦結果給到用戶。
在這個過程中還需要做一些過濾,排序工作,輸出結果的時候最好能讓用戶知道為什麼推薦這個東西,這樣用戶的接受度會高一些。
比如已經産生了一個用戶可能感興趣物品的Top100,之後需要把用戶已經買過的東西過濾掉。
然後再基于用戶的一些曆史行為進行排序,比如經常看的東西權重高一些,很久之前看的東西權重低一些,最終排一個名次,再按照排序名次取前10個展示給用戶。
要實現這個效果,就需要依賴于很多推薦引擎,簡單理解就是會很多個推薦人,各自負責推薦一些候選結果。
推薦引擎架構
單個推薦引擎和整體推薦架構沒什麼特别大的差異,無非是推薦引擎先自己走一遍推薦流程,把輸出的推薦結果作為新的輸入部分,再走一遍推薦流程。
推薦引擎整體可以分為四部分,分别是用戶特征、物品候選集、用戶-物品匹配、過濾、融合和排序。
用戶特征部分做的事情主要是将用戶的行為數據(點擊、浏覽、購買等)和屬性數據(人口屬性、用戶關系、興趣愛好等)轉化為對應的特征,供用戶-物品匹配部分利用。
物品候選集就是需要給用戶匹配的物品,通常也需要轉化為對應的物品特征。
有了物品特征和用戶特征之後,需要做的就是生成用戶-物品的初始化推薦列表。
再之後就是基于初始推薦列表的一些處理,過濾掉一些東西,按照用戶的行為反饋、物品屬性和一些産品策略再進行列表順序的調整,生成最終的推薦結果。
通用推薦流程
上面主要是一些架構相關的東西,這部分主要是如何生成推薦結果。
理論上推薦流程可以分為挖掘》召回》排序這幾部分。
挖掘就是上面說的用戶特征和物品特征的生成部分,這部分做好了,後面的推薦結果才會有好的效果。
召回就是從原始的數據集中基于種種策略先挑選一部分物品,這部分需要盡可能全的覆蓋用戶需求,通常會把十萬甚至百萬級的候選集過濾到數百量級。
排序就是針對召回的數百個物品進行更深層次的加工,優先選擇若幹個結果推薦給用戶,通常數量在數十級。
以上是理論上的流程,然而實際上每個部分都比較複雜,而且也不僅僅隻有一個模型,通常情況下都會有N多模型,不同的模型用到的可能是不同的算法和策略…
常見的推薦算法
這部分主要是一些常見算法的簡單介紹,篇幅有限不詳細展開,之前寫過一篇算法相關的文章,感興趣的可以看一下。
産品經理必知的推薦算法二三事
基于流行度的推薦
其實就是我們通常說的熱門,基于最高評分、最多購買、最多下載、最多觀看等維度給用戶進行推薦。
通常情況下可以作為冷啟動策略或者兜底的策略,前者是用戶剛進來沒有任何信息和行為偏好的時候,後者是在其他算法沒有推薦結果的時候作為替補策略。
通常情況下計算規則基本都符合下面這個公式:
這裡面會有很多變形,比如可能需要按照不同類目、維度給予不同的初始權重,可能會人工幹預做一些升降權,不同行為的權重會不同等等…
基于内容的推薦
首先澄清一個誤解,基于内容的推薦包含有标簽的推薦,但并不等于标簽的推薦,标簽隻是基于内容推薦的一小部分。
标簽、關鍵詞、實體、分類、主題、詞嵌入向量等,都是内容推薦中的一些手段。
基于内容推薦的核心是得到内容畫像和用戶畫像,整體實現流程是先通過内容挖掘得到内容畫像,然後基于用戶的行為生成對應的用戶畫像,再基于用戶畫像和内容之間的相似度來給用戶推薦不同的内容。
舉個栗子:
現在要推薦一個新的視頻,但視頻沒有畫像,無法推薦,隻能随機推一部分流量先看下效果;
通過對标題文本進行分析之後發現這是個娛樂類的視頻,這個時候就能定向推一部分用戶了,效果會比随機推薦好;
經過對文本進一步分析後發現内容屬于某影視劇的主題,那這個時候就可以基于該主題進行分發,會更精準一些;
通過對視頻内容識别之後,發現視頻中有XX明星,那這個時候推給Ta的粉絲,效果會更好。
以上,就是在内容挖掘之後,基于内容畫像進行的推薦。
對于消費了該視頻的用戶,就可以打上XX标簽、主題,然後再不斷更新用戶畫像對應的維度和權重。
此外在新内容冷啟動的時候,也可以先計算和現有物品的相似度,然後再基于相似度推薦給可能感興趣的人群。
近鄰推薦
也就是大名鼎鼎的基于用戶的協同過濾和基于物品的協同過濾。核心思想是物以類聚,人以群分…
基于用戶的協同過濾
整體思想是找到和用戶相似的群體,給用戶推薦這群用戶中比較流行但該用戶沒有聽說過的東西。
比如A點擊喜歡了一篇文章,這個時候就可以給A推薦Ta所在群體中其他人喜歡,但是A沒有看過的文章。
這個策略的主要問題在于如何計算用戶之間的相似度,通常的計算方法有兩種:
計算用戶之間的餘弦相似度;
計算用戶之間有正反饋物品的相似度,比如A喜歡了的文章和B喜歡了的文章有多少是重合的。
基于物品的協同過濾
用戶協同過濾的思想是計算用戶-用戶的相似度,物品協同過濾就是基于物品-物品相似度的推薦,先找到用戶喜歡過的物品最相似的物品列表,然後給用戶推薦這些物品。
隻不過這個物品-物品的相似度并不是直接計算得到的,而是通過喜歡物品一的用戶和喜歡物品二的用戶的交集來計算的,兩個物品相似是因為它們出現在很多共同用戶的喜好列表中。
這裡面需要注意的是熱門物品和其他物品之間的相似度,理論上來說大多數用戶都可能會喜歡熱門物品,這樣就可能造成熱門物品-單個物品的相似度很高,所以需要适當的對熱門物品進行降權處理。
矩陣分解
矩陣分解可以看作是隐語義模型的一種實現方式,核心是為了獲得物品和用戶的隐向量,然後基于隐向量進行後續的計算和推薦。
近鄰推薦是基于用戶-用戶或者用戶-物品矩陣中已有的數據去計算未知的數據,矩陣分解則是将這個矩陣分解為兩個小矩陣,後續的計算不再使用原始矩陣,而是采用這兩個小矩陣。
比如分解用戶-物品矩陣後得到用戶u的向量是 Pu,物品i的向量是Qi,那麼要計算物品i推薦給用戶u的推薦分數,直接計算點積即可。
矩陣分解有時也被稱作SVD,但SVD 和矩陣分解不能劃等号,因為除了SVD還有一些别的矩陣分解方法。
比如加了用戶隐式反饋行為和屬性的SVD ,加了時間因素的Time-SVD,還有用來求解矩陣的交替最小二乘法ALS等…
基于關聯規則的推薦
關聯規則更多是基于統計模型的推薦,表現形式為A和B有很大的關聯性,買了A我就給你推薦B。
通常在電商中運用的比較多,比如買了個炒鍋為你推薦鍋鏟,買了個手機為你推薦耳機等…
基于圖模型的推薦
圖模型指的是把用戶行為表示為二分圖模型,将個性化推薦算法放到二分圖模型上。
那給用戶u推薦物品的問題就可以轉化為度量用戶頂點Vu和與它沒有邊相連的物品頂點在圖上的相關性,相關性越高,物品在推薦列表中的權重越高。
深度學習
CNN、RNN等…
混合推薦
通常情況下上面的這些算法大都是同時存在的,畢竟本身就會有N個推薦引擎。
通常情況下,常見的混合策略一般是加權、交叉、切換、分級、分層…
以上,就是常用算法相關的内容,後面是基于推薦流程展開的内容,分别是挖掘、召回和排序。
挖掘
挖掘也就是通常說的特征工程,有效的特征和特征組合直接決定着後續推薦結果的好壞。本部分會簡單的說下整體流程,以及常見的特征。
整體流程
特征工程整體流程大緻可以分為特征清洗、特征預處理、特征處理和特征監控這幾部分。
特征清洗主要是将一些異常樣本進行清洗,對一些樣本進行采樣。
特征預處理主要是對單個特征類型的一些轉換,同時對異常值、缺失值進行處理,此外還有對多個特征的降維、選擇。
特征處理主要是對特征進行離散、平滑、組合、聚合等處理,以達到更好的效果。
特征監控一方面是對特征的有效性進行分析,看特征是否真的有效,另一方面是監控特征的重要性是否有變化,避免影響模型效果。
常見的特征
常見的特征可以分為用戶特征、物品特征、相關性特征、環境特征、上下文特征等…
用戶特征指的是自然屬性(姓名、性别、年齡等)、畫像特征(興趣愛好、行為等)、關系特征(人群屬性、親密度、關注關系等)…
物品特征可以分為靜态和動态兩大類,靜态指的是物品的固有屬性,如分類、标簽、關鍵詞、主題、類型、語義等,動态指的是全局熱度、分類熱度、關鍵詞熱度等。
相關性特征指的是分類匹配、關鍵詞匹配、語義匹配、uid-mid匹配、點擊相似、興趣分類相似、主題相似、興趣詞相似,向量相似等。
環境特征指的是時間、地點、網絡環境、天氣等…
上下文指的是用戶最近N條浏覽内容、點擊内容,或者是内容的相關内容,内容發布者的其他内容等。
下面為今日頭條的一些特征,可以簡單的了解下。
召回
通常情況下候選集的數量可能有十萬,百萬甚至千萬的量級,這種情況下如果直接計算用戶相似度或者物品相似度的話,複雜度會非常高,成本也會非常大。
召回這個環節的主要任務就是從大規模的候選集中初步篩選出來一部分内容,供後續的排序環節使用,所以這個環節需要覆蓋很廣很全的範圍。
召回的觸發機制主要是基于用戶特征和環境特征,比如用戶畫像相關、興趣相關、行為相關、上下文相關等,此外還有一些運營規則和産品策略,比如熱門、特定類型提權、降權等。
常見的召回策略包括上文算法部分的那些算法,以及一些其他策略,比如基于熱門、内容、協同過濾、關聯規則、圖模型、地理位置、時間、用戶關系等的召回策略…
有了初步的召回集之後,就可以考慮一些過濾規則了,比如過濾掉用戶曾經購買過、明确表示過不喜歡的物品或者已經失去了時效性的物品等。
如果候選集較小,可以考慮在生成候選集之後就進行過濾,如果候選集較大,可以考慮在初始推薦列表中再過濾掉不該在候選集中的物品。
排序
按照排序類型來劃分的話,排序可以分為粗排和精排,按照目标來劃分的話,排序可以分為單目标排序和多目标排序。
單目标和多目标倒還好理解一些,畢竟不同的目标需要的模型和策略可能是不同的,那為什麼類型又區分成粗排和精排。
主要可以分為兩方面的原因,一方面大多數用戶其實消費不了那麼多内容,我們精心為用戶準備了Top100的内容,大多數情況下用戶可能隻消費10條内容,那90條内容的工作量可能就浪費了。
另一方面排序的核心任務是對召回集給出的結果進行精準的排序,需要兼顧很多模型和特征,這就需要在效率、成本和性能之間做平衡了。
基于這兩點原因,将排序又分為了粗排和精排兩個階段。
粗排階段處理的物品數量在數百級,主要負責對召回的物品進行打分,也可以理解為用戶的感興趣程度。
精排階段處理的物品在數十級,同時還會有一些産品規則方面的考慮,比如對于多樣性、新穎性、興趣探索方面的考慮,以及對于特定内容的加權、過濾或者強制隔離等。
單目标排序比較常見的是CTR(點擊率)預估,當然這個C并不一定隻能是Click,也可以是其他任何行為。
比如視頻是不是會看完,看完後是不是會收藏,是不是會分享到第三方平台,查看的商品是不是會購買等,這些都可以看成那個可以被預估發生概率的CTR。
多目标顧名思義就是在排序階段希望能夠滿足多個目标,比如視頻的點擊率 停留時長 完播率,電商的點擊率 購買率 客單價。
知乎的排序模型就是一個多目标模型,有基于點擊率的模型,基于收藏率的模型,基于點贊率,基于評論率等一共8個目标。
排序模型一般用目标值和AUC來進行衡量,目标值就是排序模型最開始的目标,點擊率、停留時長、購買率等。
AUC全稱是Area Under Curve,意思是曲線下的面積,這裡的曲線就是ROC曲線,這個值在數學上等價于模型把關心的那一類樣本排在其他樣本前面的概率。
AUC最大是1,完美結果,0.5就是随機排列,0就是完美地全部排錯,當然0也可以變成1,效果最差的其實是0.5左右的。
評估
這部分主要來源于《推薦系統實踐》這本書,篇幅有限,不再展開,後面會單獨寫一篇文章來看如何評估一個推薦系統的好壞。
用戶滿意度
點擊率,用戶停留時長,轉化率等指标。
預測準确度
分為評分預測和TopN預測。
評分預測主要是通過RMSE來衡量,即預測評分和真實評分之間的均方根誤差。
TopN預測主要是用召回率和準确率來進行衡量。
覆蓋率
推薦系統能夠推薦出來的物品,占總物品集合的比例。
多樣性
描述的是推薦列表中物品兩兩之間的不相似性,希望盡可能多的覆蓋用戶的興趣點。
新穎性
給用戶推薦那些他們以前沒有見過的東西。
驚喜度
給用戶的推薦結果是和用戶曆史上喜歡的物品不相似,但用戶卻又覺得滿意的推薦。
信任度
增加推薦系統的透明度,讓用戶知道推薦的理由。
比如為什麼給用戶推薦了這個東西,可能是曆史基于曆史的某次行為,也可能是基于某個好友信息…
實時性
能夠實時更新推薦列表,來滿足用戶行為的變化,能夠将新加入系統的物品推薦給用戶。
健壯性
推薦系統抗擊作弊的能力。
商業目标
能否滿足商業需求,比如GMV、廣告收入等。
最後
以上就是本文的主要内容,先簡單的介紹了一些理論知識,然後介紹了通用的推薦系統架構和流程,之後按照推薦流程的挖掘》召回》排序環節進行展開,最後簡單的列舉了一些衡量推薦系統好壞的指标。
整個推薦系統的核心是幫助用戶發現潛在的用戶-物品或者用戶-用戶連接,先盡可能全的進行覆蓋,再盡可能精準的進行排序。
主要流程可以總結成下圖,分别是挖掘》召回》排序。
下圖為微博的推薦系統的整體架構,感興趣的可以研究一下。
素材來源于《AI時代精準個性化推薦》
下圖是微博推薦算法的架構,包括基礎層(挖掘)、召回層、排序層,可以結合着上面章節的内容再深入了解下。
素材來源于《AI時代精準個性化推薦》
作者:王家郴 資深産品經理
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!