[Notes] NeuralCF: Neural Collaborative Filtering

Haren Lin
23 min readFeb 7, 2022

--

論文連結 Paper Link

https://arxiv.org/pdf/1708.05031v2.pdf

摘要 Abstract

近年來,深度神經網絡在語音識別(Speech Recognition)、電腦視覺(Computer Vision)和自然語言處理(NLP)取得了巨大成功。然而,在推薦系統上對深度神經網絡的探索相對較少。作者在本文提出的 Work,基於神經網路 NN 的技術,以在 implicit-feedback 的基礎上解決推薦的關鍵問題 — 協同過濾(Collaborative Filtering)。

儘管有些 Work 已經將深度學習用於推薦,但他們主要使用它於輔助信息的建模 (e.g. item 的文本描述 / 音樂的聲學特徵)。在協同過濾中的關鍵:user 和 item 特徵之間的交互進行建模時,他們仍然採用矩陣分解 (Matrix Factorization),並對 users 和 items 的潛在特徵使用單純的內積。

作者提出了一個名為 NeuralCF 的 Framework,用 NN 代替 inner-product,可以在這個框架下表達和推廣 Matrix Factorization。為了增強 non-linear 的 NeuralCF 建模,作者建議用多層感知器 MLP 來學習 user-item interaction。根據實驗,NeuralCF 有顯著改進,此外,使用較深/較多層的神經網路可以提供更好的推薦效果。

P.S. 對於 ItemCF 以及 Matrix Factorization 還不是很清楚的話,可以先看以下兩篇文章:

介紹 Introduction

個性化推薦系統的關鍵是根據 user 過去的 interactions (e.g. rating / click) 對於 user 對 item 的偏好進行建模,稱為協同過濾(Collaborative Filtering)。在各種 CF 技術中,矩陣分解 MF 是最流行的一種,它將 users 和 items 投影到 shared latent space,使用 latent vector 來表示 users 或 items。接著,users 對 items 的 interaction 被建模為其 latent vector 的 dot product。

儘管 MF 對 CF 有效,但眾所皆知它的推薦效能會受到由簡單內幾所組成的 interaction function 所阻礙。例如:對於 explicit-feedback rating prediction,MF 可透過將 users 和 items 的 bias terms 合併到 interaction function 來提高推薦品質。雖然對於內積來說,這似乎只是一個微不足道的調整,但它指出:設計一個更好的、專用的 interaction function 來建模 user 和 item 之間的 latent feature interaction 能使推薦效果更好。且,對 latent vector 簡單的線性組合與內積,可能不足以捕捉 user interaction 的複雜結構。

作者在本文使用深度神經網路從數據中學習 interaction function,這個 Work 專注於 implicit-feedback (e.g. 觀看影片、購買產品和點擊商品等行為) 間接反映 user 的偏好。與 explicit-feedback (i.e. rating and review) 相比, implicit-feedback 可以自動跟蹤,因此容易提供資料的收集。但是,使用起來更具挑戰性,因為沒有觀察到用戶滿意度,且缺乏負面反饋。在本文中,我們探討瞭如何利用 DNN 對 noisy 的 implicit-feedback 進行建模。

The main contributions of this work are as follows.

1. We present a neural network architecture to model latent features of users and items and devise a general framework NCF for collaborative filtering based on neural networks.

2. We show that MF can be interpreted as a specialization of NCF and utilize a multi-layer perceptron to endow NCF modelling with a high level of non-linearities.

3. We perform extensive experiments on two real-world datasets to demonstrate the effectiveness of our NCF approaches and the promise of deep learning for collaborative filtering.

P.S. 在這篇筆記當中 NeuralCF 即 NCF~

先備知識 Preliminaries

Learning from Implicit Data

假設 M = # of users,N = # of items,我們將從 user implicit feedback 得來的 user-item interaction matrix Y (shape = M×N) 定義為:

這裡的 yui 值為 1 代表 user & item 之間有互動,並不是代表說 user 給這個 item 正面的評價。同理,yui 值為 0 代表 user & item 之間沒有互動,並不是代表說 user 給這個 item 負面的評價。這樣子從 implicit-feedback 的數據中學習具有很大的挑戰,因為他是 noisy 的 user preference。雖然 observed item 反映了 user 對 item 的興趣,但 unobserved item 可能只是缺少數據,且自然而然缺少 negative feedback。

IMHO: 最後那句話有點類似 positive and unlabeled data 的概念!

