達觀動態

達觀愿與業內同行分享 助力各企業在大數據浪潮來臨之際一起破浪前行

達觀數據于敬:個性化推薦系統實踐應用

個性化推薦已經成為現代人們生活的一部分, “猜你喜歡”、“相關閱讀”你一定并不陌生。計算機如何做到對用戶投其所好?企業在做個性化推薦時要如何精準把握用戶興趣?如何解決冷啟動問題?如何避免推薦結果的單調與重復?在CSDN學院與AI科技大本營的公開課上,達觀數據聯合創始人于敬進行了《個性化推薦系統實踐》的主題分享,深入淺出的講解了個性化推薦的過程、難點及解決方法。本文為公開課內容整理。

本文五大內容:

? ? ? ? ?
? ? ? ? ? ? 一、推薦系統概述

二、搭建推薦系統的關鍵算法

三、推薦系統難點分析和解決方法

四、深度學習在推薦系統中的應用

五、進階資源推薦

 

一、推薦系統概述

常見的推薦系統主要有以下三種場景:

1

1.個性化推薦?例如打開今日頭條時最先看到一個推薦頁面,這是一個FEED流,還有像電商網站有猜你喜歡的推薦位置。

2.相關推薦? 通常文章或視頻的下方會出現一個相關推薦,有的也叫“看了還看”、“買了還買”等。

?3.熱門推薦?很多會出現在首頁的熱點位置。

?

推薦系統其實對于用戶來說有其核心的價值。比如:

?

  • 幫用戶便捷的篩選出感興趣的內容

  • 在用戶面對陌生領域時提供參考意見

  • 當用戶需求不明確時,作用戶的“貼心助手”

  • 滿足用戶的好奇心,比如很多短視頻的APP

?

當用戶有這么多訴求時候,推薦系統做的事情是什么?

?

  • 首先它基于用戶的興趣,根據用戶的歷史行為做興趣的挖掘,把物品和用戶的個性化偏好進行匹配。

  • 然后通過推薦算法或者技術把信息進行過濾,解決用戶的過載問題。

  • 當用戶有新的行為發生時,比如點擊或者搜索之后,能及時進一步捕捉用戶的興趣。

  • 選擇合適的場景,個性化或者相關,或者熱門,來給用戶進行推薦。

?

對于企業來說,個性化帶來的效果也非常顯著。電商巨頭亞馬遜每年30%的收入來自個性化推薦;自2008 年起,推薦算法為 YouTube 每天增加了數十萬小時的觀看時長,每年視頻點擊量增幅都達到50% ;Linkedin通過propensitymodel提供機器學習,最終為公司帶來了數十倍的持續穩定的增長;我們進入京東、淘寶app或者網頁端,每個用戶的首頁展示都是依據行為偏好進行精準推薦。

?2

?

什么是個性化推薦系統?

?

個性化推薦系統解決的是用戶和內容中間的關聯關系,它是二者之間的橋梁。基于用戶的興趣偏好,把用戶感興趣的物品或者視頻、資訊等推薦給用戶,給用戶帶來沉浸式的體驗,讓用戶感到一定的滿足感,優化用戶的體驗。

???

推薦系統從它的初始來說主要是解決兩大問題:信息過載和長尾問題。

?

信息過載是當用戶面對大量信息時并不明確自己喜歡什么,但又確實有需求想看到喜歡的東西。從紛繁復雜的商品和內容中如何發現自己感興趣的東西?對于用戶來說是一種選擇的困難。

?

另一方面來說,企業有新物品上線時,如何展示給喜歡它的用戶?

?

根據達觀數據服務的客戶經驗,我們發現物品沒有曝光并不代表沒有人喜歡它,而是沒有在合適的時機曝光給對物品感興趣的用戶,推薦系統剛好能解決這方面的問題。

?

一方面系統基于大量的用戶行為數據來分析挖掘用戶的偏好;另外一方面,基于物品數據及物品自身的特點,把商品和用戶的興趣進行匹配,從而達到個性化推薦。用戶可以找到自己感興趣的東西,商家的一些商品或內容也能有更多曝光的機會。

