論文|被“玩爛”了的協同過濾加上神經網絡怎麼搞?

相信熟悉推薦系統的同學對於協同過濾(Collaborative Filtering)已經熟悉的不能再熟悉了,我也相信很多人心裏在想“這麼簡單的協同,都2020年了,誰還用呀”。

俗話說得好,人不可貌相,海水不可斗量!CF作爲最早的推薦算法,基於CF的改進在學術界和工業界應用的十分廣泛,就在之前介紹的一篇論文裏,介紹了騰訊實時ItemCF的實現和應用,所以說可千萬別小瞧協同過濾了。

本篇論文主要介紹新加坡國立大學在17年發表的論文:Neural Collaborative Filtering(神經網絡協同過濾),這篇論文主要介紹的點有:

  • 協同過濾優化技巧中矩陣分解(MF)的限制
  • 如何基於神經網絡優化協同過濾

背景

在信息爆炸時代,推薦系統扮演着及其重要的角色,而且在很多在線服務上也應用的十分廣泛,比如:電商網站、內容網站、社會媒體網站等。個性化推薦系統的關鍵是如何基於用戶過去一段時間對物品的行爲信息進行建模,最著名的屬協同過濾(Collaborative Filtering,CF),在各式各樣的CF技術中,矩陣分解(Matrix factorzation,MF)是應用的最廣泛的。MF將用戶和物品映射到同一個潛在的空間中,用一個潛在的向量特徵來表示一個用戶或者物品,然後將用戶與物品的向量內積來表示用戶對物品的喜好。

儘管MF對於協同過濾非常有效,但是通過簡單的內積計算會影響MF的效果。例如對於顯式反饋的評分預測任務,可以通過合併用戶和物品的評分偏差來改善MF的內積計算。對於內積計算操作而言,這可能只是一個很小的改動,但它正向的指出了設計一個更好的、專用的交互方式來對用戶和物品的行爲進行建模。僅僅使用線性相乘的內積計算不足以捕獲複雜的用戶交互行爲。

儘管現在DNN在推薦中應用的比較廣泛,但大多數是用戶來進行預測建模,在協同過濾方面,仍基於MF來進行計算。本論文主要是利用神經網絡來解決MF在協同過濾中的限制,而且論文基於的是用戶的隱式反饋數據,與顯式反饋相比,隱式反饋可以更加容易的收集用戶數據,但也充滿了挑戰性,因爲無法真實的反饋用戶滿意程度,而且缺乏一些自然的反饋數據。

本篇論文主要探索瞭如何基於對充滿噪聲的隱式反饋數據進行建模,主要貢獻有以下三點:

  • 提出了一種神經網絡架構來對用戶和物品的潛在特徵進行建模,併爲基於神經網絡的協同過濾設計了通用的框架NCF
  • 證明了MF可以被解釋爲NCF的一個特例,並利用多層感知器增加NCF模型的高度非線性。
  • 基於兩個真實的數據集證實了NCF的有效性

基礎知識

1、瞭解隱式反饋數據

MNM、N表示用戶和物品的數目,用YRMNY \in R^{M\ast N}表示用戶對物品的隱式反饋,如果用戶uu對物品ii有行爲,則yui=1y_{ui}=1,否則爲0。yui=1y_{ui}=1表示用戶與物品之間存在交互,但這並不意味着用戶uu喜歡物品ii,同樣yui=0y_{ui}=0也不能表示用戶uu不喜歡物品ii,可能是用戶uu並沒有注意到物品ii

使用隱式反饋數據的推薦問題被形式化的用來估計用戶uu對物品ii的得分,繼而使用這些得分進行排序。基於模型的方法則認爲數據可以通過一個底層模型來描述,通常這個底層模型被抽象的認爲是y^ui=f(u,iΘ)\hat{y}_{ui} = f(u,i | \Theta )y^ui\hat{y}_{ui}表示預測分,Θ\Theta表示模型的參數,ff則表示將模型參數轉換爲預測分的一個映射。

爲了計算模型的參數Θ\Theta,現有的一些方法遵循機器學習的規則-優化目標函數。在研究中,主要有兩種目標函數:PairWise Loss和PointWise Loss。在PointWise 方式中,通常遵循的是迴歸框架,即最小化y^u,iyu,i\hat{y}_{u,i}、y_{u,i}之間的誤差。爲了處理數據缺失的問題,則將未觀察到的條目視爲負反饋數據或者將觀察到的反饋中負面樣例作爲負反饋數據。PiarWise 則認爲觀察到的樣例(正樣本)應該比未觀察到的樣例(負樣本)得分高。因此代替了pointwise中的最小化方式,pairwise優化的目標是最大化觀察到的樣例(正樣本)和未觀察到的樣例(負樣本)。