透過 implicit feedback 的推薦問題,簡單來說就是估計那些 Y 之中的 unobserved data 然後對這些 items 進行 ranking。Model-based 的方法假設數據可以從 underlying 模型得到/描述:yui_hat = f (u, i|Θ),其中 yui_hat 表示 interaction yui 的預測分數,Θ 表示模型參數,f 表示將模型參數映射到預測分數的 interaction function。

Point-wise loss v.s. Pair-wise loss

通常我們透過優化 objective function 來估計參數 Θ。文獻中最常使用兩種類型的objective function — Pointwise loss & Pairwise loss。

Pointwise loss 的方法通常依照 regression 的 framework,通過最小化 yui_hat 與 yui 之間的 Square Error 而得。為了處理 negative data 的缺失,他們要麼將所有 unobserved data 視為 negative feedback,要麼從 unobserved data 中抽樣 negative sample。

Pairwise loss 的想法則是:observed data 應該比 unobserved data 有更好的排名。因此,Pairwise loss 不是最小化 yui_hat 和 yui 之間的 error,而是最大化 observed data yui_hat 和 unobserved data yuj_hat 之間的 margin。

本文 NeuralCF 框架使用神經網路參數化的 interaction function f 來估計 yui_hat,自然支持 Pointwise loss 和 Pairwise loss 這兩種 Learning。

Short Recap of MF

Let pu and qi denote the latent vector for user u and item i, respectively; MF estimates an interaction yui as the inner product of pu and qi. K denotes the dimension of the latent space.

MF 對 user 和 item 的 2-way interaction latent factors 進行建模,並假設 latent space 的每個維度相互獨立,以相同的權重進行線性組合。

From data matrix (a), u4 is most similar to u1, followed by u3 , and lastly u2 . However in the latent space (b), placing p4 closest to p1 makes p4 closer to p2 than p3, incurring a large ranking loss.

上圖說明了 inner product 如何限制 MF 的表達能力。首先,由於 MF 將 users 和 items 映射到相同的 latent space,所以兩個 users 之間的相似性也可以用內積來衡量,或是使用 Cosine Similarity。其次,我們使用 Jaccard 係數作為兩個 users 的 ground-truth 相似度。

上圖 a 中的前三行 users,我們很容易得到 sim23(=0.66) > sim12(=0.5) > sim13(=0.4)。因此,latent space 中 p1、p2 和 p3 的 users 幾何關係可以畫成圖 b 所示。現在,讓我們考慮一個新用戶 u4,其輸入如圖 a 中的虛線所示。我們可以得到 sim41(=0.6) > sim43(=0.4) > sim42(=0.2),這意味著 u4 與 u1 最相似,其次是 u3,最後是 u2。但是,如果 MF 模型將 p4 放置在最接近 p1 的位置,它會導致 p4 比 p3 更接近 p2,顯然這會導致很大的 ranking loss。

這個例子說明 MF 的限制,原因為只使用簡單且固定的 inner product 來估計 low-dimensional latent space 中的複雜 user-item interaction。解決這個問題的其中一種方法是使用比較大維度的 K,但它可能會對模型的泛化能力產生負面影響(e.g. Overfitting),尤其是它 Sparsity 的特性。

模型架構 Model Architecture

General Framework

NeuralCF Model Framework

如上圖所示,最底下的 Input layer 由兩個 Feature vectors 組成,分別描述 user 和 item,他們可以是 context-aware / content-based / neighbor-based 的。在這邊我們把輸入的資料轉為 One-hot encoded 的 Sparse vector。而 Input 的下一層為 Embedding Layer,事實上他就是一個 Fully Connected Layer,把 sparse vector 投影為 dense vector。這層的輸出會得到 user’s latent vector 還有 item’s latent vector,將這兩個向量傳入到多層的神經網路架構當中,我們稱之為 neural collaborative filtering layers,主要在做的事情是把 latent vector 映射到一個實質的預測分數。在 NeuralCF Layer 的每一層,他的目的為發掘 user-item interaction 的 latent structure。其中,最後一個 hidden layer 的維度會決定模型的能力。模型最後一部分則是 Output layer,輸出 prediction score yui_hat,透過最小化 yui_hat 與其 label yui 之間的 pointwise loss 來進行訓練。

現在可將 NeuralCF 的預測模型表示為:

P ∈ M×K, Q ∈ N×K, denoting the latent factor matrix for users and items, respectively. Θf = interaction function.
Interaction function. φout = Output layer. φx = x-th hidden layer’s mapping function.

