雖然簡單但確不能不會的推薦算法重點回顧

本文爲《推薦系統與深度學習》第四章的複習筆記,只記錄了一些要點,希望能夠快速的進行復習,如果發現哪一個點不明白的話,可以自行展開學習。

4.1 基於內容的推薦算法

基於內容的推薦算法步驟:

  • 特徵(內容)提取
  • 用戶偏好計算
  • 內容召回(召回用戶偏好的top K)
  • 物品排序(可以根據top K中其他用戶打分平均值最高的top N推薦給用戶,好處是可以考慮其他用戶的意見)

優點:

  • 物品沒有冷啓動問題(因爲物品的內容特徵不依賴於用戶數據),推薦出的物品也不會存在過於熱門的問題
  • 能夠捕獲到用戶的特殊偏好
  • 原理簡單,方便問題定位

基於內容推薦的特徵提取

  • 結構特徵(可以做onehot編碼)
  • 非結構化特徵(eg,文章內容,可以進行分詞,得到一個詞庫T)
    • 基礎統計法(存在則對應位置爲1,不存在對應位置爲0)
    • 詞頻統計法(對應位置爲歸一化後的TF-IDF值)

缺點:

  • 要求內容能夠抽取出有意義的特徵,且要求這些特徵內容有良好的結構性
  • 推薦精度較低,相同內容特徵的物品差異性不大

TF-IDF的歸一化公式:
wk,j=TFIDF(tk,dj)s=1TTFIDF(tk,dj)2 w_{k,j} = \frac{TF-IDF(t_k, d_j)}{ \sqrt{ \sum_{s=1}^{T}TF-IDF(t_k, d_j)^2 }}

上述公式保證整個文檔的tf-idf和爲1,參考:https://www.cnblogs.com/helloandhey/p/11880915.html

4.2 基於協同的推薦算法

基於近鄰的推薦算法分爲:

  • 基於用戶的協同:給用戶推薦相似用戶喜歡的物品
  • 基於物品的協同:

兩者的異同:

  • 從推薦場景考慮
    • 如果用戶數遠大於物品數,可以考慮使用ItemCF
    • UserCF適用於內容更新頻率非常高的平臺
    • UserCF適合於社交推薦,ItemCF適用於非社交
    • UserCF注重社會化,ItemCF注重個性化
  • 從系統多樣性
    • ItemCF推薦的多樣性優於UserCF
    • ItemCF容易發現長尾物品,這樣精度就會小於UserCF
  • 從用戶特點對推薦算法的影響:
    • UserCF假設用戶會喜歡和他有相同喜好的用戶喜歡的東西,但如果用戶找不到興趣相投的用戶,效果就會大打折扣,因此用戶是否適應UserCF算法跟他有多少近鄰用戶是成正比關係的
    • ItemCF假設用戶喜歡和他以前喜歡物品的相似物品,如果一個用戶喜歡物品的自相似度大,則說明他喜歡物品比較相似,即比較符合ItemCF的假設

4.3 基於矩陣分解的推薦方法

矩陣分解的方法有:

  • SVD
  • FM(隱語義模型)

基於奇異值分解的推薦算法流程:

  • 加載用戶對物品的評分矩陣
  • 矩陣分解,求奇異值,根據奇異值的能量佔比確定降維至k的數值
  • 使用矩陣分解對物品評分矩陣進行降維
  • 使用降維後的物品評分矩陣計算物品相似度,對用戶未評分過的物品進行預測
  • 產生前n個評分值高的物品,返回物品編號以及預測評分值

SVD缺點:

  • 只通過一次分解來對原矩陣進行逼近,特徵挖掘的層次不夠深入
  • 矩陣分解也沒有運用到物品本身的內容特徵

4.4 基於稀疏自編碼的推薦算法

基礎的自編碼結構

  • (1)簡單的爲三層的神經網絡(輸入層、隱藏層、輸出層),輸入爲樣本xx的特徵向量,讓輸出層的結果和輸入層的相同,隱藏層的神經元設置爲kk個,即迫使自編碼神經網絡去學習輸入數據的壓縮表示,同時也必須從kk維的隱藏神經元激活度向量中重構出樣本特徵維度數目的輸入值。
  • (2)如果網絡的輸入數據是完全隨機的,比如每個輸入都是一個跟其他特徵完全無關的獨立同分布高斯隨機變,那麼這一壓縮表示將會非常難學習,但是如果輸入數據中隱含着一些特定的結構,比如某些輸入特徵是彼此相關的,那麼這一算法就可以發現輸入數據中的這些相關性。
  • (3)有時爲了能更有效地找出隱含在輸入數據內部的結構和模式,會尋找一組超完備基向量,其維度可能比輸入的特徵維度還要高
  • (4)在(3)中,隱藏神經元的數量比較大,可以給自編碼神經網絡增加一些限制,使得滿足稀疏性的要求。比如如果神經元輸出接近於1時,認爲被激活,接近於0時認爲被抑制,即Dropout,使得神經元大部分時間都被抑制的被稱爲稀疏性限制