?

推薦系統設計的目標主要有下面三個部分:

3

?

首先,功能要盡可能全面,剛才提到推薦個性化推薦、相關推薦和熱門推薦,有些商家也包括一些混合推薦,一般在詳情頁里面下叫關聯推薦,但有的產品會在關聯推薦中放一個無限下拉的功能,這時候就要夾雜一部分個性化推薦在其中。

??

其次是效果要精準,即推薦的東西一定是用戶感興趣的。另外推薦的結果要盡可能豐富,內容或物品有更多的曝光機會。

?

第三是性能,當刷新一個頁面的推薦結果,如果沒有很快返回會帶來很差的用戶體驗。從另一方面來說,我們的結果不一定是非常好的,但它絕對不能留白,就是無論怎么樣推薦結果一定有返回,這是最基礎的要求。

?

在實際的推薦場景里,功能、效果、性能三者相輔相成、也彼此互相影響,很多時候要進行折中的考慮。

?

二、搭建推薦系統的關鍵算法
1.達觀數據推薦系統架構

?

4

上圖是達觀推薦的是總體架構。

???

達觀數據有自己的運算平臺、存儲平臺和傳輸平臺。在此之上是組件層,很多推薦依賴于NLP做了進一步的分析挖掘。在此之上是模型層,模型有很多,比如用戶畫像就是對一個用戶有全方位的刻畫,同時也有物品畫像,包括收益、點擊、收藏,預估的收益,增長趨勢等。

?

模型之上是算法層,包括矩陣分解、協同過濾,深度學習算法也是達觀的一部分,同時還有基于統計的模型,包括點擊反饋、關聯規則挖掘等,還有比較重要的是基于內容的推薦。

?

算法層上面是組合層,單一的推薦算法有二三十種,基于單一的推薦算法會有機器學習的融合排序,基于不同業務場景會自適應選擇一部分模型進行效果優化。

?

組合層上面是應用層,主要提供四種服務:

?

1.?? 個性化推薦,這是千人千面的推薦結果;

2.?? 相關推薦是以物推物,當看到商品、視頻或文章會有一個關聯的推薦;

3.?? 熱門推薦,其實是熱點分析;

4.?? 推薦理由,是推薦結果的解釋。對于推薦理由的使用在PC中用得比較多。

2.推薦流程

?

推薦流程分為三部分:離線、近線和在線。

5

離線一般說召回,要從很多推薦的物品里進行召回。大的推薦客戶每天會新增物品可能幾十萬,在推薦候選集中有幾千萬時并不是所有的每次都要重新計算一遍。離線模塊的處理就是先做一個推薦結果的召回,這種召回一般叫重量級的算法,比如說做協同過濾、決策分解、深度學習等,這些會依賴于大數據的集群。由于數據量比較大,一般我們使用最近半年或者幾個月的數據,跑一次的時間一般在幾個小時,快的話是半小時。從幾十萬、幾百萬、幾千萬的候選集里面得到的候選集在幾千這個維度。

?

經過離線模塊的召回之后是近線的處理,也叫粗排,粗排是一些輕量級算法,比如剛剛提到在組合層達觀有各種各樣組合的模型,基于單一的推薦算法進行融合,一般使用的方式是內存+RDB。這部分處理時間非常快,一般在秒級,就是說當一個用戶的行為發生改變后,他的推薦結果會做到實時更新。經過粗排之后,這個推薦結果一般是在百的量級。

?

最后一步在線主要做精排。當新的請求過來,通過這個用戶的ID,根據離線找到近線模塊處理的結果。拿到基于粗排之后的結果后做一些業務規則的處理,比如在一次推薦里要求多樣性和時效性等。這里很多處理方式是基于加載內存的方式,處理時間是在毫秒級,返回的結果一般在10這個量級。

?

?? 3.如何做熱門推薦?

?

