现代推荐系统引入了越来越多来的深度学习模型,因为这些模型可以很好的捕捉非线性,复杂的用户行为模式。 在后面的章节, 我们会展示如何利用深度学习在时序数据上挖掘用户的行为。 这里,我们会对推荐系统中的深度学习进行一次概览。
5.5.1 内积
首先我们用内积重新定义一下用户和商品的关系:
利用内积来计算用户和商品的关系很容易想到, 尤其配合矩阵分解和SVD。 不过内积并不是唯一的计算 compatibility 的方法, 相关的方法其实很常见,比如利用距离的来计算:
从概念上说, 这些方法背后都有不同的意义。如果一个用户比较喜欢看动作片,那么基于内积的方法就会给他推荐更多的动作片;基于距离的方法就会给他推荐包含更多动作的电影(未必是动作片) 。
没有在所有场景下都好用的指标, 不同应用场景可能有不同的偏好。 深度学习的一个好处就是,他可以灵活的替换 compatibility 函数。
(Deep learning based recommender system: A survey and new perspectives, 2019) 讨论了深度学习用于推荐系统的各种好处。 其中最大的好处就是他可以处理复杂的, 非线性的关系。在后面的章节中的例子离, 欧式距离比内积更好用。 实际中, 深度学习可以自己学习各种聚合方法, 从而减少了人工做特征工程的工作量。 此外,深度学习还可以轻松的处理结构化数据,图片,文本。而且有很多好用的深度学习库可以用 (PyTorch, TensorFlow)。
当然,也有一些质疑:
- 深度学习的效果是否真的如宣传的那样好?
- 传统的推荐系统经过精心的调优, 是否可以给出更好的结果?
在后面的文章中,我们会讨论这部分内容。
5.5.2 基于多层感知器的推荐系统
多层感知器(MLPs)是深度神经网络的一个入门模型, 也是非常 straightforward 的方法。 MLPs 的每一层的输出, 其实就是输入的线性组合, 然后通过一个非线性的激活函数。
- 输入向量
- 输出向量
- 经过学习的参数矩阵
- 激活函数, 保证输出结果的值位于 0-1,同时提供非线性属性
这里介绍的是神经网络中的一层, 我们也可以把很多层叠加在一起, 以获得更多的非线性。往往层数越多,模型的拟合能力就越强,当然也更容易over fitting。
基于神经网络的协同过滤
(Neural collaborative filtering, 2017) 探索了使用多层感知器来处理 latent factors 的方法 (而不是使用内积)。 如前所述,内积只是计算 和 众多方法之一, 还有很多方法可以使用。 这篇文章中假设自己不知道那种组合方法最好,它试图让 MLP 自动的去学习最佳组合方式。 虽然在这篇论文中 ,作者展示了这样做的好处, 但对这种做法依然有很多质疑。 因为这个说法, 来源与一个假设,即 MLP 这种模型可以很好的却模型很多函数, 虽然这个假设很多时候是对的。 但是在实际中发现, MLP 对于有些函数拟合的并不是很好, 比如内积。 因此,在某些场景中, 传统的方法可能获得比深度神经网络更好的效果。
5.5.3 基于 Autoencoder 的推荐系统
总的来说, *Autoencoder * 是一种利用低纬向量来表示数据的方法, 而且它的输出依然可以被还原成原先的高维数据 (信息的压缩与还原)。
(A survey of autoencoder-based recommender systems, 2020) 研究了很多把AutoEncoder 用在推荐系统中的方法。 有些推荐系统把 AutoEncoder 作为一个系统的一部分。 下面我们看一个比较有代表性的方法。
AutoRec
(Autorec: Autoencoders meet collaborative filtering, 2015) 把AutoEncoder 的原理用在的推荐系统中。 在这个方法中, 数据被编码为用于给商品打分的 vector, 或者是交互矩阵中的一列 。 因为 只能被部分观察到(而不是 AutoEncoder 长处理的密集向量),因此被压缩的是 。 在推理的时候, 被压缩的表示可以用户还原未被观察的部分。 这篇文章给这种方法起名为 AutoRec-I, 因为 autoencoder 用于学习商品的低纬表示; 对应的,在 AutoRec-U 方法中, autoencoder 学习如何低纬的表示用户向量 。
注意,AutoRec-U 的方法中,没有用户相关参数, 因此它是一种 user-free 的方法。 后面还会说到它。
卷积网络和循环网络
(Deep learning based recommender system: A survey and new perspectives, 2019) 调研了很多把卷积网络和循环网络用于推荐系统的方法。 循环神经网络用于用户交互序列数据。 卷积神经网络用户处理 富信息(rich cotent) 比如 图片等。
这篇文章也讨论了一些把深度神经网络用于推荐系统的限制, 比如推荐结果的可解释性, 训练难度, 调参难度, 对训练数据的需求量大(当需要训练的参数很多时尤其严重)等。 对于训练数据量和深度学习模型的关系: 一方面, 缺少数据会限制这些模型的能力,例如冷启动情况下,数据稀少,这些模型效果不好。另外一方面, 深度学习模型(尤其是 CNN, RNN)可以处理图片,文本,视频的能力也扩大了训练数据的来源,某种程度上减缓了训练数据的压力。
5.5.5 基于深度学习的推荐系统效果如何 ?
虽然市面上有很多用户推荐系统的深度学习方案, 但是对于他们的结果是否优于传统的,简单的方法,依然没有定论。 (Are we really making much progress? A worrying analysis of recent neural recommendation approaches, 2019) 对市面上主流的深度学习方案(包括上面讨论的)进行了一次测评,结论是他们在很多项目上被简单的模型打败了,即使是这些模型被精心调试过了。 目前我们看到的模型, 都有很多可以调整的因素,比如factor 数量,惩罚项,甚至训练数据集的选择,预处理方法,等等。 尽管这篇论文讨论的模型有限, 但是它引起了人们对推荐系统测评中衡量方法以及基准的重视。一些原因来源于结果比较难以复现 (虽然把代码和论文一起share 出来的做法比较常见, 但是发布超参数设定,以及调参策略则比较少见) 。 另外的困难来源于数据集的多样性,衡量指标,测试方法等, 这使得公平的对比变得比较困难。
(Neural collaborative filtering vs. matrix factorization revisited, 2020) 对比了基于内积的方法和基于MLP 的方法。 这篇论文的结论和上面一篇论文的结论类似:虽然MLP 被认为可以比较容易的模拟各种函数, 但是实际上,即使内积这种简单的函数, MLP 模拟的效果依然不好, 虽然以及经过比较好的调试。
最后, 这两篇文章都讨论了计算复杂度。深度学习获得有限的收益, 是否与他们对计算资源的消耗相符。 第二篇论文的结论是:当考虑到retrive 商品的效率的时候, 应当优选简单的模型。
这里对深度学习的讨论,并不是说他们对推荐系统没有意义,而是说他们在交互型数据上的表现不好。 在后面的章节中, 我们还会讨论他们其他场景中的应用,在那些场景中,我们需要用深度学习处理序列,文本,图片等数据,我们希望能够处理可解释性和冷启动的问题。