推薦演算法(二)--演算法總結

Eason.wxd發表於2018-12-30

轉自:https://www.jianshu.com/p/1464eab67711 

推薦演算法分類

1 個性化推薦

1.1 基於使用者推薦(Demographic-based Recommendation)

推薦流程:

  1. 獲取使用者的註冊資訊。
  2. 根據使用者的註冊資訊對使用者分類。
  3. 給使用者推薦她所屬分類中使用者喜歡的物品。

1.2 基於內容推薦(Content-based Recommendation)

思想:

根據使用者過去的瀏覽記錄,向使用者推薦使用者沒有接觸過的推薦項。

推薦步驟:

一般是基於關鍵詞進行推薦,比如看了《權力的遊戲1》就給你推薦後面的劇集,但是可能推薦重複,因為關鍵詞相同。

優點:

沒有冷啟動問題
不需要慣用資料
沒有流行度偏見,可以推薦有罕見特性的項
可以使用使用者內容特性來提供解釋

缺點:

項內容必須是機器可讀的和有意義的
容易歸檔使用者
很難有意外,缺少多樣性
很難聯合多個項的特性

1.3 基於關聯規則推薦(Association Rule-based Recommendation)

思想:

在一個交易資料庫中統計購買了商品集X的交易中有多大比例的交易同時購買了商品集Y。

1.4 基於效用推薦(Utility-based Recommendation)

思想:

基礎理論:效用函式。

1.5 基於知識推薦(Knowledge-based Recommendation)

思想:

建議某一領域的一套規則,進行推薦。

1.6 協同過濾演算法(Collaborative Filtering)

優點:

需要最小域
不需要使用者和項
大部分場景中能夠產生足夠好的結果

缺點:

冷啟動問題
需要標準化產品
需要很高的使用者和項的比例(1:10)
流行度偏見(有長尾的時候表現不夠好)
難於提供解釋

1.6.1 基於領域的方法(neighborhood-based)

1.6.1.2 基於使用者的協同推薦(UserCF)

思想:

給使用者推薦和他興趣相似的其他使用者喜歡的物品。

推薦步驟:

  1. 找到和目標使用者興趣相似的使用者集合。
  2. 找到這個集合中的使用者喜歡的,且目標使用者沒有聽說過的物品推薦給目標使用者。

優缺點:

 效能:適用於使用者較少的場合,如果使用者很多,計算使用者相似度矩陣代價很大。
 領域:時效性較強,社會性較強,使用者個性化不太明顯的領域。
 實時性:使用者有新行為,不一定造成推薦結果的立即變化。
 冷啟動:在新使用者對很少的物品產生行為後,不能立即對他進行個性化推薦,因為使用者相似度表是每隔一段時間離線計算的。
  新物品上線後一段時間,一旦有使用者對物品產生行為,就可以將新物品推薦給和對它產生行為的使用者興趣相似的其他使用者。
 推薦理由:很難提供令使用者信服的推薦解釋。

1.6.1.2 基於內容的協同推薦(ItemCF)

思想:

給使用者推薦和他之前喜歡的物品相似的物品。

推薦步驟:

 1. 計算物品的相似度。
 2. 根據物品的相似度和使用者的歷史行為給使用者生成推薦列表。

優缺點:

 效能:適用於物品數明顯小於使用者數的場合,如果物品很多(網頁),計算物品相似度矩陣代價很大。
 領域:長尾物品豐富,使用者個性化需求強烈的領域。
 實時性:使用者有新行為,一定會導致推薦結果的實時變化。
 冷啟動:新使用者只要對一個物品產生行為,就可以給他推薦和該物品相關的其他物品。但沒有辦法在不離線更新物品相似度表的情況下將新物品推薦給使用者。
 推薦理由:利用使用者的歷史行為給使用者做推薦解釋,可以令使用者比較信服。

1.6.2 基於模型的協同過濾(ItemCF)

思想:

有m個物品,m個使用者的資料,只有部分使用者和部分資料之間是有評分資料的,其它部分評分是空白,此時我們要用已有的部分稀疏資料來預測那些空白的物品和資料之間的評分關係,找到最高評分的物品推薦給使用者。

主要方法:

  1. 關聯演算法
  2. 聚類演算法
  3. 分類演算法
  4. 迴歸演算法
  5. 矩陣分解
  6. 神經網路
  7. 基於圖的隨機遊走演算法(random walk on graph)
  8. 隱語義模型LFM

1.6.2.1用關聯演算法做協同過濾