多層結構

自編碼是一種最基礎的結構,可以進一步利用深度學習的思想,學習到高層抽象特徵,比如:棧式自編碼。

棧式自編碼原理

採用貪婪訓練法進行訓練,即通過三層的自編碼結構得到隱藏層的特徵表示h1h^1,然後將h1h^1作爲第二個稀疏自編碼的輸入,得到二階的特徵表示h2h^2

然後將二階的特徵表示h2h^2輸入到一個softmaxsoftmax分類器,訓練得到一個將二階特徵表示映射到數字標籤的模型。

然後將上述的三個網格結構結合起來構建一個包含:輸入層-> 隱藏層 -> 隱藏層->softmaxsoftmax分類器層 的完整的棧式自編碼結構。

稀疏自編碼在推薦系統中的應用

背景:輸入層爲一首歌曲,向量特徵爲歌曲被用戶收藏的數據,輸出層爲音樂的流派分類結果。希望訓練出歌曲的特徵向量,用於歌曲的相似度計算。

數據:

  • 輸入層,每首歌曲的輸入向量u1,u2,...,un{u_1, u_2, ..., u_n},其中uiu_i表示是否被用戶收藏過,收藏過爲1,未收藏過爲0。輸入矩陣爲(m+1)n(m+1)*n(包含一個截距項),mm爲用戶數量,nn爲歌曲數量
  • 隱藏層,(k+1)n(k+1) *nk+1k+1表示特徵維度數
  • 輸出層,音樂的流派分類結果

隱藏層到輸出層的權重連接,一般的神經網絡中會進行忽略,但是在自編碼網絡中,連接層是有意義的。這些權重作用是將歌曲特徵向量映射到用戶是否聽過/喜歡該歌曲,其實就是用戶的低維特徵

通過上述的自編碼學習,把第二個隱藏層的h2h^2取出來,即歌曲以流派分類爲目標降維壓縮後的向量。

該向量不僅使用到了用戶的羣體收藏行爲,也運用了歌曲的流派特徵信息,可以表示歌曲更多的特徵信息。

緊接着就可以利用這些向量計算音樂的相似度,然後將用戶未收藏的音樂推薦給用戶,注意前後行爲的一致性。

4.5 基於社交網絡的推薦算法

社交網絡結構:

  • 社交圖譜(相互認識,在網絡中可以使用無向圖表示)
  • 興趣圖譜(單向關注,在網絡中可以使用有向圖表示)
  • 標籤圖譜(共同關注某個標籤,興趣相似,但沒有建立真正的社交關係)

好友相似度計算:

1、基於共同關注好友的比例計算好友的相似度:
wu,v=out(u)out(v)out(u).out(v) w_{u,v} = \frac{| out(u) \bigcap out(v)|}{ \sqrt{ |out(u)| . |out(v)| } }
其中:

  • out(u)out(u) 表示 用戶 uu有關注的好友列表
  • out(v)out(v) 表示 用戶 vv有關注的好友列表

適合計算普通用戶之間的相似度

Python 效率低,可以使用spark 的 Graphx進行計算

2、基於共同被關注的用戶比例計算好友的相似度
wu,v=in(u)in(v)in(u).in(v) w_{u,v} = \frac{| in(u) \bigcap in(v)|}{ \sqrt{ |in(u)| . |in(v)| } }
其中:

  • in(u)in(u) 表示關注用戶uu的好友列表
  • in(u)in(u) 表示關注用戶vv的好友列表

適合計算大V之間的相似度

3、用戶 uu關注的用戶中,有多大比例也關注了用戶vv

wu,v=out(u)in(v)out(u).in(v) w_{u,v} = \frac{| out(u) \bigcap in(v)|}{ \sqrt{ |out(u)| . |in(v)| } }

node2vec

node2vec論文:《node2vec:Scalable Feature Learning for Networks》

network embedding就是一種圖特徵的表示學習方法,它從輸入的網絡圖中,學習到節點的表達。

node2vec的整體思路分爲兩個步驟:

  • random walk(隨機遊走),即通過一定的規則抽取一些點的序列
  • 將點的序列輸入至word2vec模型從而得到每個節點的embedding向量

random walk

隨機遊走的基本流程,給定一張圖GG和一個起始節點SS,標記起始節點位置爲當前位置,隨機選擇當前位置節點的一個鄰居並將當前位置移動至被選擇的鄰居位置,重複以上步驟nn次,最終會得到初始節點到結束節點的一條長度爲nn的“點序列”,此條“點序列”即稱爲在圖GG上的一次random walk。

