萬字長文帶你了解推薦系統(tǒng)全貌!
有幸參與了幾個(gè)業(yè)務(wù)推薦系統(tǒng)搭建的全流程,本文將從實(shí)際經(jīng)驗(yàn)出發(fā),為大家解構(gòu)如何從從零搭建推薦系統(tǒng),希望跟大家能夠相互交流,如有錯誤之處煩請指正。
一、推薦算法的理解
如果說互聯(lián)網(wǎng)的目標(biāo)就是連接一切,那么推薦系統(tǒng)的作用就是建立更加有效率的連接,推薦系統(tǒng)可以更有效率的連接用戶與內(nèi)容和服務(wù),節(jié)約了大量的時(shí)間和成本。
如果把推薦系統(tǒng)簡單拆開來看,推薦系統(tǒng)主要是由數(shù)據(jù)、算法、架構(gòu)三個(gè)方面組成。
數(shù)據(jù)提供了信息。數(shù)據(jù)儲存了信息,包括用戶與內(nèi)容的屬性,用戶的行為偏好例如對新聞的點(diǎn)擊、玩過的英雄、購買的物品等等。這些數(shù)據(jù)特征非常關(guān)鍵,甚至可以說它們決定了一個(gè)算法的上限。
算法提供了邏輯。數(shù)據(jù)通過不斷的積累,存儲了巨量的信息。在巨大的數(shù)據(jù)量與數(shù)據(jù)維度下,人已經(jīng)無法通過人工策略進(jìn)行分析干預(yù),因此需要基于一套復(fù)雜的信息處理邏輯,基于邏輯返回推薦的內(nèi)容或服務(wù)。
架構(gòu)解放了雙手。架構(gòu)保證整個(gè)推薦自動化、實(shí)時(shí)性的運(yùn)行。架構(gòu)包含了接收用戶請求,收集、處理,存儲用戶數(shù)據(jù),推薦算法計(jì)算,返回推薦結(jié)果等。有了架構(gòu)之后算法不再依賴于手動計(jì)算,可以進(jìn)行實(shí)時(shí)化、自動化的運(yùn)行。例如在淘寶推薦中,對于數(shù)據(jù)實(shí)時(shí)性的處理,就保證了用戶在點(diǎn)擊一個(gè)物品后,后續(xù)返回的推薦結(jié)果就可以立刻根據(jù)該點(diǎn)擊而改變。一個(gè)推薦系統(tǒng)的實(shí)時(shí)性要求越高、訪問量越大那么這個(gè)推薦系統(tǒng)的架構(gòu)就會越復(fù)雜。
二、推薦系統(tǒng)的整體框架

推薦的框架主要有以下幾個(gè)模塊
協(xié)議調(diào)度:請求的發(fā)送和結(jié)果的回傳。在請求中,用戶會發(fā)送自己的 ID,地理位置等信息。結(jié)果回傳中會返回推薦系統(tǒng)給用戶推薦的結(jié)果。
推薦算法:算法按照一定的邏輯為用戶產(chǎn)生最終的推薦結(jié)果。不同的推薦算法基于不同的邏輯與數(shù)據(jù)運(yùn)算過程。
消息隊(duì)列:數(shù)據(jù)的上報(bào)與處理。根據(jù)用戶的 ID,拉取例如用戶的性別、之前的點(diǎn)擊、收藏等用戶信息。而用戶在 APP 中產(chǎn)生的新行為,例如新的點(diǎn)擊會儲存在存儲單元里面。
存儲單元:不同的數(shù)據(jù)類型和用途會儲存在不同的存儲單元中,例如內(nèi)容標(biāo)簽與內(nèi)容的索引存儲在 mysql 里,實(shí)時(shí)性數(shù)據(jù)存儲在 redis 里,需要進(jìn)行數(shù)據(jù)統(tǒng)計(jì)的數(shù)據(jù)存儲在 TDW 里。
三、用戶畫像
3.1 用戶標(biāo)簽
標(biāo)簽是我們對多維事物的降維理解,抽象出事物更具有代表性的特點(diǎn)。?我們永遠(yuǎn)無法完全的了解一個(gè)人,所以我們只能夠通過一個(gè)一個(gè)標(biāo)簽的來刻畫他,所有的標(biāo)簽最終會構(gòu)建為一個(gè)立體的畫像,一個(gè)詳盡的用戶畫像可以幫助我們更加好的理解用戶。
3.2 用戶畫像的分類

