前言
不管是做直播推薦、電商平台推薦、視訊推薦、亦或是其他平台的推薦,從技術上講【很多東西都是想通的,也許你可以從這裡借鑒到你想要的東西。】
下面我會按照以下順序開始介紹,并且這個順序也大概是推薦架構實作的一個順序:
- 使用者畫像系統
- 推薦召回系統
- 推薦排序系統
-
推薦系統評估系統
如果某些同學,對某些部分已經非常熟悉了,可以直接跳過,畢竟這裡隻是介紹了這些系統是怎麼去做的,以及在整個架構中起到了什麼作用,而并沒有提供具體的實作方法。
1.使用者畫像系統
使用者畫像系統是非常重要的一個環節,因為它是我們資料的源頭,如果說在資料最開始就把我們帶偏了,那我們後面不管做的多麼的完美,都是隻會在錯誤的道路上越走越遠,是以我們必須要重視這份初始的資料,把握好資料的品質。
推薦系統–使用者畫像,應用的場景最主要的是使用者分析和研究,就是單一使用者行為細緻分析和使用者調研,可以做單獨群體使用習慣研究。還有産品和營運,了解系統使用者現狀,優化使用者體驗實作精準營銷,實作更好的營銷方案。
使用者畫像是可以和業務系統相關的,推薦系統–基于内容的方式,基于内容統計,排序階段特征擷取,推薦系統,找到可能對主播感興趣的使用者。使用者剛好喜歡這個主播所具有的特征,就可以給他發送資訊,以此讓他參加關于該主播的活動。對于電商的推薦道理相同,找到對應某一主題感興趣的使用者,給這些使用者做資訊推送,這樣就可以讓使用者與該主題下的物品進行互動,以此進一步挖掘使用者的偏好。

