作为一个先有深度学习基础,再接触到推荐系统的人来说,我起初理解矩阵分解技术的时候,实际是带有深度学习视角的。矩阵分解技术是将协同过滤的共现矩阵分解为user矩阵与item矩阵乘积的形式,其中user矩阵中的user向量可以看做是每个user的embedding,而item矩阵中每个item向量可以看作是每个item的embedding,也就是说,从深度学习embedding的角度来看,矩阵相乘过程中user vector和item vector的内积操作结果,也便是网络的输出层,即user和item的相似度,即对user打分的预测。
因此,我们可以将矩阵分解模型的结构用神经网络的形式表示出来:
既然是神经网络,自然不需要拘泥于向量内积这样的简单操作,而可以用更加复杂的操作来替代它,这样也恰好弥补了内积操作因为表达能力较弱而无法充分拟合目标的缺陷,NeuralCF模型恰好就是这么做的。
NeuralCF用一个多层神经网络替代了矩阵分解中的简单内积操作:
这么一来,这个网络实际上就可以有各种变换了。比如就是简单的将原始MF中的内积改成两个相同维度的user和item隐向量的相同位置元素乘积的形式便是一种。而作者似乎可能大概是受到了DeepCrossing的一些启发,又使用了一个多层神经网络的方式来对user和item特征进行了更充分的交叉,这便是混合形态的NeuralCF:
NeuralCF网络混合版可以分解为两个子网络,一个被称为Generalized Matrix Factorization (GMF, 广义矩阵分解),另一个是Multi-Layer Perceptron (MLP, 多层感知机). 这两个子网络都包含User和Item的表征部分:GMF是利用线性的方式来构建特征交叉,MLP则是引入了非线性组合的表达能力,这样的NeuralCF结合了线性和非线性两种组合,因此表达能力效果拔群。
至于网络的计算方式,看这个示意图就已经足够清晰了,user vector embedding到MF User Vector和MLP User Vector这两个隐向量,item vector embedding到MF Item Vector和MLP Item Vector,然后MF部分进行对应元素相乘操作,MLP部分则进如一个多层的带有激活函数的神经网络,最后把两者结果拼接起来计算一个点击率的预估。
总结
NeuralCF具备足够的拟合能力可以把CF的共现矩阵拟合的足够好。但是观察输入特征,很显然,它并没有比CF引入更多的特征,因此缺陷也是很明显的,改进方案的话就是加入更多有价值的信息。
参考资料
- 王喆的《深度学习推荐系统》
- Neural Collaborative Filtering