就熱門推薦簡單的方式可生成多維度的熱門數據,熱門數據有各種排行榜,比如點擊的排行榜,購買排行榜等。當客戶需要熱門推薦的場景時可把熱門推薦生成的結果直接返回給客戶。另一方面,熱門推薦也可以捕捉一些場景,比如處理冷啟動和做一些基于問題探索時。

?

熱門推薦的結果通常有一定理論依據,比如按購買、銷量排序其實也是很多人容易接受的方式,在這部分也可以夾雜人工編輯的分析。所以首先基于用戶行為(包括物品數據,用戶本身的數據)生成不同維度的排行榜,在不同的時機推薦給用戶。

???

4.如何做基于內容的推薦?

?

一個物品一般會有各種維度的使用信息,比如商品有標題、品牌、價格、折扣等,基于使用信息可以推薦標題上語意相似的商品。處理基于內容推薦時不僅是基于簡單使用方面的匹配,會考慮到其他組合條件。比如服裝類的商品加上不同的價格會得到不同的結果,這種找物方式是單純拿到物品屬性時的處理,但在實際場景下還有各種擴展,比如會做做類別和語義的擴展。

 

類別擴展:比如男生關注的是科技,是否可以推薦一下體育或軍事等相關內容?類別擴展也是避免內容推薦過于單一的方式。

6

語義擴展:當你關注一個標簽時,我們會把它相應的標簽也拿到,基于你相關的標簽也可以做其他方面的召回。比如當看歐冠時,是不是可以推薦西甲相關的新聞?一個用戶關注梅西,但梅西的新聞有時比較有限,是不是可以給他推薦C羅的內容?語義擴展也可以解決推薦內容太過單一的問題。

?

?5.基于主題模型的推薦

主題模型的推薦可以充分利用一個物品的文本特征,比如標題、描述或內容等。一篇文章拿到標題后,基于主題模型,基于LDA或者LSI可以把它生成一個向量。7

基于這個向量得到關于主題的分布,計算它的相似度,基于這個相似度我們取topN可以得到一個推薦結果。

8

這種推薦結果比單純基于文本和字面匹配的效果更好。

?

6.??協同過濾

?

協同過濾有兩種,基于用戶的協同過濾和基于物品的。基于用戶的協同過濾首先計算用戶之間的相似度,把相似的用戶感興趣的物品推薦給當前這個用戶。基于物品的協同過濾先計算物品的相似度,基于相似度進行排序,最終得到當前這個物品比較相似的其他物品。

9

一個熱門的商品會很容易影響到用戶或者物品之間的相似度。比如今天有一社會熱點事件,很多媒體跟蹤除了爆款新聞,即使我平時是一個關注體育或科技領域的讀者,也會點擊看一下。這種情景下如果基于物品的相似度來處理得到的結果往往不好。所以在計算相似度時要做很多變形,比如對熱門進行特別處理,對冷門的物品也需要做特殊處理和過濾等。

?

也要考慮用戶有一些作弊行為,比如用戶刷了某一領域很多東西,其他用戶只是刷了部分,很多的用戶和其他用戶計算相似度時,可能都會在其他用戶計算的候選集中,這也不符合實際場景。所以在實際處理時要對這部分做一些特殊的控制。

???

7.??潛在因子模型

?

基于潛在因子分析是完全由數學的方式、更好的模型來處理。他的輸入是一個用戶的行為矩陣,通過矩陣分解得到兩個矩陣,基于這兩個矩陣進一步復原,通過矩陣相乘的方式,就可以把原來用戶沒有操作過的物品的得分給預測出來。

10

單純依賴用戶行為數據進行預測有很多不足,給物品的打分和用戶本身的打分差異可能很大。在上面的實驗模型中可以充分考慮用戶的bias信息。比如在電影場景中,由一個大牌明星主演,因為它的市場預期好所以容易得到好評。但當是小眾電影或者很多新人主演,大家接受度不高,得分可能會相對低。也許它得到了3分,可能已經相當于大牌明星主演電影的5分。這就會導致物品和用戶之間有各種bias信息。在做潛在因子模型時,可以把用戶的bias信息和物品的bias信息加進來。