上面的這張圖,已經很清晰的告訴我們,使用者畫像在做什麼,能做什麼。
下面我們看一下使用者畫像的結構,最底層是原始資料,比如說物品的資訊,還有各種日志,觀看日志,評論日志,禮物日志等等,有了這些以後對他們進行規劃。可以做一些統計行為資訊,使用者什麼時間段喜歡看視屏,每天看多少個,使用者的付費能力怎麼樣,每天付費多少等等。可以根據這些行為日志,算出使用者的興趣,比如一個使用者經常看跟沒事相關的視訊。有了使用者畫像以後,可以提供給營運系統,還有推薦系統。
使用者畫像可以分為以下幾類:
- 基礎屬性:年齡、性别、裝置型号、安裝管道、常住地等等。
- 行為屬性:浏覽時長、浏覽時段、消費等級、活躍度等等。
- 興趣屬性:使用者感興趣的主題,這些主題往往是平台定義的,比如動漫、社科、曆史等等。
推薦系統之---企業級平台推薦設計前言1.使用者畫像系統2.推薦召回系統3. 推薦排序系統4. 推薦系統評估系統
2.推薦召回系統
2.1 推薦召回的必要性
首先來看一下推薦系統産生的背景,随着網際網路技術發展,資訊過載成為普遍問題,資訊消費者,從海量的資訊中找到自己喜歡的或者感興趣的内容比較困難,作為資訊生産這,讓自己的資訊容易被發覺、容易被使用者感覺到、甚至從衆多的資訊中脫穎而出,受到廣大使用者的關注也是比較困難得。
這個問題在很早以前就被意識到了,并且有了對應的解決方案。那就是【搜尋引擎】,這個方案的提出者是雅虎,因為搜尋引擎可以幫助使用者找到相關的内容。但是,這裡還有一個問題,如果使用者的描述中關鍵字不準确,或者使用者本身沒有什麼需求,搜尋引擎就無能為力了。這個時候推薦系統就應運而生,它不需要使用者描述它的需求,是根據它的曆史給使用者推薦感興趣的内容。【如此就定義出:推薦系統是用來滿足使用者需求不是很明确的時候,幫使用者找到可能感興趣的内容】。
2.2 推薦系統功能
推薦系統的功能,簡單介紹就是:推薦商品。下面具體介紹
- 推薦系統的主要任務是建立使用者和資訊(資訊可以是任何其他形式的東西)之間的聯系,一方面幫助使用者找到他可能感興趣的内容,同時另一方面吧資訊呈現在可能對它感興趣的使用者面前,以此達到雙方共赢。
- 解決海量資訊過載時使用者擷取資訊效率,解決使用者無明确需求時資訊擷取,長尾物品推薦,滿足小衆個性需求,我們現在常見的是個性化推薦,已經成為了各大網站的标配了。
- 在一個App上面的話是中間一樣的存在,一個内容的話,是推薦系統根據模型推薦你内容,同僚做一些相關性的推薦,比如說“看了又看,買了又買”相關性的推薦。或者你買了一個東西,給你推薦和這個東西最相關的,在一些社交網站會推薦一些相似使用者或者好友相似推薦。我們會預測到使用者感興趣的話,會給推薦一些感興趣的資訊。
- 看一下整體流程,過濾出優質内容,去除低俗、敏感資訊,我們根據使用者的興趣找到他感興趣的内容,用常用的一些算法找到感興趣的内容,比如說看了一些關于曆史的視訊,就可以把新的視訊推薦給他。
- 如果發現了一個非常相似的使用者,那麼那個人使用者看過的一些内容,相似使用者并沒有可過,就可以通過一些政策把這些内容推薦給他。假如這個量級太大,一個使用者很難一天一次把這些内容看完,是以我們可以進行多步走,就是把使用者最感興趣的内容放在最前面,根據使用者、物品特征,對含量資訊預估内容的可能性,根據這個可能性從高到低的進行排序,把最可能看的推薦給他,經過這一步之後剩下的可能是幾十個或者幾個了,這個量級是使用者一天一次是可以看完的。
推薦系統之---企業級平台推薦設計前言1.使用者畫像系統2.推薦召回系統3. 推薦排序系統4. 推薦系統評估系統
2.3 推薦系統架構
我們看一下推薦系統架構,在推薦系統裡面使用者跟系統有兩種互動的場景,下圖裡的消息隊列裡就包含了使用者的一些行為資料,比如:觀看資訊、購買資訊之類的行為資訊會上報到我們的接受伺服器裡面,緩存到消息推薦裡面,後面會做兩種方式的處理,一種是用這種資料訓練兩種模型,用來做後面的推薦用。
2.4 推薦系統–推薦算法
常用的推薦算法有如下幾種
- 流行度推薦算法
- 熱門排行榜
- 基于内容的推薦算法
- 标簽推薦
- 協同過濾算法
- UserCF 基于使用者的協同過濾
- ItemCF 基于物品的協同過濾
- ModelCF 基于模型的協同過濾
- 基于圖模型/基于社交關系
2.4.1 流行度推薦
所謂的流行度推薦,其實就是排行榜推薦,他在推薦系統裡面是非常重要的一個算法,非常簡單,容易實作、非常容易了解,解決新使用者冷啟動問題,可作為老使用者的興趣發現方式,可以作為其他算法補充,可作為系統降級方案。
缺點:
- 所有使用者看到的界面都是一樣的推薦結果,沒有個性化。
- 排行榜更新相對較慢,短期不會修改太大的變化。
- 容易受到攻擊,也就是刷榜。 下面介紹兩種推薦排行榜的方式:
推薦系統之---企業級平台推薦設計前言1.使用者畫像系統2.推薦召回系統3. 推薦排序系統4. 推薦系統評估系統 -
【時間衰減】
介紹一下他的思路,把排行榜想象成一個梯子,每個物品都在奮力的往上爬,他們的動力來自于使用者的手動投票,物品本身都要承受一定的重力,會從梯子上往下滑,而使用者的投票可以抵擋部分重力,投票數不及時或者不夠的話,排行榜的物品就會一直往下滑。
下面是它的計算公式,P表示物品的得票數;T表示物品已釋出時間(小時),加上2是為了防止最新的物品導緻分母過小;G表示重力因子,即:将物品排名往下拉的力量。
推薦系統之---企業級平台推薦設計前言1.使用者畫像系統2.推薦召回系統3. 推薦排序系統4. 推薦系統評估系統 想象一下,Score和P是正比例關系,P增加相應的Score也會增加;Score和G、T是反比例,是以随着時間T的增加Score會下降,同樣對于幂函數而言,這種情況下,增大重力因子G,分母整體會增大,也會導緻Score的下降。
在實際使用時,隻要能夠把握、調整參數G就可以正常使用“時間衰減”了。
-
【貝葉斯平均】
下面介紹貝葉斯平均,假如曝光量是1的時候,點選人數也是1,CTR是100%;曝光量是2的時候,點選人數是1,CTR是50%;曝光量是10000的時候,點選人數是3000,CTR是30%。
思路是先估計一個值,然後不斷用新的資訊修正,使得它越來越接近正确的值,如果投票人數少,總分接近全局平均分;如果投票人數多,總分接近項目平均分。
下面是它的計算公式,n是該項目的投票人數;x是該項目的每張選票的值;m是平均投票得分;C是平均投票人數。
推薦系統之---企業級平台推薦設計前言1.使用者畫像系統2.推薦召回系統3. 推薦排序系統4. 推薦系統評估系統
2.4.2 基于内容的推薦
下面講基于内容的推薦,利用使用者已知興趣特征和物品的特征相比對為使用者推薦感興趣的商品。我們舉一個栗子,這個表裡使用者A的旅遊權值是0.8%,美食是0.3%,舞蹈是0.7%,根據這個權重做一些推薦。使用者B也是一樣的思路。
基于内容推薦來說,優點就是說實作比較簡單,推薦結果比較容易了解,對于新物品在沒有使用者評分的情況下,也可以進行推薦,隻從目前使用者提供的評分建構興趣模型,不需要像CF一樣找近鄰。
缺點就是對于新使用者有冷啟動的問題,需要生成标簽,圖檔,視訊很難提取标簽,它隻能推薦和使用者興趣相似的物品,無法發現令人驚喜的推薦。意思就是說如果你喜歡美食不喜歡旅遊的,就隻會給你推薦美食相關的,絕對不會給你推薦旅遊的。
2.4.3 協同過濾
我們知道推薦系統架構重要的一點就是協同過濾,根據目标使用者的行為特征,為他發現一個興趣相投,擁有共同經驗的群體,然後根據群體的喜好來為目标使用者過濾能感興趣的内容。
我們看一下它的優缺點
優點
- 推薦個性話、自動化程度高,能夠有效的利用其它相似使用者的回饋資訊,不斷更新資訊,加快個性化學習的速率
- 允許使用者之間的分享觀點,避免了内容分析的不準确
- 可以發現使用者潛在的但自己尚未發現的興趣偏好
缺點
- 使用者和項目的數量都非常大,這種情況下,評分矩陣會極度稀疏,這會對算法的效率産生消極影響。
- 新使用者、新項目存在冷啟動問題
- 使用者CF可解釋性差
2.4.3.1 相似度計算
【Jaccard相似度】
- 因為會涉及到使用者相似度,Jaccard相似度。Jaccard相似度是兩個集合的交集元素個數在并集中所占的比例。非常适合應用于布爾向量計算,例如使用使用者的收藏行為,計算使用者之間的相似度。它的算法也是非常簡單的。
推薦系統之---企業級平台推薦設計前言1.使用者畫像系統2.推薦召回系統3. 推薦排序系統4. 推薦系統評估系統
【歐氏距離】
- 歐式距離計算M維空間中兩個點之間的真實距離,歐式距離得到的值是一個非負數,最大值是無窮大。通常相似度計算轉化為[-1,1]之間。度量的是空間中兩個點的絕對差異,使用與分析使用者能力之間的差異,比如消費能力、貢獻能力等。
推薦系統之---企業級平台推薦設計前言1.使用者畫像系統2.推薦召回系統3. 推薦排序系統4. 推薦系統評估系統
【餘弦相似度】
- 餘弦相似度計算兩個向量的夾角餘弦值來評估他們的相似度;餘弦相似度适用于文本、使用者、物品相似度;取值在[-1,1]之間;
- 趨近于1,表示兩個向量的方向很近;
- 趨近于-1,表示兩個向量的方向相反;
- 趨近于0,表示兩個向量近乎正交;
推薦系統之---企業級平台推薦設計前言1.使用者畫像系統2.推薦召回系統3. 推薦排序系統4. 推薦系統評估系統
2.4.3.2 UserCF和ItemCF對比
對比一下兩種協同過濾算法
- 從使用場景來說
- UserCF使用于使用者相對物品較少場景。
- ItemCF使用于物品相對較少場景。
- 比如,直播場景持續開播的主播相對較少。
- 從實時性來說
- UserCF使用者有新的互動行為,推薦結果需要等待模型更新時才變化。
- ItemCF使用者有新的互動行為,推薦結果也需要等待模型更新是才會變化。
- 從冷啟動方面
- UserCF新使用者、新物品有互動行為後,也需要等待模型更新才能有推薦結果或者被推薦出去。
- ItemCF有兩點:1.新使用者隻要對一個物品有互動行為就可以給他推薦類似的其他物品;2.新物品需要等待模型更新。
- 從推薦理由
- UserCF不能提供很好的推薦理由
- ItemCF可以提供,比如看了又看,買了又買等。
推薦系統之---企業級平台推薦設計前言1.使用者畫像系統2.推薦召回系統3. 推薦排序系統4. 推薦系統評估系統
2.4.4 基于模型的推薦–ALS
下圖是基于模型的協同過濾ALS的算法矩陣分解圖,左邊是使用者的評分矩陣稱為“U-V矩陣”,每一行代表一個使用者,每一列代表一個物品,空的部分是沒有打過分的物品,可以看到空的位置很多,使用者很少有主動評分的行為,這種時候,一般會采用權重的方式,給使用者有過行為的物品填上分值,以此降低矩陣的稀疏性;不過,盡管如此,還是會有大量的空缺部分,是以基于模型的ALS算法就是通過矩陣分解的方式,将空缺的位置進行分值回填。然後按照回填後評分的高低反映給使用者就可以了,具體做法就是把大矩陣拆分成小矩陣。之是以被稱作“小矩陣”,因為他的次元遠遠低于原始的評分矩陣。而小矩陣的大小,又取決于隐因子的個數K,如此K個隐因子将使用者和物品聯系起來,就可以還原大矩陣,實作對空缺評分的回填。
下面可以用一個具體的例子來說明,左邊是大矩陣,分解成為兩個小矩陣,用已知的值算出來以後,就可以用于回填,比如說第一個使用者。按照這個評分就可以反映給使用者。
我們可以看一下Spark ALS中是怎麼應用的,算法中的輸入需要使用者ID,物品ID,評分。模型訓練完成以後,給所有使用者進行推薦,推薦完了以後得到一個新的。這個從高到低進行排序的,我們把這個反映給使用者就可以了。
如果想詳細的了解,可以參考微網誌,這裡有更加詳盡的說明
2.4.5 領域和矩陣分解的差別
我們看一下領域和矩陣分解的異同
【從方式來看】
- 領域本質是基于統計的方法,沒有學習的過程。
- 矩陣分解是一種基于機器學習的方法,通過優化一個設定的名額建立最優模型
【從複雜度來看】
- 領域是有M個使用者,N個物品,O(M * M)或者O(N * N)。
- 矩陣分解是M個使用者,N個物品,F個隐因子,O(F*(M + N))。複雜度小一些
【從冷啟動來看】
- 領域ItemCF新使用者隻要對物品有行為就可以給他推薦類似的其他物品,但是也是要等到模型更新後才會有效果。
- 矩陣分解的新使用者、新物品有互動行為後,也需要等待模型更新後才有推薦結果。
【從推薦理由來看】
- 領域可以提供推薦解釋
- 矩陣分解沒有推薦解釋
推薦系統之---企業級平台推薦設計前言1.使用者畫像系統2.推薦召回系統3. 推薦排序系統4. 推薦系統評估系統
2.5 推薦結果的融合
在召回階段結束後,我們需要整合多種推薦其的推薦結果,将推薦結果合并為一個清單,下面有三種混合方式:
- 交叉式混合:直接将不同的推薦算法的結果組合在一起推薦給使用者,進而每個推薦算法的優質結果都會被展示給使用者。
- 切換式混合:根據不同應用場景決定使用哪一種推薦算法,使用場景改變的話則切換推薦算法。
- 分級混合:先界定不同算法的好壞,優先使用好算法的推薦結果,得不到結果時使用次好的算法,依次類推。
3. 推薦排序系統
召回階段,多個通道的召回的内容是不具有可比性的,并且因為資料量太大也難以進行更加精确地偏好和品質評估,是以需要在排序階段對召回結果進行統一的準确的打分排序。
他的做法就行下面這個圖,結合使用者的一些行為資料來評判,然後當使用者通路的時候,我們會難道一些符合使用者的特征,我們剛才拿到了清單,使用者這次什麼時候通路的,通路的裝置,已經地理位置,這種資訊輸入到這個排序模型裡面,就會回報到一個結果,使用者看這個視訊或者這個物品的可能性是多少,按照這個可能性進行從高到低的排序,把這個結果反映給使用者。
目前來說,在企業中應用比較多的機器學習排序模型,也是使用的融合算法模型,今天隻簡單提一下GBDT+LR,在後面會單獨開一篇介紹這一部分。
- Facebook2014年的一篇論文中,提及到GBDT+LR的解決方案
- 先使用GBDT對一些稠密的特征進行特征選擇,得到的葉子節點,在拼接離散化特征放進去LR進行訓練
- 利用GBDT替代人工實作連續值特征的離散化,而且同時在一定程度組合了特征,可以改善人工離散化中可能出現的邊界問題,也減少了人工的工作量
推薦系統之---企業級平台推薦設計前言1.使用者畫像系統2.推薦召回系統3. 推薦排序系統4. 推薦系統評估系統
4. 推薦系統評估系統
最後的一個階段,必然是對模型的評估。隻有得到好的模型,前面所做的一切才有意義,如果用了最好的材料,最好的技術,最好的人才,結果搞出來的是一個豆腐渣,那麼一切都沒有了意義。是以下面我們看一下如何評價系統。
【算法評價名額】
- 精準率:排序清單中使用者喜歡的物品所占的比例,TP/(TP+FN)
- 召回率:使用者喜歡的物品出現在推薦清單中的比例,TP/(TP+FP)
- 覆寫率:描述一個推薦系統對物品長尾的發掘能力,推薦系統能夠推薦出來的物品占總物品集合的比例
【産品層面】
- 使用者留存
- 使用者付費消費
- 使用者浏覽時長
目标就是制定一個KPI,推薦系統的算法跟别的不太一樣的,不像傳統的能夠定量知道加幾台伺服器接口能提升多少,做法就是要進行不斷大量的實驗,找到真正可以提高的算法,流程就是首先要做一些離線實驗,當我們确定算法以後進行一些離線實驗,本身會得到一些算法上面的名額評估,進行AB測試然後檢視結果,調優算法,達到我們的目标會給他切更多流量,如果沒有達到這個目标就下線,這種方案不太成功的話,我們就換一種方式。
要做到上面這種流程的話,需要做很多的支撐,一方面是模拟推薦。在上線之前可以很直覺看到結果,線上還可以跑很多的實驗,你不可能用自己的手機每個看,隻能通過模拟推薦随時看到每個實驗的結果。第二種場景就是我們在分析問題的時候,可以用到這樣的系統,分析使用者畫像,以此找到問題然後提高系統的能力。
然後是AB測試系統,這是一個非常重要的系統。使用者通路這個系統,AB測試根據環境資訊、使用者特征确定所屬實驗,召回排序算法生成推薦結果,推薦系統生成ID,使用者回報率,點選等互動資訊,根據推薦ID統計政策、算法各項名額,根據名額調整算法。
這個是AB測試添加實驗的頁面,根據環境資訊、使用者畫像添加實驗,比如可以添加北京地區、男性使用者,習慣晚高峰浏覽商品的實驗,比如添加一線城市,高付費的實驗。
添加完成以後,就可以在系統裡面檢視它的推薦效果了,如果發現推薦效果不太理想,你就進行一些資料的分析,到模拟系統推薦裡面檢視一下,調整完以後再看效果。
參考:
1.馮丙見老師上海演講
2.《推薦系統實戰》
3.《內建群體智慧》