1. 原始數(shù)據(jù)
原始數(shù)據(jù)一共包含四個(gè)方面
用戶數(shù)據(jù):?例如用戶的性別、年齡、渠道、注冊時(shí)間、手機(jī)機(jī)型等。
內(nèi)容數(shù)據(jù):?例如游戲的品類,對游戲描述、評論的爬蟲之后得到的關(guān)鍵詞、標(biāo)簽等。
用戶與內(nèi)容的交互:?基于用戶的行為,了解了什么樣的用戶喜歡什么樣的游戲品類、關(guān)鍵詞、標(biāo)簽等。
外部數(shù)據(jù):?單一的產(chǎn)品只能描述用戶的某一類喜好,例如游戲的喜好、視頻的喜好,外部數(shù)據(jù)標(biāo)簽可以讓用戶更加的立體。
2. 事實(shí)標(biāo)簽
事實(shí)標(biāo)簽可以分為靜態(tài)畫像和動態(tài)畫像。
靜態(tài)畫像:?用戶獨(dú)立于產(chǎn)品場景之外的屬性,例如用戶的自然屬性,這類信息比較穩(wěn)定,具有統(tǒng)計(jì)性意義。
動態(tài)畫像:?用戶在場景中所產(chǎn)生的顯示行為或隱式行為。
顯示行為:用戶明確的表達(dá)了自己的喜好,例如點(diǎn)贊、分享、關(guān)注、評分等。(評論的處理更加復(fù)雜,需要通過 NLP 的方式來判斷用戶的感情是正向、負(fù)向、中性)。
隱式行為:用戶沒有明確表達(dá)自己的喜好,但“口嫌體正直”,用戶會用實(shí)際行動,例如點(diǎn)擊、停留時(shí)長等隱性的行為表達(dá)自己的喜好。
隱式行為的權(quán)重往往不會有顯示行為大,但是在實(shí)際業(yè)務(wù)中,用戶的顯示行為都是比較稀疏的,所以需要依賴大量的隱式行為。
3. 模型標(biāo)簽
模型標(biāo)簽是由事實(shí)標(biāo)簽通過加權(quán)計(jì)算或是聚類分析所得。通過一層加工處理后,標(biāo)簽所包含的信息量得到提升,在推薦過程中效果更好。
聚類分析:?例如按照用戶的活躍度進(jìn)行聚類,將用戶分為高活躍-中活躍-低活躍三類。
加權(quán)計(jì)算:?根據(jù)用戶的行為將用戶的標(biāo)簽加權(quán)計(jì)算,得到每一個(gè)標(biāo)簽的分?jǐn)?shù),用于之后推薦算法的計(jì)算。
四、內(nèi)容畫像
內(nèi)容畫像:?例如對于文章中的新聞資訊類推薦,需要利用 NLP 的技術(shù)對文章的標(biāo)題,正文等等提取關(guān)鍵詞、找到對應(yīng)的標(biāo)簽等。視頻除了對于分類、標(biāo)題關(guān)鍵詞的抓取外,還依賴于圖片處理的技術(shù)。因此在推薦前需要對推薦的商品或內(nèi)容進(jìn)行一系列的處理過程。
環(huán)境變量:?對于推薦系統(tǒng)來說,環(huán)境畫像也非常的重要。例如在短視頻的推薦場景中,用戶在看到一條視頻所處的時(shí)間、地點(diǎn)以及當(dāng)時(shí)所瀏覽的前后內(nèi)容、當(dāng)天已瀏覽時(shí)間等是非常重要的變量。
推薦內(nèi)容與場景通常可以分為以下幾類

