论文: Neural Collaborative Filtering

代码: https://github.com/hexiangnan/neural_collaborative_filtering

论文简介

Neural Collaborative Filtering(点击阅读论文)

作者成文之前,神经网络在很多领域(语音识别、计算机视觉、自然语言处理等)都取得了很高的成绩,但是在推荐系统方向的应用还有待进一步的探索和研究。在 NCF 这篇文章中,作者尝试了一些神经网络模型来解决推荐系统中的一个关键问题:协同过滤

在已有的一些神经网络应用到推荐系统的工作中,主要依赖于 user 和 item 相关的一些辅助信息(文本描述、声学特征等)来建模。对 user 和 item 之间的 interaction 的建模(协同过滤建模的关键因素)大都依赖于 matrix factor-ization (矩阵分解)和对 user 和 item 的隐特征使用内积计算。

作者使用神经网络来代替内积(神经网络能逼近任意连续函数)进行自动表征学习,并提出了一个通用的框架 NCF(Neural network-based Collaborative Filtering) ,通过多层感知机引入非线性来学习 user–item interaction function 。使用作者提出的 NCF 架构的模型在两个公开数据集上的试验结果都超过了 SOTA 模型。

创新点

NCF 框架

一种基于神经网络建模 user 和 item 之间的 latent features 的通用协同过滤框架

MF 的基础上引入了非线性

解释了 MF 可以被解释为 NCF 的一种特例,并通过 MLP 引入了非线性

证明了 deep learning for col-laborative filtering 是可行的

基于 NCF 框架提出的几个模型在两个公开数据集上的结果超过了 SOTA,证明了深度学习模型能够有效的解决协同过滤问题

相关理论