?

同時還要考慮很多特征要進行組合,男生加上體育和女生加上娛樂,往往是一個更好的特征。對這塊來說,通過潛在因子模型可以把這些信息充分考慮進來。

?

8.用戶模型構建

?

用戶模型構建也是用戶畫像。在實際場景中如果精準挖掘用戶興趣偏好,個性化推薦能做得更好。用戶畫像有多種信息,基于注冊信息有年齡、性別、地域等,還有另一種數據——用戶的偏好,同時還有各種分類的場景,比如在電商里會判斷一個用戶他對價格是否敏感,是否喜歡小眾的東西等。

11

這個分析牽涉到各種技術,比如基于概率統計可以得到一部分數據,另一部分,很多用戶之間的興趣有一定的關聯性,可以做用戶群體的聚類。預測用戶對價值的喜好可借助一些常見的分類模型來處理。對于用戶模型構建,我們一方面給推薦系統來使用,另外一部分也提供用戶畫像這種服務,當企業拿到用戶畫像后,可以做老用戶的關懷、流失用戶的召回等。

???

9.多算法融合

?

上面提到的都是單一推薦算法,比如基于內容的,基于熱門的,包括基于協同過濾、矩陣分解、深度學習等,單一算法會得到一些推薦候選集,拿到推薦候選集后要做一個融合,將最后結果返回給用戶。我們會將單一推薦候選集輸入到融合模型里,讓模型預測,按照用戶偏好的高低排序,然后取得TOPN返回給用戶。

???12

推薦的整體流程有以上這幾點,首先是各種單一算法召回,召回完進行融合,單一算法里又分了不同維度,比如協同過濾、矩陣分解,包括用戶畫像等。

?

三、推薦系統難點分析和解決方法

?

構建推薦系統有下面四個難點:?

1.如何精準把握用戶興趣?

?

用戶興趣不僅存在多樣性,而且會隨著時間的變化而變化;其次對用戶興趣的挖掘需要海量數據,如何合理建模?以及不同算法模型對用戶興趣的刻畫結果不同,如何優化模型?

?

2.如何解決冷啟動問題?

?

冷啟動包括新用戶的冷啟動和物品的冷啟動。新用戶是當一個用戶沒有任何行為數據和輔助信息的情況下,如何給他做好推薦?物品的冷啟動即長尾問題——如何將新的物品快速推薦給可能對它感興趣的用戶?

?

3.如何解決實際應用中的性能問題?

?

這包括數據量膨脹快,且冷熱不均;如果用戶興趣變化快,我們的深度學習、矩陣分解模型如何跟得上用戶興趣的變化也是一個考驗;算法調優時效果越調越差如何處理?以及在機器資源有限、存儲有限常出現性能瓶頸。

4.如何解決推薦結果單調性和重復性?

?

推薦里面有個叫回聲室效應,為了滿足用戶的興趣,推薦的內容越來越窄如何處理?第二部分是重復,如果依賴于內容標簽或者內容分類,對于標簽或者類目來不斷地召回新的推薦結果,這會導致推薦結果沒有新鮮感。

?

基于這四點,和大家分享一下達觀推薦系統對上述問題的解決方案(重點來了)

?

1.長短期興趣畫像讓模型效果穩定提升

?13

通過引入時間因子,基于不同的時間周期做用戶畫像。比如基于最近半年的或更久的數據做長期用戶畫像,基于近一個月或三個月做短期用戶畫像,同時還會有實時用戶畫像,基于這三種類型用戶畫像之間的差異化,能夠感知用戶的興趣變更。

?

基于用戶畫像后做一個過濾機制,把推薦過或者質量不佳先過濾。這樣做排序時會引入一個時間因子做一個衰減,另外也會做機器學習的預測,可以方便地調整推薦順序。

?

接下來做優化,隨著時間的推移,對于用戶的刻畫會更清晰準確。

?

2.快速建模技術解決冷啟動問題

14

