NCF

Neural Collaborative Filtering (www2017)

这篇文章提到,深度学习在推荐系统里一般是用来抽取特征的,在协同过滤的关键环节—— user和item特征的交互上,还是要用矩阵分解,然后再对分解后得到的user和item的表征做内积。

这篇文章想用一个神经网络替换掉内积。

矩阵分解是常用的方法,具体是把user和item映射到同一个向量空间,用向量来表示user和item。然后向量做点积,结果越大的表示越可能发生交互(点击)。但是有时除了做内积,也会再做一些其他的修正,比如做explicit 推荐,对user-item对做rating时,做完内积,可能再加上每个用户的平均打分。

这篇文章做得是implicit feedback。 implicit 比explicit要难,因为没有明显的负反馈。

定义user-item的交互矩阵 Y ∈ R M × N \mathbf{Y} \in \mathbb{R}^{M \times N} YRM×N 如下:
y u i = { 1 ,  if interaction (user  u ,  item  i )  is observed;  0 ,  otherwise.  y_{u i}=\left\{\begin{array}{ll}{1,} & {\text { if interaction (user } u, \text { item } i) \text { is observed; }} \\ {0,} & {\text { otherwise. }}\end{array}\right. yui={1,0, if interaction (user u, item i) is observed;  otherwise. 

y u i y_{ui} yui 等于0,不一定表示u不喜欢i,可能只是u没有看到i。

推荐一般有两种目标函数,pointwise和pairwise。
pointwise一般是最小化均方误差来做回归。
pairwise是学习最大化正负样本的边界。

MF里做inner product相当于认为,user, item向量的每个维度是独立的,权重是相同的。作者认为inner product限制了生成的user, item向量的表达能力。 比如用内积衡量两个user向量的相似度时,得到的相似度和jaccard 相关系数 s i j = ∣ R i ∣ ∩ ∣ R j ∣ ∣ R i ∣ ∪ ∣ R j ∣ s_{i j}=\frac{\left|\mathcal{R}_{i}\right| \cap\left|\mathcal{R}_{j}\right|}{\left|\mathcal{R}_{i}\right| \cup\left|\mathcal{R}_{j}\right|} sij=RiRjRiRj算出来的相似度不一致,因为内积是线性的,jaccard相关系数是非线性的。比如在向量空间中,假设p4和p1的余弦距离最近,然后p4和p2的距离就会小于p4和p3的距离,但是jaccard相关系数得到的是u4和u3的相似度比u4和u2的相似度更高。
(事实上, jaccard 相关系数等价于,把集合做multi-hot编码,表示成一个向量,然后再算余弦相似度。所以user latent space相当于对原始user表示做了降维。显然当原始item越多,下图b所示的相似度和原始表示不一致的情况就越可能出现。如果图b中的向量,再多一个维度,就能避免这种情况了。也就是用latent space用更大的向量维度。 )
NCF_第1张图片
解决这个问题的一个方法就是用更大的向量维度。但是会影响模型的泛化效果,尤其是在一些稀疏场景中(如FM)。
所以这篇文章用DNN来代替内积。(我能想到的有两种方式,一是两个向量做哈达玛积后,再接一个MLP; 二是两个向量拼接起来,再接mlp)
(但是我觉得这样做的一个问题是,检索变得复杂了)

你可能感兴趣的:(推荐系统)