五、算法構(gòu)建
5.1 推薦算法流程
推薦算法其實(shí)本質(zhì)上是一種信息處理邏輯,當(dāng)獲取了用戶與內(nèi)容的信息之后,按照一定的邏輯處理信息后,產(chǎn)生推薦結(jié)果。熱度排行榜就是最簡單的一種推薦方法,它依賴的邏輯就是當(dāng)一個(gè)內(nèi)容被大多數(shù)用戶喜歡,那大概率其他用戶也會喜歡。但是基于粗放的推薦往往會不夠精確,想要挖掘用戶個(gè)性化的,小眾化的興趣,需要制定復(fù)雜的規(guī)則運(yùn)算邏輯,并由機(jī)器完成。
推薦算法主要分為以下幾步:
召回:當(dāng)用戶以及內(nèi)容量比較大的時(shí)候,往往先通過召回策略,將百萬量級的內(nèi)容先縮小到百量級。
過濾:對于內(nèi)容不可重復(fù)消費(fèi)的領(lǐng)域,例如實(shí)時(shí)性比較強(qiáng)的新聞等,在用戶已經(jīng)曝光和點(diǎn)擊后不會再推送到用戶面前。
精排:對于召回并過濾后的內(nèi)容進(jìn)行排序,將百量級的內(nèi)容并按照順序推送。
混排:為避免內(nèi)容越推越窄,將精排后的推薦結(jié)果進(jìn)行一定修改,例如控制某一類型的頻次。
強(qiáng)規(guī)則:根據(jù)業(yè)務(wù)規(guī)則進(jìn)行修改,例如在活動時(shí)將某些文章置頂。

例如在抖音與快手的分發(fā)中:抖音強(qiáng)平臺基于內(nèi)容質(zhì)量分發(fā),快手輕平臺基于社交和興趣分發(fā),抖音:內(nèi)容質(zhì)量>關(guān)系>雙向互動??焓郑簝?nèi)容質(zhì)量 約等于 關(guān)系 > 雙向互動。抖音基于將內(nèi)容從小流量開始,其中表現(xiàn)優(yōu)質(zhì)的內(nèi)容將不斷的進(jìn)入更大的流量池中,最終進(jìn)入推薦池,形成 90 天+精品召回池,最終的結(jié)果也是優(yōu)質(zhì)內(nèi)容的熱度隨著時(shí)間推移逐漸累積增加,頭部內(nèi)容的集中度很高。

來源:方正證券《抖音 vs 快手深度復(fù)盤與前瞻-短視頻 130 頁分析框架》
5.2 召回策略
召回的目的:當(dāng)用戶與內(nèi)容的量級比較大,例如對百萬量級的用戶與內(nèi)容計(jì)算概率,就會產(chǎn)生百萬*百萬量級的計(jì)算量。但同時(shí),大量內(nèi)容中真正的精品只是少數(shù),對所有內(nèi)容進(jìn)行一次計(jì)算將非常的低效,會浪費(fèi)大量的資源和時(shí)間。因此采用召回策略,例如熱銷召回,召回一段時(shí)間內(nèi)最熱門的 100 個(gè)內(nèi)容,只需進(jìn)行一次計(jì)算動作,就可以對所有用戶應(yīng)用。
召回的重要性:雖然精排模型一直是優(yōu)化的重點(diǎn),但召回模型也非常的重要,因?yàn)槿绻倩氐膬?nèi)容不對,怎么精排都是錯誤的。
召回方法:召回的策略不應(yīng)該是簡單的策略堆砌,而應(yīng)該是方法的相互補(bǔ)充。
熱銷召回:將一段時(shí)間內(nèi)的熱門內(nèi)容召回。
協(xié)同召回:基于用戶與用戶行為的相似性推薦,可以很好的突破一定的限制,發(fā)現(xiàn)用戶潛在的興趣偏好。
標(biāo)簽召回:根據(jù)每個(gè)用戶的行為,構(gòu)建標(biāo)簽,并根據(jù)標(biāo)簽召回內(nèi)容。
時(shí)間召回:將一段時(shí)間內(nèi)最新的內(nèi)容召回,在新聞視頻等有時(shí)效性的領(lǐng)域常用。是常見的幾種召回方法。
5.3 精排策略
5.3.1 精排模型
精排模型的不同類別

精排模型的基本原理

5.3.2 Model-based 精排模型——邏輯回歸為例
原理介紹
1.概念:邏輯回歸通過 sigmoid 函數(shù),將線性回歸變?yōu)榭梢越鉀Q二分類的方法,它可用于估計(jì)某種事物發(fā)生的可能性。

