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

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

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

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

例如在抖音與快手的分發(fā)中:抖音強(qiáng)平臺(tái)基于內(nèi)容質(zhì)量分發(fā),快手輕平臺(tái)基于社交和興趣分發(fā),抖音:內(nèi)容質(zhì)量>關(guān)系>雙向互動(dòng)。快手:內(nèi)容質(zhì)量 約等于 關(guān)系 > 雙向互動(dòng)。抖音基于將內(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 頁分析框架》這里留一個(gè)連接:http://www.invest-data.com/eWebEditor/uploadfile/2020041616200539118654.pdf,感興趣的自己查看!
召回策略
召回的目的:當(dāng)用戶與內(nèi)容的量級(jí)比較大,例如對(duì)百萬量級(jí)的用戶與內(nèi)容計(jì)算概率,就會(huì)產(chǎn)生百萬*百萬量級(jí)的計(jì)算量。但同時(shí),大量內(nèi)容中真正的精品只是少數(shù),對(duì)所有內(nèi)容進(jìn)行一次計(jì)算將非常的低效,會(huì)浪費(fèi)大量的資源和時(shí)間。因此采用召回策略,例如熱銷召回,召回一段時(shí)間內(nèi)最熱門的 100 個(gè)內(nèi)容,只需進(jìn)行一次計(jì)算動(dòng)作,就可以對(duì)所有用戶應(yīng)用。
召回的重要性:雖然精排模型一直是優(yōu)化的重點(diǎn),但召回模型也非常的重要,因?yàn)槿绻倩氐膬?nèi)容不對(duì),怎么精排都是錯(cuò)誤的。
召回方法:召回的策略不應(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)域常用。是常見的幾種召回方法。
精排策略
精排模型
精排模型的不同類別

精排模型的基本原理

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

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

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

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

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

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

其他

算法衡量標(biāo)準(zhǔn)
算法衡量指標(biāo)
硬指標(biāo):對(duì)于大多數(shù)的平臺(tái)而言,推薦系統(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)那些他們感興趣,但是不會(huì)主動(dòng)獲取的內(nèi)容。同時(shí)推薦系統(tǒng)還可以幫助平臺(tái)挖掘被埋沒的優(yōu)質(zhì)長尾內(nèi)容,介紹給感興趣的用戶。

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

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