而本文提出的NCF框架則利用神經網絡求解參數Θ\Theta,繼而來估計y^ui\hat{y}_{ui},支持pointwise 和 pairwise。

關於 pointwise、pairwise、listwise可以參考之前發的一篇文章:怎麼理解基於機器學習“四大支柱”劃分的學習排序方法

2、矩陣分解(MF)

MF將每個用戶和物品的聯繫用潛在的向量特徵來表示,用pup_uqiq_i分別表示用戶和物品的隱含的向量,MF的計算方式是 puqip_u、q_i的內積,如下所示:
y^ui=f(u,ipu,qi)=puTqi=k=1Kpu,kqi,k \hat {y}_{ui} = f(u,i | p_u,q_i) =p_u ^T q_i = \sum_{k=1}^{K} p_{u,k}q_{i,k}
其中KK表示隱含向量的長度。

如公式所示,假設用戶和物品的每個維度的隱含特徵都是彼此獨立的,並以相同的權重進行線性組合,則MF是對用戶和物品的隱含向量進行雙向建模。從這個維度理解,MF可以看作是隱含向量的線性模型。

MF

上圖展示了MF使用內積進行計算的限制,爲了說明示例,有兩個限制:

  • 使用內積方式或者餘弦相似度進行計算時,用戶和物品的隱含向量特徵維度必須一致
  • 使用jaccard相似計算修正計算兩個用戶的相似度

從上圖(a)可以看出,s23(0.66)>s12(0.5)>s13(0.4)s_{23}(0.66) > s_{12}(0.5) > s_{13}(0.4),即u2u3u_2、u_3之間的相似度 > u1u2u_1、u_2之間的相似度 > u1u3u_1、u_3之間的相似度,可以將他們映射到圖(b)所示的空間中,當一個新的用戶u4u_4加入比較時,可以很容易的比較兩兩用戶之間的相似度,s41(0.6)>s43(0.4)>s41(0.2)s_{41}(0.6) > s_{43}(0.4) > s_{41}(0.2),但是如果將u4u_4在圖(b)中展示時,會發現和p4p_4最接近的順序爲:p1,p2,p3p_1, p_2, p_3,和我們計算的結果並不一致。

上圖說明了,在低維場景下,使用內積方式的限制。一種解決辦法是擴大隱含向量的維度,但是會影響模型的泛化能力,而且也會增大計算量。爲了解決這個問題,論文中引入了DNN來解決內積方式的侷限性。

神經網絡協同過濾

1、NCF框架

a. 框架介紹

NCF框架

一個通用的NCF框架如上圖所示,最下面的input爲vuU,viIv^U_u,v^I_i表示的是用戶和物品的特徵向量(這裏是進行了ID的onehot編碼),同時這裏支持進行自定義繼而對用戶和物品進行建模,比如:上下文、基於內容、最近鄰等。這種通用的內容輸入,可以輕易的解決新用戶的冷啓動問題。

Input Layer輸入的是稀疏向量,經過Embedding Layer轉轉化爲稠密向量,之後向量被傳入到多層的神經網絡,這一整塊被稱爲 Neural CF Layers,最後一層稱爲 Output Layer,輸出層的維度決定了模型的功能,輸出的y^ui\hat{y}_{ui}爲預測分值,模型訓練的目標是最小化y^uiyui\hat{y}_{ui}、y_{ui}之間的誤差,基於point wise方式的損失函數進行優化(關於point wise、pair wise、list wise的區別可以參考: LTR|怎麼理解基於機器學習“四大支柱”劃分的學習排序方法)。

定義NCF框架預測模型爲:
y^u,i=f(PTvuU,QTviIP,Q,Θf) \hat{y}_{u,i} = f( P^T v^U_u , Q^Tv^I_i| P,Q,\Theta_f)
其中:

  • P,QP, Q表示用戶和物品的隱向量
  • Θf\Theta_f表示函數ff的參數

