多成分图卷积协同过滤

北战南征 提交于 2020-01-31 00:45:40

多成分图卷积协同过滤

image-20200107204429221

本文由北京邮电大学联合北大和北交发表在AAAI2020上.代码和数据集见https://github.com/RuijiaW/Multi-Component-Graph-Convolutional-Collaborative-Filtering

知乎专栏对公式支持较好, 见 https://zhuanlan.zhihu.com/c_1158788280744173568

个人公众号 图与推荐

图与推荐

介绍

推荐系统有很多种经典的算法也有多种理解视角.从图的角度来理解的话,推荐系统实际上是在做用户-商品二部图上的链路预测.推荐系统在工业界很容易落地创造大量的经济价值.各大定会上关于推荐论文也是层出不穷. 但是如果我们仅仅从用户-商品简单购买交互来看的话,其实是把购买行为的建立简化了.事实上,用户-商品二部图的形成通常源于高度复杂的潜在购买动机,例如性价比(cost-effective)或颜控(appearance),仅仅用用户-商品之间的单一购买关系无法精确的进行描述为什么购买行为发生,如下图所示.

image-20200110201336461

用户U1,U3和U4的购买动机是高性价比, 他们更喜欢一些便宜实用的东西.而用户U2比较注意东西的外观,倾向于购买一些比较好看的东西.如果忽略上述潜在的购买意图,我们无法准确的预测U1将购买商品I3还是I4.如果考虑用户的潜在偏好,我们就会发现I4是对用户U1的更好建议,因为I4已经被一些偏好性价比的用户购买,这更符合用户U1的购买动机.因此**,识别用户在购买关系下的多种潜在细粒度偏好是非常有必要的.**

这就有带来2个挑战:

  • 如何识别用户-商品二部图中多种潜在成分(用户偏好)?
  • 如何重新组织融合这些潜在成分来学习用户/商品的表示?

现有的方法没有探索各种购买动机之间的差异进而导致无法捕捉到细粒度的用户偏好.因此,我们提出了一种新颖的多分量图卷积协同过滤Multi-Component graph convolutional Collaborative Filtering(MCCF)方法,以区分观察到的显式用户-商品交互下潜在的多种购买动机.具体来说,MCCF内部有两个精心设计的模块:分解器和组合器.前者首先将用户-商品交互分解为多种可能导致购买关系的潜在组件;后者自动重新组合这些潜在组件,以获得统一的用户/商品表示以进行预测.此外,稀疏正则化和邻居权重采样也被用来缓解过拟合问题并加速优化.在三个真实数据集和一个合成数据集上的经验结果不仅显示了MCCF的显着性能提升,而且很好地证明了考虑多个组件的必要性.

本文的贡献总结如下:

  • 首次探索了用户-商品二部图下,用户潜在的多种购买动机.可以更好的描述用户细粒度的偏好.
  • 首次一种新颖的多分量图卷积协同过滤Multi-Component graph convolutional Collaborative Filtering(MCCF)方法,以区分观察到的显式用户-商品交互下潜在的多种购买动机.
  • 实验验证了MCCF的有效性.同时,MCCF有较好的可解释性.

另外,虽然本文只在related work里提到了disentangled representation,本文实际上也是一种disentangled representation的方法.

模型

模型整体架构如下图所示:

image-20200110202739053

可以看出模型主要有3个部分:

  • decomposer: 分解潜在偏好并用node-level attention来学习用户/商品多个成分的表示.
  • combiner: 将多个成分利用component-level attention进行加权融合.
  • MLP Predict:评分预测.

首先,我们有一个用户-商品二部图.这里的user和item都是有一些特征:
U=[u1,u2,,uNu]RLu×NuP=[p1,p2,,pNi]RLi×Ni \mathbf{U}=\left[\mathbf{u}_{1}, \mathbf{u}_{2}, \cdots, \mathbf{u}_{N_{u}}\right] \in \mathbb{R}^{L_{u} \times N_{u}} \\ \mathbf{P}=\left[\mathbf{p}_{1}, \mathbf{p}_{2}, \cdots, \mathbf{p}_{N_{i}}\right] \in \mathbb{R}^{L_{i} \times N_{i}}
其中,LuL_uLiL_i分别是用户数和商品数, NuN_uNiN_i分别是用户特征数和商品特征数.

多成分抽取