隐式数据学习(Learning from Implicit Data

We define the user–item interaction matrix Y = \R^{U \times I} from users’ implicit feedback as,

y^{ui} = \begin{cases} 1 &\text{if } \text{interaction (useru, itemi) is observed} \\ 0 &\text{if } \text{otherwise} \end{cases}

where U denotes the number of users, and I denotes the number of items.

inter-action function can be abstracted as learning \hat y_{ui}=f(u,i|\Theta)

\Theta 的估计有两种常见的目标函数:pointwise losspairwise loss

pointwise loss 的方法通常使用回归模型,通过最小化 \hat y_{ui}y_{ui} 之间的平方损失得到 \Theta 的估计值;pairwise loss 的方法通过最大化观测数据点 \hat y_{ui}y_{ui} 之间的边际效应来得到 \Theta 的估计值。(the idea is that observed entriesshould be ranked higher than the unobserved ones.

基于神经网络的 NCF 框架在参数 \Theta 的估计是天然的支持 pointwise and pairwise learning

矩阵分解(Matrix Factorization

MF estimates an interaction y_{ui} as the inner product of p_u and q_i:

\hat y_{ui} = f(u,i|p_u,q_i) = p_u^T q_i = \sum_{k=1}^Kp_(uk)p_{ik}

where p_u and q_i denote the latent vector for user u and item i, respectively; K denotes the dimension of the latent space.

MF 假设 useritemlatent factors 相互独立且权重相同,可以被视为一种线性的隐空间特征编码器。MF 有很大的局限性,对于复杂的 user 和 item 之间的 interaction 建模可能会造成很大的 ranking loss。可以通过增加隐空间的大小来解决 MF 的局限性,但高维稀疏的隐空间会使模型的泛化能力降低。

神经网络协同过滤 (Neural network-based Collaborative Filtering, NCF

通用框架(General Framework

输入

user u 的特征向量 v_u 和 item 的特征向量 v_i ,由于作者的工作重心是关注协同过滤建模,所以作者只用了单个用户和单个商品 one-hot 编码后的向量作为输入(用户可以根据自己的实际需求进行改造)。NCF 框架的输入可以调整为用户和商品相关的辅助信息来解决冷启动的问题。

输出

\hat y_{ui}

训练

通过最小化 pointwise loss between \hat y_{ui} and its target value y_{ui} 来得到最优的模型参数 \Theta 的估计值,也可以通过 pairwise learning 的方法(Bayesian Personalized Ranking 或者 margin-based loss)得到训练模型

损失函数

现存的大部分模型都是最小化平方损失函数来得到模型,损失如下:

L_{sqr} = \sum_{(u,i)\in \mathcal Y \cup \mathcal Y^- } w_{ui}(y_{ui}-\hat y_{ui})^2

where \mathcal Y denotes the set of observed interactions in Y, and \mathcal Y^− denotes the set of negative instances, which can be all (or sampled from) unobserved interactions.

虽然平方损失可以通过假设观测结果是由高斯分布产生来解释,y_{ui} 是一个二值化的 0-1 标签,表示user u 是否与 item i 交互,可能与隐式数据不符。

作者将 user u 与 item i 之间的交互 y_{ui} 看作是两者之间的相关性,通过 NCF 将输出的 \hat y_{ui} 限制到 [0, 1] 之间,将隐式反馈的推荐作为一个二分类问题来解决,重新定义了 NCF 方法最小化的目标函数为输出概率的负对数,并通过 SGD 算法来对参数进行优化。

广义矩阵分解(Generalized Matrix Factorization,GMF

作者将 MF 解释为 NCF 框架的一个特例

user v_u 通过 embedding 后的隐向量 p_u = P^Tv_u^U 和 item v_i 通过 embedding 后的隐向量 q_i = Q^Tv_i^I

定义CF第一层的映射函数为:

\phi (p_u,q_i)=p_u \odot q_i

where \odot denotes the element-wise product of vectors.

将向量投影到输出层:

\hat y_{ui} = a_{out}(h^T(p_u \odot q_i))

where a_{out} and h denote the activation function and edgeweights of the output layer.

如果将 a_{out} 使用恒等函数,h1 的向量,就将 NCF 恢复成了 MF 模型。

其中,如果不限定 h ,那么 MF 模型的变体允许潜在维度的重要性变化;如果将 a_{out} 变为非线性函数,就能把 MF 模型推广到一个具有非线性表达能力的模型。

多层感知机(Multi-Layer Perceptron,MLP

NCF 采用单独建模 user 和 item 的隐空间向量,并将两者拼接起来学习 user 和 item 之间的 interaction。简单的通过拼接向量并不适用于任何 user 和 item 之间的 interaction,所以作者建议在连接的向量上添加隐藏层,使用一个标准的MLP来学习用户和物品潜在特征之间的交互。

NCF 框架中的 MLP 层的激活函数,可以自由选择 sigmoid、tanh 和 ReLU 等函数。实验结果表明,ReLU 的性能略好于 tanh,而 tanh 的性能又明显好于 sigmoid。

神经矩阵分解(Fusion of GMF and MLP,NeuMF

GMF 采用线性核函数对潜在特征交互进行建模,MLP 采用非线性核函数从数据中学习交互函数。接下来的问题是:我们如何在 NCF 框架下融合 GMF 和 MLP ,使得它们可以相互增强,从而更好地对复杂的 user-item 矩阵迭代交互进行建模。

通过两个 embedding 分别学习 user 和 item 的隐空间向量,使用 ReLU 作为 MLP 层的激活函数,并通过拼接 GMF 和 MLP 最后一层的向量来预测 \hat y_{ui}

该模型结合了 MF 的线性和 DNNs 的非线性,能够建模 user- item 之间的隐含结构。

预训练(Pre-training

由于 NeuMF 目标函数的非凸性,基于梯度的优化方法只能找到局部最优解,初始化对深度学习模型的收敛性和性能起着重要的作用,作者建议使用 GMF 和 MLP 的预训练模型初始化 NeuMF。

作者在预训练时采用 Adam 优化器而非 SGD 优化器来优化 NeuMF ,两种模型中都能获得更快的收敛速度,并且减轻了调整学习速率的痛苦。将预先训练好的参数输入到 NeuMF 后,我们用 SGD 优化它,而不是 Adam。这是因为Adam需要保存动量信息来正确更新参数。由于我们只使用预先训练好的模型参数初始化NeuMF,而放弃保存动量信息,因此,使用基于动量的方法进一步优化NeuMF是不合适的。

实验(EXPERIMENTS

实验主要回答了下面三个问题:

问题1:本文提出的NCF方法是否优于目前最先进的隐式协同过滤方法?

问题2:提出的优化框架(采用负采样的log损失)如何工作于推荐任务?

问题3:更深层次的隐藏单元是否有助于从用户-项目交互数据中学习?

NeuralCF模型实际上提出了一个模型框架,它基于用户向量和物品向量这两个Embedding层,利用不同的互操作层进行特征的交叉组合,并且可以灵活地进行不同互操作层的拼接。

由于是基于协同过滤的思想进行改造的,所以NeuralCF模型并没有引入更多其他类型的特征,这在实际应用中无疑浪费了其他有价值的信息。