推薦系統實踐 0x11 NeuralCF
前言
這一篇文章我們來談一下2017年新加坡國立大學提出的基於深度學習的系統過濾模型NeuralCF。我們在之前講過矩陣分解技術,將協同過濾中的共現矩陣分解成用戶向量矩陣以及物品向量矩陣。那麼Embedding的思路也是一樣的,只不過不是通過矩陣分解的形式,而是通過多層神經網絡使用Embedding構造用戶隱向量以及物品隱向量。用戶隱向量與物品隱向量的內積,就是用戶對物品的評分。這個內積的操作,同樣可以使用神經網絡層來實現,也就是前一篇文章所用的Scoring層,得到所謂的「相似度」,也就得到了評分。在實際使用中,我們往往會發現矩陣分解的模型會得到欠擬合的結果,所以深度學習可以彌補矩陣分解的結構簡單,擬合不充分的弊端。論文原文以及我找到的一篇全文翻譯的博文我貼在參考裏面了,有興趣的讀者可以閱讀一下。
網絡結構
NeuralCF的網絡結構如下圖所示:
這裡使用一個用戶和一個物品作為輸入特徵,它使用one-hot編碼將它們轉化為二值化稀疏向量。注意到,對輸入使用這樣的通用特徵表示,可以很容易地使用的內容特徵來表示用戶和物品,以調整解決冷啟動問題。文章使用了多層感知機(Layer1-X)來代替了之前的內機操作,最終得到了評分。這樣做的原因:
- 可以使得用戶向量和物品向量充分交叉,得到更多有價值的特徵組合
- 可以引入更多的非線性特徵讓模型的表達能力更強
輸入層上面是嵌入層(Embedding Layer);它是一個全連接層,用來將輸入層的稀疏表示映射為一個稠密向量(dense vector)。所獲得的用戶(物品)的Embedding(就是一個稠密向量)可以被看作是在潛在因素模型的上下文中用於描述用戶(項目)的潛在向量。然後我們將用戶Embedding和物品Embedding送入多層神經網絡結構,我們把這個結構稱為神經協作過濾層,它將潛在向量映射為預測分數。NCF層的每一層可以被定製,用以發現用戶-物品交互的某些潛在結構。最後一個隱含層Layer X的維度大小決定了模型的能力。
實際上,用戶和商品的互操作可以使用任意的互操作形式,這也就是廣義矩陣分解(GMF)。那麼,這篇文章使用了元素積,也就是逐元素點乘(element-wise product)的形式,將用戶向量和物品向量映射到同等維度大小的空間當中,然後對應維度相乘,這樣就實現了互操作,最後再送入邏輯回歸層等輸出層,擬合最終的預測目標。GMF,它應用了一個線性內核來模擬潛在的特徵交互;MLP,使用非線性內核從數據中學習交互函數。接下來的問題是:我們如何能夠在NCF框架下融合GMF和MLP,使他們能夠相互強化,以更好地對複雜的用戶-物品交互建模?為了解決這個問題,這篇文章將多種互操作結合起來,如傳統矩陣分解,多層感知機映射這兩種形式進行,然後也是用了兩種互操作,逐元素點乘以及多層感知機,如下圖所示。
對於結合GMF和單層MLP的模型形成數學公式的話如下所示:
\]
整體的框架中的公式可以如下:
\]
這裡的\(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–神經協同過濾