假定用户和商品都有M个components, 为了将这M种成分进行剥离,我们首先利用M组投影矩阵(W={W1,W2,,WM}\mathbf{W}=\left\{\mathbf{W}_{1}, \mathbf{W}_{2}, \cdots, \mathbf{W}_{M}\right\}Q={Q1,Q2,,QM}\mathbf{Q}=\left\{\mathbf{Q}_{1}, \mathbf{Q}_{2}, \cdots, \mathbf{Q}_{M}\right\})对它们进行投影.
hmi=Qmpismu=Wmuu \mathbf{h}_{m}^{i}=\mathbf{Q}_{m} \mathbf{p}_{i}\\ \mathbf{s}_{m}^{u}=\mathbf{W}_{m} \mathbf{u}_{u}
其中,pi\mathbf{p}_{i}是商品ii的初始特征,hmi\mathbf{h}_{m}^{i}是商品ii的第m种潜在成分表示. 这里实际上是将节点通过不同的投影矩阵映射到不同的空间,每个空间的表示代表一个component.

节点级别注意力

图神经网络通常收集邻居信息并利用神经网络更新节点表示.本文与经典的Graph Attention Network非常像:通过对邻居的加权混合来更新节点表示. 这里我们先考虑聚合item的信息来更新节点表示.给定一个用户和商品的第m个component,我们可以利用节点级别注意力attnodeatt_{node}计算它们之间的一个注意力权重emuie_{m}^{u i}.
emui=attnode(smu,hmi;m) e_{m}^{u i}=a t t_{n o d e}\left(\mathbf{s}_{m}^{u}, \mathbf{h}_{m}^{i} ; m\right)
这里沿用了graph attention network经典的做法.
αmui=softmax(emui)=exp(σ(amT[smuhmi]))iPuexp(σ(amT[smuhmi])) \alpha_{m}^{u i}=\operatorname{softmax}\left(e_{m}^{u i}\right)=\frac{\exp \left(\sigma\left(\mathbf{a}_{m}^{\mathrm{T}} \cdot\left[\mathbf{s}_{m}^{u} \| \mathbf{h}_{m}^{i}\right]\right)\right)}{\sum_{i \in \mathcal{P}_{u}} \exp \left(\sigma\left(\mathbf{a}_{m}^{\mathrm{T}} \cdot\left[\mathbf{s}_{m}^{u} \| \mathbf{h}_{m}^{i}\right]\right)\right)}
然后,基于所学习到的权重对邻居进行加权聚合,得到用户在第m个component下的表示zmu\mathbf{z}_{m}^{u}
zmu=σ(iPuαmuihmi) \mathbf{z}_{m}^{u}=\sigma\left(\sum_{i \in \mathcal{P}_{u}} \alpha_{m}^{u i} \cdot \mathbf{h}_{m}^{i}\right)
这里,Pu\mathcal{P}_{u}代表用户uu购买过的商品集合.针对M个component,我们可以得到一组用户表示{zmu}m=1M\left\{\mathbf{z}_{m}^{u}\right\}_{m=1}^{M}.接下来,我们考虑如何将这一组用户表示进行融合.

成分级别注意力

最简单的融合多个成分的方法就是平均.但是平均并不能体现各个component的重要性差异.为了更好的对M个component进行融合,这里考虑引入component-level的注意力机制attcomatt_{com}来进行加权融合.
(β1u,β2u,,βMu)=attcom(z1u,z2u,,zMu) \left(\beta_{1}^{u}, \beta_{2}^{u}, \cdots, \beta_{M}^{u}\right)=a t t_{c o m}\left(\mathbf{z}_{1}^{u}, \mathbf{z}_{2}^{u}, \cdots, \mathbf{z}_{M}^{u}\right)
其中,βMu\beta^u_M是用户uu的第M个component的注意力权重.这里用了一个简单的soft-attention来学习不同component的注意力权重.
dmu=σ(Cm[zmusmu]bm)wm=σ(qTdmub)βmu=exp(wm)k=1Mexp(wk) \mathbf{d}_{m}^{u}=\sigma\left(\mathbf{C}_{m} \cdot\left[\mathbf{z}_{m}^{u} \| \mathbf{s}_{m}^{u}\right] \mathbf{b}_{m}\right) \\ w_{m}=\sigma\left(\mathbf{q}^{\mathrm{T}} \cdot \mathbf{d}_{m}^{u} b\right) \\ \beta_{m}^{u}=\frac{\exp \left(w_{m}\right)}{\sum_{k=1}^{M} \exp \left(w_{k}\right)}
最后,对M个表示进行加权融合即可得到最终的用户表示zu\mathbf{z}_{u}
zu=m=1Mβmuzmu \mathbf{z}_{u}=\sum_{m=1}^{M} \beta_{m}^{u} \cdot \mathbf{z}_{m}^{u}
重复上述步骤,我们也可以得到商品的表示vi\mathbf{v}_{i}.

评分预测和优化