對于物品的冷啟動,達觀數據使用CLUB算法。先給它合適的探索機會,初期時讓物品有一定的曝光,曝光后我們會有一個更快的預期收益機制,加快模型的迭代。當在一段時間內觀察預期的收益沒有達到要求時,會把這部分的曝光逐漸降低。如果預期收益比較好,會增大一部分曝光。通過這種自學的機制來調整物品之間的曝光問題,新的物品便總是有曝光的機會。

???

對于用戶的冷啟動,即使用戶沒有任何數字信息,用戶手機登陸APP時是否有其他可以采集的信息?比如地域,手機型號,基于這些東西可以做一些離線的挖掘。比如一線城市或四線城市,很大程度上會有一個偏好的差異。用Iphone手機和用其他品牌手機,基于歷史的數據也會分析出差異點,然后進行針對性的調整。

?

有一種極端情況,拿不到上述數據時如何做推薦?當拿到用戶的ID,基于一些歷史行為經驗挖掘一些高質量的物品,同時在生成推薦結果時盡量考慮到多樣性。相當于當一個用戶進入一個飯館,雖然不知道他喜歡什么,但我們提供了種類豐富的菜單讓用戶選擇。當用戶選擇自己感興趣的內容,和推薦系統有交互時,無論是點擊、收藏、點贊,借助我們的秒級反饋機制,推薦的結果就可以實時更新,我們會對實時的畫像把握得越來越準。

?

此外達觀數據借助自然語言處理技術,當新的物品進來,基于它的標題、類別等語義信息可以做預估,通過深度挖掘構建新物品的畫像,輔助接下來是增加推薦還是減少曝光。

???

3.三級火箭”架構保障系統穩定和毫秒級反饋

達觀系統架構分為三級火箭:由Offline-Nearline-Online三級依次銜接構成,融合了各類推薦算法和數據。

?15

離線使用的是大量的集群方式,比如說Spark、Kafka跑一些重量級的算法,矩陣分解、協同過濾,包括深度學習等都屬于離線模塊來做的,這部分運算時間比較久。

?

在最上面叫在線模塊,當用戶有一次推薦請求他希望反饋推薦結果時,要保證快速毫秒級地返回推薦結果,不能做更多重量級算法。這部分往往是一些業務規則處理,可以基于內存或內存的數據庫Redis的方式,實時返回給用戶推薦結果。

?

在離線和在線模塊之間,它們從小時級到毫秒級中間有很大的gap,用戶行為發生變化后如何感知?接下來交給近線模塊處理。近線模塊可以做到當用戶每一次行為變化后,系統都可以感知這種變化,然后把用戶的推薦結果重新計算一遍,這時候結果往往是一些融合算法。融合排序輸入的就是離線的各種挖掘,包括用戶畫像信息、他的場景畫像和實質畫像等。基于近線來說,它對各種單一推薦算法進行融合排序,最終存到內存數據庫中。當在線模塊接到新請求時,可以從這里面讀取對用戶近線計算好的結果,然后做業務規則返回給用戶。

?

這就是“三層火箭”架構,它主要借鑒了搜索引擎的部分機制,包括隊列、實時計算等。我們可以滿足用戶的興趣和變化,同時也在高并發的情況下毫秒級返回給用戶推薦結果,目前達觀服務了上百家客戶,三層火箭架構是一個有效的方式。

?

4.NLP 技術解決推薦難題

?

解決推薦結果的單調性問題,達觀做了很多自然語言處理(NLP)相關的東西,包括語義理解、詞性標注等。例如做直播推薦時,基于評論信息可以分析情感是正面的還是反面的,判斷用戶對當前主播是否感興趣。

16

另外一個是重要性排序,可以基于物品本身的標題、標簽、描述等信息做語義方面重要性的排序。基于文本處理可以有效解決推薦系統的冷啟動問題。?

???

四、深度學習在推薦系統中的應用
1.Embedding 處理

?

Embedding主要有兩種方式。首先會做詞Embedding,來完善內容多樣性。當拿到item標簽時,業界一般使用Word2vec方式進行專項的擴展。比如當用戶關注歐冠這個標簽時,是否可以找到西甲、意甲進行詞粒度的擴展。這樣在實際推薦中可以避免推薦結果太過單一。