思想:

找出使用者購買的所有物品資料裡頻繁出現的項集活序列,來做頻繁集挖掘,找到滿足支援度閾值的關聯物品的頻繁N項集或者序列。如果使用者購買了N項集或者序列裡的部分物品,那麼我們可以將頻繁項集或者序列裡的其他物品按照一定的評分準則推薦給使用者,這個評分準則可以包括支援度、置信度和提升度等。

常用演算法:

Apriori
FP Tree
PrefixSpan

1.6.2.2 用聚類演算法做協同過濾

思想:

按照物品基於一定的距離度量來進行聚類。如果基於使用者聚類,則可以將使用者按照一定距離度量方式分成不同的目標人群,將同樣目標人群評分高的物品推薦給目標使用者。基於物品聚類的話,則是將使用者評分高物品的相似同類物品推薦給使用者。

常用演算法:

K-Means
BIRCH
DBSCAN
譜聚類

1.6.2.3 用分類演算法做協同過濾

思想:

        如果我們根據使用者評分的高低,將分數分成幾段的話,則這個問題變成分類問題。比如最直接的,設定一份評分閾值,評分高於閾值的就是推薦,評分低於閾值就是不推薦,我們將問題變成了一個二分類問題。雖然分類問題的演算法多如牛毛,但是目前使用最廣泛的是邏輯迴歸。為啥是邏輯迴歸而不是看起來更加高大上的比如支援向量機呢?因為邏輯迴歸的解釋性比較強,每個物品是否推薦我們都有一個明確的概率放在這,同時可以對資料的特徵做工程化,得到調優的目的。目前邏輯迴歸做協同過濾在BAT等大廠已經非常成熟了。

