解读作者: 纪厚业, 北京邮电大学博士生, 主要关注异质图神经网络及其应用 # 多成分图卷积协同过滤 ![image-20200107204429221](https://tva1.sinaimg.cn/large/006tNbRwly1gaoa9f03d1j30rr06ewfh.jpg) 本文由北京邮电大学联合北大和北交发表在 AAAI2020 上. 代码和数据集见 https://github.com/RuijiaW/Multi-Component-Graph-Convolutional-Collaborative-Filtering 知乎专栏对公式支持较好, 见 https://zhuanlan.zhihu.com/c_1158788280744173568 个人公众号 ** 图与推荐 ** ![图与推荐](https://tva1.sinaimg.cn/large/006tNbRwly1gbad478hq0j30ha0ecmz7.jpg) # 介绍 推荐系统有很多种经典的算法也有多种理解视角. 从图的角度来理解的话, 推荐系统实际上是在做用户 - 商品二部图上的链路预测. 推荐系统在工业界很容易落地创造大量的经济价值. 各大定会上关于推荐论文也是层出不穷. 但是如果我们仅仅从用户 - 商品简单购买交互来看的话, 其实是把购买行为的建立简化了. 事实上, 用户 - 商品二部图的形成通常源于高度复杂的潜在购买动机, 例如性价比 (cost-effective) 或颜控 (appearance), 仅仅用用户 - 商品之间的单一购买关系无法精确的进行描述为什么购买行为发生, 如下图所示. ![image-20200110201336461](https://tva1.sinaimg.cn/large/006tNbRwly1garq898983j30l50ehq5o.jpg) 用户 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](https://tva1.sinaimg.cn/large/006tNbRwly1garqmtxxj8j318b0kdqcn.jpg) 可以看出模型主要有 3 个部分: * decomposer: 分解潜在偏好并用 node-level attention 来学习用户 / 商品多个成分的表示. * combiner: 将多个成分利用 component-level attention 进行加权融合. * MLP+Predict: 评分预测. 首先, 我们有一个用户 - 商品二部图. 这里的 user 和 item 都是有一些特征: $$ \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}} $$ 其中,$L_u$ 和 $L_i$ 分别是用户数和商品数, $N_u$ 和 $N_i$ 分别是用户特征数和商品特征数. ## 多成分抽取 假定用户和商品都有 M 个 components, 为了将这 M 种成分进行剥离, 我们首先利用 M 组投影矩阵 ($\mathbf{W}=\left\{\mathbf{W}_{1}, \mathbf{W}_{2}, \cdots, \mathbf{W}_{M}\right\}$ 和 $\mathbf{Q}=\left\{\mathbf{Q}_{1}, \mathbf{Q}_{2}, \cdots, \mathbf{Q}_{M}\right\}$) 对它们进行投影. $$ \mathbf{h}_{m}^{i}=\mathbf{Q}_{m} \mathbf{p}_{i}\\mathbf{s}_{m}^{u}=\mathbf{W}_{m} \mathbf{u}_{u} $$ 其中,$\mathbf{p}_{i}$ 是商品 $i$ 的初始特征,$\mathbf{h}_{m}^{i}$ 是商品 $i$ 的第 m 种潜在成分表示. 这里实际上是 ** 将节点通过不同的投影矩阵映射到不同的空间, 每个空间的表示代表一个 component.** ## 节点级别注意力 图神经网络通常收集邻居信息并利用神经网络更新节点表示. 本文与经典的 Graph Attention Network 非常像: 通过对邻居的加权混合来更新节点表示. 这里我们先考虑聚合 item 的信息来更新节点表示. 给定一个用户和商品的第 m 个 component, 我们可以利用节点级别注意力 $att_{node}$ 计算它们之间的一个注意力权重 $e_{m}^{u i}$. $$ 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 经典的做法. $$ \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 下的表示 $\mathbf{z}_{m}^{u}$ $$ \mathbf{z}_{m}^{u}=\sigma\left(\sum_{i \in \mathcal{P}_{u}} \alpha_{m}^{u i} \cdot \mathbf{h}_{m}^{i}\right) $$ 这里,$\mathcal{P}_{u}$ 代表用户 $u$ 购买过的商品集合. 针对 M 个 component, 我们可以得到一组用户表示 $\left\{\mathbf{z}_{m}^{u}\right\}_{m=1}^{M}$. 接下来, 我们考虑如何将这一组用户表示进行融合. ## 成分级别注意力 最简单的融合多个成分的方法就是平均. 但是平均并不能体现各个 component 的重要性差异. 为了更好的对 M 个 component 进行融合, 这里考虑引入 component-level 的注意力机制 $att_{com}$ 来进行加权融合. $$ \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) $$ 其中,$\beta^u_M$ 是用户 $u$ 的第 M 个 component 的注意力权重. 这里用了一个简单的 soft-attention 来学习不同 component 的注意力权重. $$ \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 个表示进行加权融合即可得到最终的用户表示 $\mathbf{z}_{u}$ $$ \mathbf{z}_{u}=\sum_{m=1}^{M} \beta_{m}^{u} \cdot \mathbf{z}_{m}^{u} $$ 重复上述步骤, 我们也可以得到商品的表示 $\mathbf{v}_{i}$. ## 评分预测和优化 评分部分采用常规的拼接 + MLP: 将用户和商品的表示拼接后经过多次神经网络映射到一个标量评分. $$ \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 损失: $$ \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 进行了正则. 这里采用的是 $L_0$ 正则. 这里作者引了一篇文章的稀疏正则: 它实现起来是直接把全连接换成了论文源码里 L0 约束的稀疏全连接. $$ \min _{\Theta} \mathcal{L}=\mathcal{L}_{r}+\lambda\|\theta\|_{0} $$ 这里为了防止过拟合, 作者还提出了一种采样策略: 根据评分的高低来对邻居进行加权采样. 这样可以更多的关注的高评分邻居也起到了一种 dropout 的作用. $$ \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](https://tva1.sinaimg.cn/large/006tNbRwly1garqqkjvg3j30jv08sq54.jpg) 首先是有效性实验, 作者选取了 MAE 和 RMSE 作为评价指标. ![image-20200110203209556](https://tva1.sinaimg.cn/large/006tNbRwly1garqrixxa3j318c07h0vk.jpg) 可以看出, 本文所提出的 MCCF 大幅度领先 GCMC. 但是需要注意的是, 在 Yelp 数据集上 MCCF 和 MCCF-cmp 的效果一样. 也就说, 在 Yelp 上对多个 component 进行平均和加权所取得效果一致. 本文的 components 的个数需要手动设置, 具体多少个 components 最好? 作者在合成数据集上进行了实验. 作者首先生成了 3 个用户 - 商品交互图. 每个图都代表一种潜在意图. 然后, 将 3 张图进行合并, 生成了所谓的合成数据集. ![image-20200110203828277](https://tva1.sinaimg.cn/large/006tNbRwly1garqy2yec6j30l809lgni.jpg) 可以看出: 并不是 components 的个数越多越好, 这里随着 components 的个数增加, 模型效果先上升后下降并在 3 个 components 时达到最优. 这里验证了本文所提出的 MCCF 确实可以捕获到真实个数的 component. 另外作者也做了 attention 的分析实验, 包括 node-level 和 component-level ![image-20200110204306639](https://tva1.sinaimg.cn/large/006tNbRwly1garr2x3io0j30l90ngadw.jpg) 这里是为了验证用户对相同偏好下的物品的权重是否一致. 假设用户基于 3 种潜在偏好买了 3 种东西, 那么用户对同类商品的 att 值比较一致. 要高都高, 要低都低. 那么 attention weight 就是一个 3d 的向量. 作者这里用 TSNE 降维为 2d 并进行了可视化. 另一方面, 作者也在 3 个真实数据集上验证了 components 个数对模型表现的影响. 不同数据集上最佳 components 的个数有所差异. ![image-20200110204953490](https://tva1.sinaimg.cn/large/006tNbRwly1garr9ywym5j312n09sgpk.jpg) 最后, 作者测试了节点 embedding 维度大小对模型的影响. 较大的维度可以更精准的表述节点, 但是过大的维度可能会带来冗余.![image-20200110205115764](https://tva1.sinaimg.cn/large/006tNbRwly1garrbeby2cj312m09lgpe.jpg) # 结论 本文对推荐系统中用户 - 商品二部图的建立原因进行了深入分析:** 用户购买商品可能是基于多种不同的购买意图, 比如性价比或者外观, 这也是用户的细粒度偏好 **. 因此, 作者提出了一种多分量图卷积协同过滤 Multi-Component graph convolutional Collaborative Filtering(MCCF)方法, 以探索在用户 - 商品购买交互下潜在的多种购买动机. 最后作者利用 node-level 和 component-level 的注意力来更好的学习节点表示. 总的来说, 本文的思路很新颖, 模型设计的也较为巧妙.
来源: http://www.bubuko.com/infodetail-3395511.html