函數 ff被定義爲多層神經網絡,其表達式爲:
f(PTvuU,QTviI)=ϕout(ϕX(...ϕ2(ϕ1(PTvuU,QTviI))...)) f( P^T v^U_u , Q^Tv^I_i) = \phi_{out}( \phi_X ( ... \phi_2(\phi_1(P^T v^U_u , Q^Tv^I_i)) ... ) )
其中:

  • ϕout\phi_{out} 表示輸出層
  • ϕx\phi_x 表示第xx層,總共有XX

b. 參數學習

爲了計算模型的參數,pointwise中通用的方法是平方損失(Squard loss),對應的表達式如下:
Lsqr=(u,i)YYwu,i(yuiy^ui)2 L_{sqr} = \sum_{(u,i) \in Y \cup Y^-} w_{u,i} ( y_{ui} - \hat{y}_{ui}) ^2
其中:

  • YY 表示正樣本
  • YY^- 表示負樣本(可以是全部負樣本,也可以是抽樣後的)

雖然可以通過假設觀測值是從高斯分佈中生成的來解釋平方損失函數,但對於隱式反饋數據可能無法很好的擬合,因此,論文中提出了一種基於概率的方法來學習 point wise方法的NCF,他能夠很好的捕獲隱式反饋數據。

對於輸出的y^ui\hat y_{ui}需要將其限定在[0,1],可以通過概率函數來實現(比如:Logistic 函數 或者 probit 函數)。

定義NCF的似然函數爲:
p(Y,YP,Q,Θf)=(u,i)yy^ui(u,i)y(1y^ui) p(Y, Y^-| P,Q,\Theta_f) = \prod_{ (u,i) \in y} \hat y_{ui} \prod_{(u,i) \in y^-} (1-\hat y_{ui})
接着取負對數,可以得到最小化NCF的目標函數(參數求解可以通過SGD進行),如下所示:
L=(u,i)ylogy^ui(u,i)ylog(1y^ui)=(u,i)yyyuilogy^ui+(1yui)log(1y^ui) L = - \sum_{(u,i) \in y} log \, \hat y_{ui} - \sum_{(u,i) \in y^-} log \, (1 - \hat y_{ui} ) \\ = - \sum_{(u,i) \in y\cup y^-} y_{ui} \, log \, \hat y_{ui} +(1 - y_{ui} ) log \, (1 - \hat y_{ui} ) \\

上述供水和交叉熵損失函數比較相似,也是log loss中的一種,這裏通過對NCF進行概率函數映射,可以將隱式反饋轉化爲二進制分類解決推薦問題。

2、GMF(Generalized Matrix Factorization)

NeuMF

GMF對應Figure 3 中的左半部分,用pup_u表示用戶的隱向量,用qiq_i表示物品的隱向量,可以定義GMF的函數爲:
ϕ1(pu,qi)=puqi \phi_1(p_u, q_i) = p_u \odot q_i
\odot表示內積計算。將結果傳到輸出層,對應的計算公式爲:
y^ui=aout(hT(puqi)) \hat y_{ui} = a_{out}(h^T(p_u \odot q_i))
其中:

  • aouta_{out} 表示激活函數,本論文中用的是σ(x)=1 (1+ex)\sigma (x) = 1 \ (1 + e^{-x})
  • hh 表示權重向量,使用 上文中的 log loss進行學習

3、MLP(Multi-Layer Perception)

簡單的向量內積並不能捕獲到用戶和物品之間的交互信息,因此本論文通過使用MLP(Multi-Layer Perception)在連接的向量計算過程中增加隱藏層,以捕獲用戶和物品之間的交互,如Figure 3中的右半部分。

通過這種方式,可以賦予模型較大的靈活度和非線性,在NCF框架下MLP被定義爲:
z1=ϕ1(pu,qi)=[puqi] z_1 = \phi_1 ( p_u, q_i) =\begin{bmatrix} p_u\\ q_i \end{bmatrix}

ϕ2(z1)=a2(W2Tz1+b2)... \phi_2(z_1) = a_2 (W^T_2z_1 + b_2) ...
ϕL(zL1)=aL(WLTzL1+bL1) \phi_L(z_{L-1}) = a_L (W^T_Lz_{L-1} + b_{L-1})
y^ui=σ(hTϕL(zL1)) \hat y_{ui} = \sigma (h^T \phi _L(z_{L-1}))
MLP模型的激活函數選用的ReLU(還有sigmoid,tanh可以供選擇),原因是:

  • sigmoid 函數在橫座標接近正負無窮時,輸出值接近 1或0,會導致神經元停止學習
  • tanh 函數可以有sigmoid轉化得到(tanh(x/2)=2σ(x)1tanh(x/2) = 2\sigma (x) -1),會造成同樣的問題
  • ReLU更符合生物學,且兩端不飽和,同時ReLU非常適合稀疏函數,不會導致過擬合。