從描述中可以看出random walk 算法可以分爲兩步:

  • (1)選擇起始節點
  • (2)選擇下一跳節點

起始節點選擇有兩種方法:

  • 按照一定規則隨機從圖中抽取一定數量的節點
  • 以圖中所有節點作爲起始節點(傾向於使用這種)

選擇下一跳節點最簡單的方法是按照邊的權重隨機選擇, 但是在實際應用中,希望能控制廣度優先還是深度優先,從而影響random walk能夠遊走的範圍。

一般來說深度優先便利,發現能力更強,廣度優先的方法,社區內的接待你更容易出現在一個路徑裏。

斯坦福大學計算機教授 Jure Leskovec給出了一種可以控制廣度優先或者深度優先的方法。

在這裏插入圖片描述

以上圖爲例,我們假設第一步是從 tt隨機遊走到 vv,接下來要確定下一步的鄰接節點。參數 ppqq 用以調整遊走節點的傾向。

  • pp:計算回到上一節點的概率;
  • qq:計算走到遠離上一節點的節點概率。

首先計算當前節點的鄰居節點與上一節點 tt 的距離 dd,根據公式可得 α\alpha

{1/p,d=01,d=11/q,d=2 \left\{\begin{matrix} 1/p &, d=0\\ 1 &, d=1\\ 1/q & ,d=2 \end{matrix}\right.
根據 α\alpha 的值確定下一節點的選擇概率

  • 如果 pp 大於 max(q,1)max(q, 1),那麼 1p\frac{1}{p} 小於 1q\frac{1}{q},則產生的序列與深度優先類似,剛剛被訪問過的節點不太可能被重複訪問。
  • 如果 pp 小於 min(q,1)min(q, 1),那麼 1p\frac{1}{p} 大於 1q\frac{1}{q},則產生的序列與廣度優先搜索類似,傾向於周邊節點。

至此,我們就可以通過 random walk 生成點的序列樣本。一般來說,我們會從每個點開始遊走 5~10 次,步長則根據點的數量NN 遊走 N\sqrt{N}

斯坦福大牛Jure Leskovec:圖神經網絡研究最新進展

word2vec

word2vec的核心目標:通過一個嵌入空間將每個詞的詞映射到一個空間向量上,並且使得語義上相似的單詞在該空間內距離很近。

word2vec中有兩種模型(和自編碼器的思想很相近):

  • Skip-Gram模型:輸入是中心詞、輸出是上下文
  • CBOW模型:輸入是上下文、輸出是中心詞

兩個模型的結構如下:

Skip-Gram基於成對的單詞來對神經網絡進行訓練,訓練樣本是(input word, output wor),最終模型輸出的是一個概率分佈。

CBOW輸入是n個節點(ont-hot向量的維度),上下文共2 * skip window個詞的詞向量的平均值,即上下文 2 * skip window個詞的one-hot-representation。

CBOW模型把上下文的2個詞向量求平均值“糅”成一個向量,作爲輸入。

word analogy(詞語類化)現象:指訓練出的word embedding可以通過加減法操作,來對應某種關係。比如:國王-女王~男人-女人。

4.6 冷啓動

冷啓動分類

  • 用戶冷啓動(沒有用戶的行爲數據)
    • 有效利用用戶的賬號信息
    • 利用用戶的手機IMEI號進行冷啓動(獲取設備唯一ID,根據用戶在不同APP中的行爲數據進行推薦)
    • 製造選項,讓用戶選擇自己感興趣的點,即時生產粗粒度的推薦。
  • 物品冷啓動(新物品,沒有用戶對他產生行爲)
    • 利用物品的內容信息(eg:基於語義計算相似度)
    • 利用專家的標註數據
  • 系統冷啓動(沒有用戶,也沒有用戶行爲)

深度學習技術在物品冷啓動上的應用

  • 案例一:CNN在音頻流派分類上的應用
    • 步驟:
      • 提取已知流派分類的歌曲樣本
      • 訓練一個深度神經網絡來分類歌曲
      • 使用分類器對未分類的歌曲進行流派分類
  • 案例二:人臉魅力值打分在視頻推薦中的應用
    • 實驗數據:《SCUT-FBP:A Benchmark Dataset for Facial Beauty Perception》,收集了500多個亞洲女性的臉部近照圖,label爲人工標註。
    • CNN網絡越深,梯度消失的現象就越來越明顯。因此引入了殘差網絡結構(residual network)

【技術服務】,詳情點擊查看: https://mp.weixin.qq.com/s/PtX9ukKRBmazAWARprGIAg

掃一掃 關注微信公衆號!號主 專注於搜索和推薦系統,嘗試使用算法去更好的服務於用戶,包括但不侷限於機器學習,深度學習,強化學習,自然語言理解,知識圖譜,還不定時分享技術,資料,思考等文章!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章