2.計(jì)算公式**:**Y 根據(jù)目標(biāo)設(shè)計(jì):例如是否點(diǎn)擊(是:1,否:0,最后預(yù)測一個(gè) 0-1 之間的點(diǎn)擊概率);X 根據(jù)特征工程設(shè)計(jì):這一塊就涉及到了前面提到的用戶畫像與內(nèi)容畫像,所有的畫像都是對樣本的特征的刻畫。特征工程需要根據(jù)業(yè)務(wù)場景選擇合適的特征并進(jìn)行一定的加工;W 由模型訓(xùn)練得到。
構(gòu)建流程
基于我們的目標(biāo),需要進(jìn)行樣本的收集(樣本是對客觀世界的具體描述),通過對已收集到的樣本進(jìn)行特征構(gòu)造,并對其進(jìn)行訓(xùn)練,最終求出模型參數(shù)的具體數(shù)值。

建立樣本
邏輯回歸為有監(jiān)督模型,因此需要有已經(jīng)分類好的樣本。正樣本:用戶曝光過某物品并點(diǎn)擊。負(fù)樣本:用戶曝光過某物品并且沒有點(diǎn)擊。如果正負(fù)樣本差距過大,可以將負(fù)樣本隨機(jī)抽樣后與正樣本一起訓(xùn)練?;蛑槐A粲悬c(diǎn)擊行為的用戶作為樣本,將曝光但是沒有被點(diǎn)擊的物品作為負(fù)樣本。

特征工程
特征工程是對收集到的樣本進(jìn)行更加深度的特征刻畫。雖然作為算法人員與用戶接觸較少,但對身邊使用該產(chǎn)品的同學(xué),進(jìn)行深入的觀察與訪談,了解他們對于所推薦內(nèi)容的反饋,往往可以得到意料之外的特征開發(fā)方向。主要分為以下幾個(gè)維度。
基礎(chǔ)數(shù)據(jù)
趨勢數(shù)據(jù)
時(shí)間數(shù)據(jù)
交叉數(shù)據(jù)

不同交叉方法得到的不同的參數(shù)數(shù)量

5.4 其他
拓展閱讀:
Learning and Reasoning on Graph for Recommendation
staff.ustc.edu.cn/~hexn
Concept to Code:Deep Learning for Multitask Recommendation
drive.google.com/file/d

6 算法衡量標(biāo)準(zhǔn)
6.1 算法衡量指標(biāo)
硬指標(biāo):對于大多數(shù)的平臺而言,推薦系統(tǒng)最重要的作用是提升一些“硬指標(biāo)”。例如新聞推薦中的點(diǎn)擊率,但是如果單純以點(diǎn)擊率提升為目標(biāo),最后容易成為一些低俗內(nèi)容,“標(biāo)題黨”的天下。
軟指標(biāo):除了“硬指標(biāo)”,推薦系統(tǒng)還需要很多“軟指標(biāo)”以及“反向指標(biāo)”來衡量除了點(diǎn)擊等之外的價(jià)值。好的推薦系統(tǒng)能夠擴(kuò)展用戶的視野,發(fā)現(xiàn)那些他們感興趣,但是不會主動獲取的內(nèi)容。同時(shí)推薦系統(tǒng)還可以幫助平臺挖掘被埋沒的優(yōu)質(zhì)長尾內(nèi)容,介紹給感興趣的用戶。

6.2 獲得推薦效果
如何去獲得推薦效果。可以分為離線實(shí)驗(yàn)、用戶調(diào)查、在線實(shí)驗(yàn)三種方法。

離線實(shí)驗(yàn):?通過反復(fù)在數(shù)據(jù)樣本進(jìn)行實(shí)驗(yàn)來獲得算法的效果。通常這種方法比較簡單、明確。但是由于數(shù)據(jù)是離線的,基于過去的歷史數(shù)據(jù),不能夠真實(shí)的反應(yīng)線上效果。同時(shí)需要通過時(shí)間窗口的滾動來保證模型的客觀性和普適性。
用戶反饋:?當(dāng)在離線實(shí)驗(yàn)階段得到了一個(gè)比較不錯的預(yù)測結(jié)果之后,就需要將推薦的結(jié)果拿到更加真實(shí)的環(huán)境中進(jìn)行測評,如果這個(gè)時(shí)候?qū)⑺惴ㄖ苯由暇€,會面臨較高的風(fēng)險(xiǎn)。因?yàn)橥扑]結(jié)果的好壞不能僅僅從離線的數(shù)字指標(biāo)衡量,更要關(guān)注用戶體驗(yàn),所以可以通過小范圍的反復(fù)白板測試,獲得自己和周圍的人對于推薦結(jié)果的直觀反饋,進(jìn)行優(yōu)化。
在線測試(AB test):?實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn),在推薦系統(tǒng)的優(yōu)化過程中,在線測試是最貼近現(xiàn)實(shí)、最重要的反饋方式。通過 AB 測試的方式,可以衡量算法與其他方法、算法與算法之間的效果差異。但是要注意的是,AB 測序需要一定的觀察期以及科學(xué)的實(shí)驗(yàn)流程,才能證明得到的結(jié)論是真實(shí)可信的。