评分部分采用常规的拼接 MLP:将用户和商品的表示拼接后经过多次神经网络映射到一个标量评分.
g1=[zuvi]g2=σ(W2g1b2)...gl1=σ(Wlgl1bl)rui=wTgl1 \mathbf{g}_{1}=\left[\mathbf{z}_{u} \| \mathbf{v}_{i}\right] \\ \mathbf{g}_{2}=\sigma\left(\mathbf{W}_{2} \cdot \mathbf{g}_{1} \mathbf{b}_{2}\right) \\ ... \\ \mathbf{g}_{l-1}=\sigma\left(\mathbf{W}_{l} \cdot \mathbf{g}_{l-1} \mathbf{b}_{l}\right) \\ r_{u i}^{\prime}=\mathbf{w}^{T} \cdot \mathbf{g}_{l-1}
本文做的是评分预测,损失函数也MAE损失:
Lr=12O(u,i)O(ruirui)2 \mathcal{L}_{r}=\frac{1}{2|\mathcal{O}|} \sum_{(u, i) \in \mathcal{O}}\left(r_{u i}^{\prime}-r_{u i}\right)^{2} \\
截止到这里,本文所提出的MCCF实际和GAT中的multi-head attention非常像,也是把基于注意力的邻居聚合做了多次. 接下来就是不一样的部分了,作者为了增强泛化能力,作者对component进行了正则.这里采用的是L0L_0正则.这里作者引了一篇文章的稀疏正则:它实现起来是直接把全连接换成了论文源码里L0约束的稀疏全连接.
minΘL=Lrλθ0 \min _{\Theta} \mathcal{L}=\mathcal{L}_{r} \lambda\|\theta\|_{0}

这里为了防止过拟合,作者还提出了一种采样策略:根据评分的高低来对邻居进行加权采样.这样可以更多的关注的高评分邻居也起到了一种dropout的作用.
uU(0,1)k=u1r \begin{array}{l}{u \quad \sim \mathcal{U}(0,1)} \\ {k=u^{\frac{1}{r}}}\end{array}

除了dropout的正则效果之外.这里的采样也可以使不同节点在一个batch里的邻居数相同,加速GPU运算

实验

实验部分旨在回答以下问题:

问题1:与最先进的协作过滤方法相比,MCCF的性能如何?

问题2:从多个组件学到的节点表示是否比未分解的节点表示具有更强的表示能力?多个组件能否捕获一些潜在的语义?

问题3:不同的超参数设置如何影响MCCF?

实验在3个公开数据集上进行了实验,3个数据集的规模都不是很大.

image-20200110203114928

首先是有效性实验,作者选取了MAE和RMSE作为评价指标.

image-20200110203209556

可以看出,本文所提出的MCCF大幅度领先GCMC.但是需要注意的是,在Yelp数据集上MCCF和MCCF-cmp的效果一样.也就说,在Yelp上对多个component进行平均和加权所取得效果一致.

本文的components的个数需要手动设置,具体多少个components最好? 作者在合成数据集上进行了实验. 作者首先生成了3个用户-商品交互图.每个图都代表一种潜在意图.然后,将3张图进行合并,生成了所谓的合成数据集.

image-20200110203828277

可以看出:并不是components的个数越多越好,这里随着components的个数增加,模型效果先上升后下降并在3个components时达到最优. 这里验证了本文所提出的MCCF确实可以捕获到真实个数的component.

另外作者也做了attention的分析实验,包括node-level和component-level

image-20200110204306639

这里是为了验证用户对相同偏好下的物品的权重是否一致. 假设用户基于3种潜在偏好买了3种东西, 那么用户对同类商品的att值比较一致. 要高都高,要低都低. 那么attention weight就是一个3d的向量.作者这里用TSNE降维为2d并进行了可视化.

另一方面,作者也在3个真实数据集上验证了components个数对模型表现的影响. 不同数据集上最佳components的个数有所差异.

image-20200110204953490

最后,作者测试了节点embedding维度大小对模型的影响.较大的维度可以更精准的表述节点,但是过大的维度可能会带来冗余.image-20200110205115764

结论

本文对推荐系统中用户-商品二部图的建立原因进行了深入分析:用户购买商品可能是基于多种不同的购买意图,比如性价比或者外观,这也是用户的细粒度偏好. 因此,作者提出了一种多分量图卷积协同过滤Multi-Component graph convolutional Collaborative Filtering(MCCF)方法,以探索在用户-商品购买交互下潜在的多种购买动机.最后作者利用node-level和component-level的注意力来更好的学习节点表示. 总的来说,本文的思路很新颖,模型设计的也较为巧妙.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!