推薦系統實踐 0x11 NeuralCF

前言

這一篇文章我們來談一下2017年新加坡國立大學提出的基於深度學習的系統過濾模型NeuralCF。我們在之前講過矩陣分解技術,將協同過濾中的共現矩陣分解成用戶向量矩陣以及物品向量矩陣。那麼Embedding的思路也是一樣的,只不過不是通過矩陣分解的形式,而是通過多層神經網絡使用Embedding構造用戶隱向量以及物品隱向量。用戶隱向量與物品隱向量的內積,就是用戶對物品的評分。這個內積的操作,同樣可以使用神經網絡層來實現,也就是前一篇文章所用的Scoring層,得到所謂的「相似度」,也就得到了評分。在實際使用中,我們往往會發現矩陣分解的模型會得到欠擬合的結果,所以深度學習可以彌補矩陣分解的結構簡單,擬合不充分的弊端。論文原文以及我找到的一篇全文翻譯的博文我貼在參考裏面了,有興趣的讀者可以閱讀一下。

網絡結構

NeuralCF的網絡結構如下圖所示:

這裡使用一個用戶和一個物品作為輸入特徵,它使用one-hot編碼將它們轉化為二值化稀疏向量。注意到,對輸入使用這樣的通用特徵表示,可以很容易地使用的內容特徵來表示用戶和物品,以調整解決冷啟動問題。文章使用了多層感知機(Layer1-X)來代替了之前的內機操作,最終得到了評分。這樣做的原因:

  1. 可以使得用戶向量和物品向量充分交叉,得到更多有價值的特徵組合
  2. 可以引入更多的非線性特徵讓模型的表達能力更強

輸入層上面是嵌入層(Embedding Layer);它是一個全連接層,用來將輸入層的稀疏表示映射為一個稠密向量(dense vector)。所獲得的用戶(物品)的Embedding(就是一個稠密向量)可以被看作是在潛在因素模型的上下文中用於描述用戶(項目)的潛在向量。然後我們將用戶Embedding和物品Embedding送入多層神經網絡結構,我們把這個結構稱為神經協作過濾層,它將潛在向量映射為預測分數。NCF層的每一層可以被定製,用以發現用戶-物品交互的某些潛在結構。最後一個隱含層Layer X的維度大小決定了模型的能力。

實際上,用戶和商品的互操作可以使用任意的互操作形式,這也就是廣義矩陣分解(GMF)。那麼,這篇文章使用了元素積,也就是逐元素點乘(element-wise product)的形式,將用戶向量和物品向量映射到同等維度大小的空間當中,然後對應維度相乘,這樣就實現了互操作,最後再送入邏輯回歸層等輸出層,擬合最終的預測目標。GMF,它應用了一個線性內核來模擬潛在的特徵交互;MLP,使用非線性內核從數據中學習交互函數。接下來的問題是:我們如何能夠在NCF框架下融合GMF和MLP,使他們能夠相互強化,以更好地對複雜的用戶-物品交互建模?為了解決這個問題,這篇文章將多種互操作結合起來,如傳統矩陣分解,多層感知機映射這兩種形式進行,然後也是用了兩種互操作,逐元素點乘以及多層感知機,如下圖所示。

對於結合GMF和單層MLP的模型形成數學公式的話如下所示:

\[\widehat{y}_{ui}=\sigma({\bf h}^{T}a({\bf p}_u\odot{\bf q}_i)+{\bf W}\begin{bmatrix}{{\bf p}_u}\\{{\bf q}_i}\end{bmatrix}+{\bf b})
\]

整體的框架中的公式可以如下:

\[\phi^{GMF}={\bf p}_u^G\odot{\bf q}_i^G,\\\phi^{MLP}=a_{L}(W_L^T(a_{L-1}(…a_{2}(W_2^T\begin{bmatrix}{{\bf p}_u^M}\\{{\bf q}_i^M}\end{bmatrix}+{\bf b}_2)…))+{\bf b}_L),\\\widehat{y}_{ui}=\sigma({\bf h}^T\begin{bmatrix}{\phi^{GMF}}\\{\phi^{MLP}}\end{bmatrix})
\]

這裡的\(p^G_u\)\(p^M_u\)分別表示GMF部分和MLP部分的用戶嵌入(user embedding);同樣的,\(q^G_i\)\(q^M_i\)分別表示項目的Embedding。

小結

多種用戶向量、物品向量的Embedding,以及多種互操作形式進行特徵的交叉組合,可以靈活的進行拼接,同時也利用了神經網絡對任意函數的擬合能力,按需增加複雜度或者減小複雜度。但是NeuralCF並沒有引入其他類型的特徵,使得很多有價值的信息浪費。同時,互操作的選取也沒有給出更多說明,只有在實踐中進行探討了。

參考

Neural Collaborative Filtering
【翻譯】Neural Collaborative Filtering–神經協同過濾