7 除了算法本身之外
7.1 推薦算法是否會導(dǎo)致信息不平等和信息繭房?
推薦系統(tǒng)并非導(dǎo)致信息不平等和信息繭房的根本原因。
內(nèi)容的不平等或許更多的產(chǎn)生于用戶天性本身,而推薦算法的作用更像是幫助用戶“訂閱”了不同的內(nèi)容。?用戶天然的會對信息產(chǎn)生篩選,并集中在自己的興趣領(lǐng)域。在過去雜志訂閱的階段,雖然每個(gè)雜志和報(bào)紙的內(nèi)容都是完全相同的,但是用戶通過訂閱不同的雜志實(shí)際接受到了完全不同的消息。而今天的內(nèi)容 APP 提供了各種話題,各種類型的內(nèi)容,但用戶通過推薦算法,在無意識的情況下“訂閱”了不同的“雜志”。
人們更加集中于垂直的喜好是不可逆轉(zhuǎn)的趨勢。?從內(nèi)容供給的角度來講,從內(nèi)容的匱乏到繁榮,從中心化到垂直聚群,用戶的選擇更貼近自己的喜好是不可逆轉(zhuǎn)的趨勢。在沒有提供太多選項(xiàng)的時(shí)候,人們會更多的集中在某幾個(gè)內(nèi)容上面,而當(dāng)今天層出不窮的內(nèi)容出現(xiàn),人們開始追逐更加個(gè)性化,精細(xì)化的內(nèi)容。
但不可否認(rèn)的是,推薦系統(tǒng)的便捷性、自動化、實(shí)時(shí)性會加重這些問題。在這樣的情況下,我們能做些什么?
追求長期價(jià)值,“帶用戶探索世界”:展示更多的優(yōu)質(zhì)內(nèi)容,而不是僅僅局限于用戶更有可能點(diǎn)擊的內(nèi)容,擴(kuò)展用戶興趣認(rèn)知,給用戶展示多元化的內(nèi)容,用戶消費(fèi)更多的內(nèi)容,更久的在平臺上停留。讓用戶獲取到更多的,更長遠(yuǎn)價(jià)值,才是讓用戶在平臺上留存的本質(zhì)。
7.2 推薦算法如何幫助用戶挖掘小眾興趣?
擴(kuò)大系統(tǒng)的資源池,讓小眾的興趣也有足夠的內(nèi)容覆蓋。
產(chǎn)品設(shè)計(jì)鼓勵更主動的行為表達(dá)(收藏、關(guān)注),減少因?yàn)闀r(shí)間衰減的將小眾興趣遺忘。
在混排的時(shí)候加入更多隨機(jī)的內(nèi)容,或者限制某一類型出現(xiàn)的頻率。
7.3 算法如何更好的與產(chǎn)品結(jié)合?
關(guān)注產(chǎn)品體驗(yàn),而不僅僅是算法本身的表現(xiàn)。
關(guān)注隱性反向指標(biāo):?用戶對于內(nèi)容的感知是非常敏感的,不好的內(nèi)容會損傷用戶體驗(yàn),甚至導(dǎo)致用戶流失。但問題是不是所有用戶在被推薦了不喜歡或不良的內(nèi)容后會產(chǎn)生顯性行為,例如“投訴行為”,所以還需要更多的關(guān)注反向的隱性指標(biāo),例如觀察用戶在被推薦了某些內(nèi)容后是否造成了流失或使用頻率的下降。