常用演算法:

        1.[邏輯迴歸](http://www.cnblogs.com/pinard/p/6029432.html)

        2.[樸素貝葉斯](http://www.cnblogs.com/pinard/p/6069267.html)

1.6.2.4 用迴歸演算法做協調過濾

思想:

      用迴歸演算法做協同過濾比分類演算法看起來更加的自然。我們的評分可以是一個連續的值而不是離散的值,通過迴歸模型我們可以得到目標使用者對某商品的預測打分。

常用演算法:

      [線性迴歸](http://www.cnblogs.com/pinard/p/6004041.html)

      [決策樹](http://www.cnblogs.com/pinard/p/6053344.html)

      [支援向量機,線性支援迴歸](http://www.cnblogs.com/pinard/p/6113120.html)

1.6.2.5 用矩陣分解做協同過濾

       用矩陣分解做協同過濾是目前使用也很廣泛的一種方法。由於傳統的奇異值分解SVD要求矩陣不能有缺失資料,必須是稠密的,而我們的使用者物品評分矩陣是一個很典型的稀疏矩陣,直接使用傳統的SVD到協同過濾是比較複雜的。

目前主流的矩陣分解推薦演算法主要是SVD的一些變種,比如FunkSVD,BiasSVD和SVD++。這些演算法和傳統SVD的最大區別是不再要求將矩陣分解為UΣVT的形式,而變是兩個低秩矩陣PTQ的乘積形式。對於矩陣分解的推薦演算法,後續我會專門開篇來講。

1.6.2.6 用神經網路做協調過濾

      用神經網路乃至深度學習做協同過濾應該是以後的一個趨勢。目前比較主流的用兩層神經網路來做推薦演算法的是限制玻爾茲曼機(RBM)。在目前的Netflix演算法比賽中, RBM演算法的表現很牛。當然如果用深層的神經網路來做協同過濾應該會更好,大廠商用深度學習的方法來做協同過濾應該是將來的一個趨勢。

1.6.2.7 用圖模型做協同過濾

思想:

    用圖模型做協同過濾,則將使用者之間的相似度放到了一個圖模型裡面去考慮,常用的演算法是SimRank系列演算法和馬爾科夫模型演算法。對於SimRank系列演算法,它的基本思想是被相似物件引用的兩個物件也具有相似性。演算法思想有點類似於大名鼎鼎的PageRank。而馬爾科夫模型演算法當然是基於馬爾科夫鏈了,它的基本思想是基於傳導性來找出普通距離度量演算法難以找出的相似性。

推薦步驟:

      1. 將使用者和對應行為用圖模型表示出來。

      2. 在圖模型中,從某使用者的對應節點開始進行隨機遊走,最終得出物品的權重,進行推薦。

1.6.2.7 隱語義方法

思想:

  通過潛在特徵聯絡使用者和物品。
  隱語義模型主要是基於NLP的,涉及到對使用者行為的語義分析來做評分推薦,主要方法有隱性語義分析LSA和隱含狄利克雷分佈LDA。

推薦步驟:

 1. 基於使用者的行為統計,按使用者興趣給物品分類。
 2. 確定使用者對哪些類別的物品感興趣,以及感興趣的程度。
 3. 確定不同類別物品的權重,選擇性推薦給使用者。

分類:

 1. pLSA
 2. LDA
 3. 隱含類別模型( latent class model )
 4. 隱含主題模型( latent topic model )
 5. 隱含矩陣分解( matrix factorization )

1.7 混合推薦演算法

思想:

綜合利用協同過濾推薦演算法和基於內容的推薦演算法各自的優點同時抵消各自的缺點。

常用演算法:

加權

交換

混合

特性組合

案列

特徵增強

元層次

優點:

由於單獨使用協同過濾推薦演算法和基於內容的推薦演算法
沒有冷啟動問題
沒有流行度偏見,可推薦有罕見特性的項
可產生意外,實現多樣性

缺點:

需要通過大量的工作才能得到正確的平衡。

1.8 基於圖的隨機遊走演算法(random walk on graph)

思想:

        用圖模型做協同過濾,則將使用者之間的相似度放到了一個圖模型裡面去考慮,常用的演算法是SimRank系列演算法和馬爾科夫模型演算法。對於SimRank系列演算法,它的基本思想是被相似物件引用的兩個物件也具有相似性。演算法思想有點類似於大名鼎鼎的PageRank。而馬爾科夫模型演算法當然是基於馬爾科夫鏈了,它的基本思想是基於傳導性來找出普通距離度量演算法難以找出的相似性。後續我會專門開篇來講講SimRank系列演算法。 

1.9 基於深度學習的推薦演算法

思想:

推薦步驟:

常用演算法:

典型案例:

    Youtube 基於深度學習的推薦演算法:

     論文:[《Deep Neural Networks for YouTube Recommendations》](https://static.googleusercontent.com/media/research.google.com/zh-CN//pubs/archive/45530.pdf)

2 非個性化推薦

2.1 基於規則的推薦

思想:

基於最多使用者點選,最多使用者瀏覽等,在目前的大資料時代並不主流。

2.2 基於人口統計資訊的推薦

思想:

簡單的根據系統使用者的基本資訊發現使用者的相關程度,然後進行推薦,目前在大型系統中已經較少使用。

協同過濾的新方向

當然推薦演算法的變革也在進行中,就算是最火爆的基於邏輯迴歸推薦演算法也在面臨被取代。哪些演算法可能取代邏輯迴歸之類的傳統協同過濾呢?下面是我的理解:

  1. 基於整合學習的方法和混合推薦:這個和混合推薦也靠在一起了。由於整合學習的成熟,在推薦演算法上也有較好的表現。一個可能取代邏輯迴歸的演算法是GBDT。目前GBDT在很多演算法比賽都有好的表現,而有工業級的並行化實現類庫。
  2. 基於矩陣分解的方法:矩陣分解,由於方法簡單,一直受到青睞。目前開始漸漸流行的矩陣分解方法有分解機(Factorization Machine)和張量分解(Tensor Factorization)。
  3. 基於深度學習的方法:目前兩層的神經網路RBM都已經有非常好的推薦演算法效果,而隨著深度學習和多層神經網路的興起,以後可能推薦演算法就是深度學習的天下了?目前看最火爆的是基於CNN和RNN的推薦演算法。
  4. 上下文感知推薦
  5. 學習等級
  6. Mutil-armed bandits(探索/開發)
  7. 社會推薦

優點:

利於勉強維持最終效能百分點
你可以說你正在使用漸進的方式

缺點:

難於理解
缺乏推薦工具支援
沒有為你的首個推薦系統提供推薦的方式

3 冷啟動(Cold Start)問題

分類:

使用者冷啟動:解決如何給新使用者做個性化推薦的問題。

物品冷啟動:解決如何將新的物品推薦給可能對它感興趣的使用者。

系統冷啟動:解決如何在一個新開發的網站上(還沒有使用者,也沒有使用者行為,只有一些物品的資訊)設計個性化推薦系統,從而在網站剛釋出時就讓使用者體驗到個性化推薦服務這一問題。

提供非個性化的推薦:eg 熱門排行榜。

相關文章