推薦系統(tǒng)架構(gòu)與算法流程詳解
你知道的越多,不知道的就越多,業(yè)余的像一棵小草!
成功路上并不擁擠,因為堅持的人不多。
編輯:業(yè)余草
zhuanlan.zhihu.com/p/259985388
推薦:https://www.xttblog.com/?p=5182
前段時間,在 b 站發(fā)了一個推薦視頻的簡單介紹,主要講協(xié)同過濾算法:https://www.bilibili.com/video/BV1yh411U7wy,這兩天五一放假又有網(wǎng)友需要這方面的資料,因此再來一篇《推薦系統(tǒng)架構(gòu)與算法流程詳解》。
推薦算法的理解
如果說互聯(lián)網(wǎng)的目標(biāo)就是連接一切,那么推薦系統(tǒng)的作用就是建立更加有效率的連接,推薦系統(tǒng)可以更有效率的連接用戶與內(nèi)容和服務(wù),節(jié)約了大量的時間和成本。如果把推薦系統(tǒng)簡單拆開來看,推薦系統(tǒng)主要是由數(shù)據(jù)、算法、架構(gòu)三個方面組成。
數(shù)據(jù)提供了信息。數(shù)據(jù)儲存了信息,包括用戶與內(nèi)容的屬性,用戶的行為偏好例如對新聞的點擊、玩過的英雄、購買的物品等等。這些數(shù)據(jù)特征非常關(guān)鍵,甚至可以說它們決定了一個算法的上限。 算法提供了邏輯。數(shù)據(jù)通過不斷的積累,存儲了巨量的信息。在巨大的數(shù)據(jù)量與數(shù)據(jù)維度下,人已經(jīng)無法通過人工策略進(jìn)行分析干預(yù),因此需要基于一套復(fù)雜的信息處理邏輯,基于邏輯返回推薦的內(nèi)容或服務(wù)。 架構(gòu)解放了雙手。架構(gòu)保證整個推薦自動化、實時性的運行。架構(gòu)包含了接收用戶請求,收集、處理,存儲用戶數(shù)據(jù),推薦算法計算,返回推薦結(jié)果等。有了架構(gòu)之后算法不再依賴于手動計算,可以進(jìn)行實時化、自動化的運行。例如在淘寶推薦中,對于數(shù)據(jù)實時性的處理,就保證了用戶在點擊一個物品后,后續(xù)返回的推薦結(jié)果就可以立刻根據(jù)該點擊而改變。一個推薦系統(tǒng)的實時性要求越高、訪問量越大那么這個推薦系統(tǒng)的架構(gòu)就會越復(fù)雜。
推薦系統(tǒng)的整體框架

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

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

內(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)境畫像也非常的重要。例如在短視頻的推薦場景中,用戶在看到一條視頻所處的時間、地點以及當(dāng)時所瀏覽的前后內(nèi)容、當(dāng)天已瀏覽時間等是非常重要的變量。推薦內(nèi)容與場景通??梢苑譃橐韵聨最?/p>

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

例如在抖音與快手的分發(fā)中:抖音強平臺基于內(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)容的熱度隨著時間推移逐漸累積增加,頭部內(nèi)容的集中度很高。

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

精排模型的基本原理

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

2.計算公式:Y 根據(jù)目標(biāo)設(shè)計:例如是否點擊(是:1,否:0,最后預(yù)測一個 0-1 之間的點擊概率);X 根據(jù)特征工程設(shè)計:這一塊就涉及到了前面提到的用戶畫像與內(nèi)容畫像,所有的畫像都是對樣本的特征的刻畫。特征工程需要根據(jù)業(yè)務(wù)場景選擇合適的特征并進(jìn)行一定的加工;W 由模型訓(xùn)練得到。

構(gòu)建流程
構(gòu)建流程基于我們的目標(biāo),需要進(jìn)行樣本的收集(樣本是對客觀世界的具體描述),通過對已收集到的樣本進(jìn)行特征構(gòu)造,并對其進(jìn)行訓(xùn)練,最終求出模型參數(shù)的具體數(shù)值。

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

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

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

其他

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

獲得推薦效果
如何去獲得推薦效果??梢苑譃殡x線實驗、用戶調(diào)查、在線實驗三種方法。

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

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