?

另一個itemEmbedding主要應用于召回階段。對于item Embedding,相當于我們把一個用戶行為數據作為一個詞粒度,然后輸入到Word2vec得到itemEmbedding,基于item Embedding進行相似度計算方式可以得到相似的物品。然后作為一個結果的召回進入融合排序。

??

在第三種是做Embedding中做特征工程,得到一個物品或者一個用戶的Embedding后,做featurevector的方式來使用,基于feature vector做machine learning。

?

2.基于DNN的推薦?

2017年谷歌發布了一篇論文《Deep Neural Networks for YouTube Recommendations》主要做YouTube的視頻推薦,這個場景達觀也在使用。

?17

在YouTube發布這篇論文的時候分了兩個階段來實現推薦結果,第一層是上面圖片列的候選集生成的階段。這個階段DNN的處理方式它可以從百萬量級直接降到百的量級。第二層是Ranking階段,做一些重排序的方式。DNN把我們的推薦問題轉化成分類問題,相當于對每一個觀看的視頻做一個分類。

?

另外一方面,論文中也提到DNN模型并沒有用到原始的用戶日志,而是對每個用戶提取了等量的訓練樣本,這種方式主要有好處是可以減少高度活躍用戶對loss函數的影響。

?

2.基于DKN的推薦

?18

DKN主要是基于知識圖譜,應用在Feed流推薦中。DKN是基于內容的深度推薦的框架下進行點擊率的預測。比如每條新聞通過KCNN對標題進行處理,最終產生一個向量。同時我們引用注意力機制機做用戶的Embedding,最終再結合深度神經網絡做點擊的預估。

???

3.Wide&Deep

?

2016年谷歌在一篇論文提出了Wide&Deep模型,這個模型里主要同時學習低階和高階的特征。

19

Wide模型是線性模型+特征組合,記憶性好、可解釋性強。Deep是Deeplearning,這塊特征工程較少,往往可以學習到更高層次的隱藏特征。但它需要較專業的領域知識來做特征工程,所以進一步產生了Deep FM。

4.Deep FM

?

Deep FM的主要優點是不需要預訓練,也不需要人工的特征工程,同時可以學習一些低階和高階的特征,并且進行組合的共享。這樣可以更快的訓練,同時得到更精確的訓練學習。下圖為一個DeepFM論文里提到的各種參數設置。20

5.模型-排序

?

對于達觀來說,模型排序有下述這些方式。21

(1)線性模型,依賴于人工特征工程,

(2)FM/GBDT+LR或Xgboost+LR,它主要是非線性的,達觀做了特征融合。在很多場景下推薦效果會更好。

(3)模型的進一步演進,使用到DeepFM和Wide&Deep借助于深度學習,減少很多人工的特征工程。這部分的工作主要在調參上。

?

在達觀服務的眾多行業里,從線性、非線性,包括深度學習模型都在使用。每個行業自己的特點,不同的客戶有自己的數據量和用戶群體,達觀會基于客戶的推薦效果來選擇對應比較好的模型。

???

7.??XDeepFM

22

2018年微軟發布了一個模型XDeepFM,它其實是對DCN的改進,主要由linear、DNN、CIN組成。引入的CIN機制可以自動學習顯式的高階特征交互,該模型在幾個數據集上都取得了超過DeepFM模型的效果。這部分達觀推薦也正在探索和嘗試中。

?

五、進階資源推薦
?

和大家分享一些做推薦的心得:

  • 一切從用戶出發,避免本末倒置

  • 搭建一個推薦系統不難,如何持之以恒地提升效果是關鍵

  • 沒有壞的方法,只有壞的用法,因地制宜、對癥下藥

  • 沒有最好,只有更好,體驗和效果需要兼顧

最后推薦兩本書給大家,一本是《web 智能算法》,一本是推薦界圣經《推薦系統》,感謝大家的聆聽。

23