4、NeuMF(Neural Matrix Factorization)

a. NeuMF介紹

NeuMF則是GMF和MLP的結合,整體模型的思路如Figure 3所示,整體模型的表達式爲:
y^ui=σ(hTa(puqi+W[puqi]+b)) \hat {y}_{ui} = \sigma (h^T a(p_u \odot q_i + W \begin{bmatrix} p_u\\ q_i \end{bmatrix}+ b))

從圖中可以看出,如果共享GMF和MLP的Embedding會限制模型融合的性能,比如必須保證相同長度的隱向量。

因此,GMF和MLP模型分開進行訓練,在最後一層時進行連接,整體表達式可以表示爲:
ϕGMF=puGqiG \phi ^{GMF} = p^G_u \odot q^G_i
ϕMLP=aL(WLTaL1(...a2(W2T[puMqiM]+b2)...))+bL \phi^{MLP} = a_L( W^T_L a_{L-1}(... a_2(W^T_2 \begin{bmatrix} p^M_u\\ q^M_i \end{bmatrix} + b_2)... ))+b_L
y^ui=σ(hT[ϕGMF  ϕMLP]) \hat y_{ui} = \sigma (h^T \begin{bmatrix} \phi ^{GMF}\ \ \phi^{MLP} \end{bmatrix} )

MLP層採用的是ReLU激活函數。

b. 預訓練

由於NeuMF目標函數是非凸的,所以基於梯度的優化方法只能找到局部最優解,而且初始化對於深度學習模型的收斂和性能有着重要的作用,因此這裏採用的方法是先對GMF和MLP分開進行參數初始化,接着對兩個模型進行訓練,基於訓練的結果初始化NeuMF的兩部分參數。
h[ahGMF(1a)hMLP] h \leftarrow \begin{bmatrix} a h^{GMF}\\ (1-a) h^{MLP} \end{bmatrix}
優化方法採用的Adma。通過對頻繁更新的參數進行較小的更新,對於不頻繁更新的參數進行較大的更新,來調整參數的學習率。

實驗

實驗分爲三部分進行,分別說明了以下三個問題:

  • 基於NCF框架的方法是否優於最新的隱式協同過濾方法?
  • 論文中提出的優化框架(帶有負採樣的對數損失)如何應用於推薦任務?
  • MLP多層神經網絡是否有利於用戶和物品之間的行爲交互?

答案肯定都是OK的,否則也不會發表成論文,哈哈 開玩笑!

實驗所採用的數據集有兩個:

  • MovieLens
  • Pinterest

數據集的描述如下:
數據集的描述

關於實驗的技巧如下:

  • 訓練集和測試集的拆分,按照時間的順序進行拆分,最接近當前時間的爲測試集
  • 隨機選取訓練集中用戶沒有行爲的100個物品作爲測試集中的物品,因爲整體的物品太多,測試過程消耗資源和時間,不利於實驗
  • 每個評估指標取top 10物品進行評測
  • 實驗的指標:Hit Ratio、Nor- malized Discounted Cumulative Gain (NDCG)
  • 實驗採用的對比模型有:ItemPop、ItemKNN、BRP、eALS

問題一的實驗:

結果如下:

實驗結果

下表則展示了有預訓練GMF、MLP和沒有預訓練的結果對比:

是否有預訓練對比

問題二的實驗:

基於NCF框架進行的實驗中主要是三種算法的對比:GMF
、MLP、NeuMF,在這三種算法中性能對比結果爲:NeuMF > MLP > GMF,如Figure 6所示。

在Figure 7 中展示了不同的負採樣率和評估指標之間的關係,每個正樣本只有一個負樣本不足以實現最佳性能,而對更多的負實例進行採樣則是有益的。

問題2實驗

問題三的實驗:

具有不同數量隱藏層的MLP對實驗結果的影響如下:

HR
NDCG

結果表明使用深度模型進行協作推薦的有效性。


至此,論文的內容已經閱讀完成,關於文中算法的代碼實現可以參考:《Neural Collaborative Filtering》NCF模型的理解以及python代碼


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

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


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