為了學習模型參數,現有的 Pointwise learning 主要使用 Regression with squared loss:

Y = the set of observed interactions; Y- = the set of negative instances, which can be all or sampled from unobserved interations. wui is a hyper-parameter denoting the weight of training instance (u, i).

雖然,我們可以假設觀測值是從高斯分佈生成的,來解釋 squared loss,但作者表示這可能與 implicit data 不太吻合。因為 implicit data 的目標值 yui 是 binary 的 1 或 0,表示 user u 與 item 是否有互動,對此作者提出了一種 probabilistic model 來學 pointwise NeuralCF。

考慮到 implicit feedback 的性質,我們可以將 yui 的值視為 label:1 表示 item i 與 user u 相關,否則為 0。預測分數 yui_hat 表示 item 與 user 相關的可能性(相關程度)。為了賦予 NeuralCF 這樣的機率解釋,我們需要將輸出 yui_hat 限制在 [0,1] 的範圍內,這可以通過使用機率函數(e.g. Logistic or Probit function) 作為 output layer 的 activation function。

作者將 likelihood function 定義為:

將上式取 negative log:

這其實就是模型的 Objective function,可透過 SGD 進行參數的更新。其實,他就是 Binary Cross Entropy Loss (a.k.a. Log Loss)。

P.S. 對於 negative instances Y-,在每次迭代中從 unobserved interactions 中做 uniform sample ,且控制 sampling ratio (# of observed interactions)。

Generalized Matrix Factorization (GMF)

MF 其實是 NeuralCF 的 Special Case。由於 input layer 的 user (item) ID 的 one-hot encoding,得到的 embedding vector 可以看作是 user (item) 的 latent vector。假設 user latent vector pu 以及 item latent vector qi 如下:

user latent vector, pu
item latent vector, qi

我們將 NeuralCF’s 1st Layer 的 mapping function 定義為:

⊙ = element-wise product of vectors.

然後將向量投影到 Output Layer:

a_out = output layer’s activation function; h = output layer’s edge weights.

如果我們設 a_out 為 Identity function 且 h 為 uniform vector of 1,他其實就是 MF 模型。

這篇論文,作者在 NeuralCF 下 implement 了一個 Generalized MF,使用 sigmoid σ(x) = 1/(1 + e^−x) 作為 a_out,並透過 log loss 來學 h。作者將其稱為 GMF,即 Generalized Matrix Factorization。

Multi-Layer Perceptron (MLP)

由於 NCF 採用 2 pathways 來對 user 和 item 進行建模,把他們 extract 出來的東西 concatenate 起來很直觀。然而,這樣並沒有考慮到 user 以及 item latent factors 之間的 interaction,為了解決這個問題,作者提出的方法是:在 concatenated vector 上面加上 hidden layer,用標準的 MLP 來學習 user 和 item latent factors 之間的 interaction。從這個角度來看,我們可以賦予模型很大程度的 flexibility 和 non-linearity 來學習 pu 和 qi 之間的 interaction,而不是像 GMF 那樣只對它們使用固定的 inner product。

MLP. Wx = weight matrix. bx = bias matrix. ax = activation function.

對於 MLP 的 Activation function,可以自由選擇 sigmoid / tanh / ReLU。作者這邊分析了每個函數:

(1) sigmoid 將每個神經元限制在 (0,1) 內,這可能會限制模型的效果。此外,當神經元的輸出接近 0 或 1 時,神經元會停止學習 (saturated)。
(2) 雖然 tanh 是更好的選擇且已被廣泛使用,但它只能緩解 sigmoid 的問題,畢竟他其實是 sigmoid 的 rescaled version (tanh(x/2) = 2σ(x)-1)。
(3) ReLU,在生物學上更合理且被證明是 non-saturated;此外,它鼓勵 sparse activations,非常適合 sparse data 且比較能避免 overfitting 的問題。

作者的實驗結果顯示:ReLU > tanh >>> sigmoid。而對於網路結構的設計,常見的方式是 tower pattern,其中 bottom later 最寬,每個後續 layer 的神經元數量漸漸減少。在較高的 layer 使用較少量 hidden units,可以學習到更多抽象特徵。作者在這部分實作的方法是把每層每層的神經元數量減半。

Fusion of GMF and MLP

作者已經提出了 NeuralCF 的兩個 instantiation:(1) GMF:用 linear kernel 來對 latent feature interaction 進行建模 (2) MLP:用 non-linear kernel 學習 interaction function。問題來了:我們如何在 NeuralCF 的 Framework 下把 GMF 和 MLP 結合,使它們相互補強,從而更好的建構複雜的 user-item interaction 呢?

一個簡單直接的解決方法是讓 GMF 和 MLP 共享相同的 Embedding Layer,然後對他們各自的 interaction function’s output 進行組合 (c.f. Neural Tensor Network, NTN)。具體來說,將 GMF 與 One-layer MLP 相結合的模型可以表示為:

pu = user’s latent vector; qi = item’s latent vector; pu ⊙ qi ∈ GMF; w[]+b ∈ MLP; a() = activation function; h = output layer; σ() = output layer’s activation function, sigmoid.

但是,GMF 和 MLP 共享 Embedding 可能會限制融合模型的效果。怎麼說呢?如果共用 Embedding 代表 GMF 和 MLP 必須使用相同大小的 Embedding,那麼對兩個模型的最佳 Embedding 大小差異很大的資料集來說,這個解決方案可能無法做到 Optimal。

為了給融合模型提供更大的靈活性,我們允許 GMF 和 MLP 學習各自的 Embedding,並 concatenate 他們的最後的 hidden layer 來組合這兩個模型。(如下圖)

Neural Matrix Factorization Model (NeuMF)
pGu = user embedding for GMF; qGi = item embedding for GMF
pMu = user embedding for MLP; qMi = item embedding for MLP; a() = ReLU = activation function for MLP

這樣的模型結合了 MF 的 linearity 和 DNN 的 non-linearity,我們稱之 Neural Matrix Factorization (NeuMF)。由於 NeuMF 的 Objective function 是 non-convex,基於梯度的優化方法只能找到局部最佳解。由於 NeuMF 是 GMF 和 MLP 的 Ensemble,作者建議使用 GMF 和 MLP 的 Pretrain 來初始化 NeuMF,利於模型的收斂。

首先,用隨機的方式初始化,訓練 GMF 和 MLP 直到收斂。接著,使用它們的參數作為 NeuMF 的 Initialization。唯一的調整是在 Output layer,我們將兩個模型的 weights 進行 concatenate:

hGMF = h vector for pre-trained GMF; hMLP = h vector for pre-trained MLP; α is a hyper-parameter determining the trade-off between the two pre-trained models.

為了從頭開始訓練 GMF 和 MLP,作者採用 Adaptive Moment Estimatio (Adam),對頻繁的參數執行較小的更新和對不頻繁的參數執行較大的更新來調整每個參數的 learning rate。Adam 方法對 GMF 和 MLP 的收斂速度都比 Vanilla SGD 來的快,並減輕調整 learning rate 的痛苦。將 Pretained 好的參數輸入 NeuMF 後,就使用 Vanilla SGD 而不是 Adam 來優化。因為 Adam 需要保存 momentum information 以正確更新參數。而我們僅使用 Pretrained 的參數初始化 NeuMF 並放棄保留 momentum information,因此不適合使用基於 momentum 的方法進一步優化 NeuMF。

實驗 Experiment

P.S. 這部分我先說聲對不起。因為這篇筆記的用意以模型架構的理解為重,因此實驗的部分僅附圖,文字敘述省略。詳細解釋請回顧原論文~

結論 Conclusion

在這項工作中,作者探討 Collaborative Filtering 的 NN 架構:設計了一個 Generalized Framework of NeuralCF 並提出了三個 instantiation 的方法:GMF / MLP / NeuMF,基於 users 和 items 的 Embedding Layer,靈活利用不同的 interaction 進行特徵交換與組合來學習。這個 Work 補述了協同過濾的 Mainstream Shallow Model (i.e. Inner Product MF),為基於 deep learning 的 recommendation 開創了一個新的研究方向。

不過,在實作中需要特別注意:模型並不是越深越複雜越好、特徵也不是越多越好。一來我們要防止 Overfitting 發生,二來是需要比較多的訓練時間等待模型收斂。

參考資料 Reference

  1. Paper With Code

2. 他人論文筆記 @ CSDN

3. 他人論文筆記 @ 知乎

This article will be updated at any time! Thanks for your reading. If you like the content, please click the “clap” button. You can also press the follow button to track new articles. Feel free to connect with me via LinkedIn or email.

--

--

Haren Lin
Haren Lin

Written by Haren Lin

MSWE @ UC Irvine | MSCS @ NTU GINM | B.S. @ NCCU CS x B.A. @ NCCU ECON | ex-SWE intern @ TrendMicro

No responses yet