作者:yijiapan,騰訊 WXG 數據分析師
有幸參與了幾個業務推薦系統搭建的全流程,本文將從實際經驗出發,為大家解構如何從從零搭建推薦系統,希望跟大家能夠相互交流,如有錯誤之處煩請指正。
一、推薦算法的理解
如果說互聯網的目標就是連接一切,那么推薦系統的作用就是建立更加有效率的連接,推薦系統可以更有效率的連接用戶與內容和服務,節約了大量的時間和成本。
如果把推薦系統簡單拆開來看,推薦系統主要是由數據、算法、架構三個方面組成。
- 數據提供了信息。數據儲存了信息,包括用戶與內容的屬性,用戶的行為偏好例如對新聞的點擊、玩過的英雄、購買的物品等等。這些數據特征非常關鍵,甚至可以說它們決定了一個算法的上限。
- 算法提供了邏輯。數據通過不斷的積累,存儲了巨量的信息。在巨大的數據量與數據維度下,人已經無法通過人工策略進行分析干預,因此需要基于一套復雜的信息處理邏輯,基于邏輯返回推薦的內容或服務。
- 架構解放了雙手。架構保證整個推薦自動化、實時性的運行。架構包含了接收用戶請求,收集、處理,存儲用戶數據,推薦算法計算,返回推薦結果等。有了架構之后算法不再依賴于手動計算,可以進行實時化、自動化的運行。例如在淘寶推薦中,對于數據實時性的處理,就保證了用戶在點擊一個物品后,后續返回的推薦結果就可以立刻根據該點擊而改變。一個推薦系統的實時性要求越高、訪問量越大那么這個推薦系統的架構就會越復雜。
二、推薦系統的整體框架
推薦的框架主要有以下幾個模塊
- 協議調度:請求的發送和結果的回傳。在請求中,用戶會發送自己的 ID,地理位置等信息。結果回傳中會返回推薦系統給用戶推薦的結果。
- 推薦算法:算法按照一定的邏輯為用戶產生最終的推薦結果。不同的推薦算法基于不同的邏輯與數據運算過程。
- 消息隊列:數據的上報與處理。根據用戶的 ID,拉取例如用戶的性別、之前的點擊、收藏等用戶信息。而用戶在 App 中產生的新行為,例如新的點擊會儲存在存儲單元里面。
- 存儲單元:不同的數據類型和用途會儲存在不同的存儲單元中,例如內容標簽與內容的索引存儲在 MySQL 里,實時性數據存儲在 redis 里,需要進行數據統計的數據存儲在 TDW 里。
三、用戶畫像
3.1 用戶標簽
標簽是我們對多維事物的降維理解,抽象出事物更具有代表性的特點。 我們永遠無法完全的了解一個人,所以我們只能夠通過一個一個標簽的來刻畫他,所有的標簽最終會構建為一個立體的畫像,一個詳盡的用戶畫像可以幫助我們更加好的理解用戶。
3.2 用戶畫像的分類
1. 原始數據
原始數據一共包含四個方面
- 用戶數據: 例如用戶的性別、年齡、渠道、注冊時間、手機機型等。
- 內容數據: 例如游戲的品類,對游戲描述、評論的爬蟲之后得到的關鍵詞、標簽等。
- 用戶與內容的交互: 基于用戶的行為,了解了什么樣的用戶喜歡什么樣的游戲品類、關鍵詞、標簽等。
- 外部數據: 單一的產品只能描述用戶的某一類喜好,例如游戲的喜好、視頻的喜好,外部數據標簽可以讓用戶更加的立體。
2. 事實標簽
事實標簽可以分為靜態畫像和動態畫像。
- 靜態畫像: 用戶獨立于產品場景之外的屬性,例如用戶的自然屬性,這類信息比較穩定,具有統計性意義。
- 動態畫像: 用戶在場景中所產生的顯示行為或隱式行為。
- 顯示行為:用戶明確的表達了自己的喜好,例如點贊、分享、關注、評分等。(評論的處理更加復雜,需要通過 NLP 的方式來判斷用戶的感情是正向、負向、中性)。
- 隱式行為:用戶沒有明確表達自己的喜好,但“口嫌體正直”,用戶會用實際行動,例如點擊、停留時長等隱性的行為表達自己的喜好。
隱式行為的權重往往不會有顯示行為大,但是在實際業務中,用戶的顯示行為都是比較稀疏的,所以需要依賴大量的隱式行為。
3. 模型標簽
模型標簽是由事實標簽通過加權計算或是聚類分析所得。通過一層加工處理后,標簽所包含的信息量得到提升,在推薦過程中效果更好。
- 聚類分析: 例如按照用戶的活躍度進行聚類,將用戶分為高活躍-中活躍-低活躍三類。
- 加權計算: 根據用戶的行為將用戶的標簽加權計算,得到每一個標簽的分數,用于之后推薦算法的計算。
四、內容畫像
內容畫像: 例如對于文章中的新聞資訊類推薦,需要利用 NLP 的技術對文章的標題,正文等等提取關鍵詞、找到對應的標簽等。視頻除了對于分類、標題關鍵詞的抓取外,還依賴于圖片處理的技術。因此在推薦前需要對推薦的商品或內容進行一系列的處理過程。
環境變量: 對于推薦系統來說,環境畫像也非常的重要。例如在短視頻的推薦場景中,用戶在看到一條視頻所處的時間、地點以及當時所瀏覽的前后內容、當天已瀏覽時間等是非常重要的變量。
推薦內容與場景通常可以分為以下幾類
五、算法構建
5.1 推薦算法流程
推薦算法其實本質上是一種信息處理邏輯,當獲取了用戶與內容的信息之后,按照一定的邏輯處理信息后,產生推薦結果。熱度排行榜就是最簡單的一種推薦方法,它依賴的邏輯就是當一個內容被大多數用戶喜歡,那大概率其他用戶也會喜歡。但是基于粗放的推薦往往會不夠精確,想要挖掘用戶個性化的,小眾化的興趣,需要制定復雜的規則運算邏輯,并由機器完成。
推薦算法主要分為以下幾步:
- 召回:當用戶以及內容量比較大的時候,往往先通過召回策略,將百萬量級的內容先縮小到百量級。
- 過濾:對于內容不可重復消費的領域,例如實時性比較強的新聞等,在用戶已經曝光和點擊后不會再推送到用戶面前。
- 精排:對于召回并過濾后的內容進行排序,將百量級的內容并按照順序推送。
- 混排:為避免內容越推越窄,將精排后的推薦結果進行一定修改,例如控制某一類型的頻次。
- 強規則:根據業務規則進行修改,例如在活動時將某些文章置頂。
- 例如在抖音與快手的分發中:抖音強平臺基于內容質量分發,快手輕平臺基于社交和興趣分發,抖音:內容質量>關系>雙向互動。快手:內容質量 約等于 關系 > 雙向互動。抖音基于將內容從小流量開始,其中表現優質的內容將不斷的進入更大的流量池中,最終進入推薦池,形成 90 天+精品召回池,最終的結果也是優質內容的熱度隨著時間推移逐漸累積增加,頭部內容的集中度很高。
來源:方正證券《抖音 vs 快手深度復盤與前瞻-短視頻 130 頁分析框架》
5.2 召回策略
- 召回的目的:當用戶與內容的量級比較大,例如對百萬量級的用戶與內容計算概率,就會產生百萬*百萬量級的計算量。但同時,大量內容中真正的精品只是少數,對所有內容進行一次計算將非常的低效,會浪費大量的資源和時間。因此采用召回策略,例如熱銷召回,召回一段時間內最熱門的 100 個內容,只需進行一次計算動作,就可以對所有用戶應用。
- 召回的重要性:雖然精排模型一直是優化的重點,但召回模型也非常的重要,因為如果召回的內容不對,怎么精排都是錯誤的。
- 召回方法:召回的策略不應該是簡單的策略堆砌,而應該是方法的相互補充。
- 熱銷召回:將一段時間內的熱門內容召回。
- 協同召回:基于用戶與用戶行為的相似性推薦,可以很好的突破一定的限制,發現用戶潛在的興趣偏好。
- 標簽召回:根據每個用戶的行為,構建標簽,并根據標簽召回內容。
- 時間召回:將一段時間內最新的內容召回,在新聞視頻等有時效性的領域常用。是常見的幾種召回方法。
5.3 精排策略
5.3.1 精排模型
- 精排模型的不同類別
- 精排模型的基本原理
5.3.2 Model-based 精排模型——邏輯回歸為例
- 原理介紹
1.概念:邏輯回歸通過 sigmoid 函數,將線性回歸變為可以解決二分類的方法,它可用于估計某種事物發生的可能性。
2.計算公式**:**Y 根據目標設計:例如是否點擊(是:1,否:0,最后預測一個 0-1 之間的點擊概率);X 根據特征工程設計:這一塊就涉及到了前面提到的用戶畫像與內容畫像,所有的畫像都是對樣本的特征的刻畫。特征工程需要根據業務場景選擇合適的特征并進行一定的加工;W 由模型訓練得到。
- 構建流程
基于我們的目標,需要進行樣本的收集(樣本是對客觀世界的具體描述),通過對已收集到的樣本進行特征構造,并對其進行訓練,最終求出模型參數的具體數值。
- 建立樣本
邏輯回歸為有監督模型,因此需要有已經分類好的樣本。正樣本:用戶曝光過某物品并點擊。附樣本:用戶曝光過某物品并且沒有點擊。如果正負樣本差距過大,可以將負樣本隨機抽樣后與正樣本一起訓練。或只保留有點擊行為的用戶作為樣本,將曝光但是沒有被點擊的物品作為負樣本。
- 特征工程
特征工程是對收集到的樣本進行更加深度的特征刻畫。雖然作為算法人員與用戶接觸較少,但對身邊使用該產品的同學,進行深入的觀察與訪談,了解他們對于所推薦內容的反饋,往往可以得到意料之外的特征開發方向。主要分為以下幾個維度。
- 基礎數據
- 趨勢數據
- 時間數據
- 交叉數據
不同交叉方法得到的不同的參數數量
5.4 其他
拓展閱讀:
Learning and Reasoning on Graph for Recommendation
http://staff.ustc.edu.cn/~hexn/slides/cikm19-tutorial-graph-rec.pdf
Concept to Code:Deep Learning for Multitask Recommendation
https://drive.google.com/file/d/1YDSuPI-DBWSn-QeCK8zTa75iBsq-kaRx/view
6 算法衡量標準
6.1 算法衡量指標
- 硬指標:對于大多數的平臺而言,推薦系統最重要的作用是提升一些“硬指標”。例如新聞推薦中的點擊率,但是如果單純以點擊率提升為目標,最后容易成為一些低俗內容,“標題黨”的天下。
- 軟指標:除了“硬指標”,推薦系統還需要很多“軟指標”以及“反向指標”來衡量除了點擊等之外的價值。好的推薦系統能夠擴展用戶的視野,發現那些他們感興趣,但是不會主動獲取的內容。同時推薦系統還可以幫助平臺挖掘被埋沒的優質長尾內容,介紹給感興趣的用戶。
6.2 獲得推薦效果
如何去獲得推薦效果。可以分為離線實驗、用戶調查、在線實驗三種方法。
- 離線實驗: 通過反復在數據樣本進行實驗來獲得算法的效果。通常這種方法比較簡單、明確。但是由于數據是離線的,基于過去的歷史數據,不能夠真實的反應線上效果。同時需要通過時間窗口的滾動來保證模型的客觀性和普適性。
- 用戶反饋: 當在離線實驗階段得到了一個比較不錯的預測結果之后,就需要將推薦的結果拿到更加真實的環境中進行測評,如果這個時候將算法直接上線,會面臨較高的風險。因為推薦結果的好壞不能僅僅從離線的數字指標衡量,更要關注用戶體驗,所以可以通過小范圍的反復白板測試,獲得自己和周圍的人對于推薦結果的直觀反饋,進行優化。
- 在線測試(AB test): 實踐是檢驗真理的唯一標準,在推薦系統的優化過程中,在線測試是最貼近現實、最重要的反饋方式。通過 AB 測試的方式,可以衡量算法與其他方法、算法與算法之間的效果差異。但是要注意的是,AB 測序需要一定的觀察期以及科學的實驗流程,才能證明得到的結論是真實可信的。
7 除了算法本身之外...
7.1 推薦算法是否會導致信息不平等和信息繭房?
推薦系統并非導致信息不平等和信息繭房的根本原因。
- 內容的不平等或許更多的產生于用戶天性本身,而推薦算法的作用更像是幫助用戶“訂閱”了不同的內容。 用戶天然的會對信息產生篩選,并集中在自己的興趣領域。在過去雜志訂閱的階段,雖然每個雜志和報紙的內容都是完全相同的,但是用戶通過訂閱不同的雜志實際接受到了完全不同的消息。而今天的內容 APP 提供了各種話題,各種類型的內容,但用戶通過推薦算法,在無意識的情況下“訂閱”了不同的“雜志”。
- 人們更加集中于垂直的喜好是不可逆轉的趨勢。 從內容供給的角度來講,從內容的匱乏到繁榮,從中心化到垂直聚群,用戶的選擇更貼近自己的喜好是不可逆轉的趨勢。在沒有提供太多選項的時候,人們會更多的集中在某幾個內容上面,而當今天層出不窮的內容出現,人們開始追逐更加個性化,精細化的內容。
但不可否認的是,推薦系統的便捷性、自動化、實時性會加重這些問題。在這樣的情況下,我們能做些什么?
- 追求長期價值,“帶用戶探索世界”:展示更多的優質內容,而不是僅僅局限于用戶更有可能點擊的內容,擴展用戶興趣認知,給用戶展示多元化的內容,用戶消費更多的內容,更久的在平臺上停留。讓用戶獲取到更多的,更長遠價值,才是讓用戶在平臺上留存的本質。
7.2 推薦算法如何幫助用戶挖掘小眾興趣?
- 擴大系統的資源池,讓小眾的興趣也有足夠的內容覆蓋。
- 產品設計鼓勵更主動的行為表達(收藏、關注),減少因為時間衰減的將小眾興趣遺忘。
- 在混排的時候加入更多隨機的內容,或者限制某一類型出現的頻率。
7.3 算法如何更好的與產品結合?
- 關注產品體驗,而不僅僅是算法本身的表現。
- 關注隱性反向指標: 用戶對于內容的感知是非常敏感的,不好的內容會損傷用戶體驗,甚至導致用戶流失。但問題是不是所有用戶在被推薦了不喜歡或不良的內容后會產生顯性行為,例如“投訴行為”,所以還需要更多的關注反向的隱性指標,例如觀察用戶在被推薦了某些內容后是否造成了流失或使用頻率的下降。