0

WWW2024 | GraphPro: 高效融合图预训练和提示微调, 攻克实际动态推荐系统难题

 4 weeks ago
source link: https://zhuanlan.zhihu.com/p/689119726
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

WWW2024 | GraphPro: 高效融合图预训练和提示微调, 攻克实际动态推荐系统难题

4 人赞同了该文章

TLDR: 本文提出了 GraphPro,一个通用图协同过滤模型,旨在实现用户-商品交互图的预训练和微调,我们额外提出了一个真实世界流式推荐系统的基准设置,以验证GraphPro灵活、易扩展的形式更加适合于真实世界的推荐场景。

v2-f606e38e388e58b2539df2eff3a5672a_720w.webp

论文:http://arxiv.org/abs/2311.16716
代码:http://github.com/HKUDS/GraphPro(模型、baseline、数据集全部开源)
主页:http://sites.google.com/view/chaoh

推荐系统在各种网络平台中起着重要作用,通过提供相关的物品推荐,帮助用户在大量信息中进行导航。近年来,图神经网络(GNNs)已经成为推荐任务中对用户-物品交互进行建模的强大工具,能够在图结构数据上进行有效的表示学习。通过将用户和物品视为节点,交互作为边,GNNs能够捕捉用户和物品之间复杂的多跳关系,从而生成个性化的推荐结果。

之前在GNN增强的推荐中的研究主要集中在设计有效的消息传递策略,以揭示用户和物品之间的协作关系。这些工作旨在利用GCN来揭示用户-物品交互图中的高阶连接。随后的研究探索了简化消息传递方法、减少GNN模型复杂性和提高采样方法质量等方面。最近,该领域开始将自监督学习(SSL)引入到GNN框架中进行推荐。这些先进的方法主要利用InfoNCE损失函数来对比不同视角,从而提高LightGCN架构的性能。

然而,这些方法主要关注静态场景,忽视了推荐的动态性质。在现实世界中,推荐系统在动态环境中运行,模型不断从新到达的数据中学习,并为当前时间做出预测。然而,现有的方法主要针对单一图的训练和评估,导致推荐动态性能下降,并扩大了离线和在线之间的差距。此外,新数据的到达可能会导致分布变化,进一步增加了基于图的推荐模型在为新到达数据提供准确推荐时的复杂性。这些挑战严重限制了现有模型的可扩展性,并阻碍了它们及时适应不断变化的用户偏好的能力。

为了实现这个目标,本文解决了以下三个挑战:

  • 如何处理预训练GNN对不断变化的用户偏好的有效处理?
  • 如何在预训练模型和下游推荐任务之间实现知识的有效转移?
  • 如何处理新生成的交互边以适应分布变化?

为了解决这些问题,我们提出了一个名为 GraphPro 的简单而有效的框架,结合了高效动态的图预训练和Prompt Learning方法,GraphPro 包含以下几个关键设计:

  • 预训练阶段:在大量历史交互数据上对图神经网络(GNNs)进行预训练,以捕捉长期用户偏好和物品相关性。预训练阶段从大量历史交互中吸收知识。
  • 微调阶段:在更近期的目标数据上进行微调,使模型能够适应不断变化的用户偏好和捕捉短期行为动态。通过Prompt Learning模式实现有效的知识转移。
  • 时间提示机制:将时间感知的上下文信息注入到新数据中,使模型能够适应变化的用户推荐动态性能。

为了验证 GraphPro 方法的有效性,我们首先提出了一个全新的推荐系统 benchmark setting,其中我们模拟真实世界的 streaming 推荐过程,将用户-商品交互图按时间分成多个 snapshots,按照预训练→分时间片增量训练/微调(*N)→测试最终效果的流程更加严格地评估推荐模型表现;

其次,我们在三个真实世界的大规模推荐数据集上进行了广泛的实验证明,结果表明 GraphPro 在动态推荐任务中取得了显著的性能提升。与其他基线方法相比,GraphPro 在预测性能和实时性能方面都取得了最佳结果。此外,我们还通过消融实验和可视化分析来验证 GraphPro 的有效性和可解释性。

最后,我们进一步将GraphPro 部署到微信公众平台的一个大规模流式推荐应用中,以测试 GraphPro 在真实部署下的有效性。在 2 million 用户上的 5 天 A/B 测试中,我们成功观察到 GraphPro 相比已有的模型取得了更优效果。

模型的总体架构包括三个部分:

  • 贯穿预训练和 Prompt 微调阶段的图时间编码机制
  • 大规模历史交互上的图预训练
  • 基于结构 Prompt 和时间 Prompt 的简单、可扩展的图微调

零参数的高效图时间编码机制

为了捕捉用户偏好的时间变化,我们使用了一种相对时间编码方案,将时间信息融入到图卷积中。这个机制有两个重要的优势:

首先,相较于传统的绝对位置嵌入,我们的方法更具零参数的直接泛化能力,特别适用于对于性能要求较高的动态推荐任务,同时也可以作为插件方便地集成到各种基座模型;

其次,我们避免了使用固定长度的位置嵌入,从而提高了模型的可扩展性,使其能够适配到任意长的时间范围,这提高了系统的可扩展性,避免一定要遵循连续的时间去进行训练和微调。

为了在我们的模型中有效捕捉用户-物品交互的时间动态性,从具体的实现层面上来看,在我们的用户-物品交互图中,交互边的时间属性由Unix时间戳来记录,表示用户与物品进行交互的确切时刻。为了在我们的模型中对这些时间戳进行编码,我们将它们除以固定的时间间隔,将它们转换为相对时间步长。这个时间间隔是一个超参数,可以以小时、天或周的不同分辨率来定义。

为了在图聚合时考虑邻居节点的时间权重,我们进一步将时间间隔特征在图上按照邻居进行归一化计算,以强调邻居交互发生的时间次序。

最后,我们以一种简单有效的方式将时间编码融入到图消息传递中,即将其与原来的双向normalization 权重取平均值作为新的 GNN 正则项,这样做的好处是图学习的编码结果向量仍然可以保持相对稳定的模,保持 GNN 优秀的编码能力,又融入了高效的时间感知信息。

大规模历史交互上的图预训练

为了使得我们的模型具有更好的时间泛化性,并且可以通过高效的微调适应未来时间的推荐预测,我们选择通过较大规模的历史交互数据完成模型的预训练。

实际训练中,我们根据数据集的可用性以及特性调整预训练的时间尺度。例如,在横跨十天的 Taobao 数据集上我们选择用一半数据(五天)作为预训练;而在跨度更长的 Amazon 和 Koubei 上,我们选择使用一个月的数据作为预训练。真实世界中,在微信公众平台部署时,我们同样采用一个月量级的历史数据。

我们希望 GraphPro 具有优秀的即插即用(plug-in)能力,因此在预训练阶段没有设计复杂的网络结构或损失函数。在预训练阶段,GraphPro 可以采用任何基于 GNN 的推荐网络结构,例如 LightGCN (简化的神经网络 + BPR 损失) 或 SimGCL (LightGCN + 简化的自监督目标)。唯一需要做的改动是将以上设计的时间编码机制融入到 GNN 的消息传递机制中,以显著提示 GNN 在应对时间感知的交互建模时的性能表现。

基于结构 Prompt 和时间 Prompt 的图微调

我们关注于如何有效地通过微调从预训练的图神经网络模型中传递知识,以便在未来的用户-物品交互中进行个性化和时间感知的预测。为了在目标时间进行微调,一个直观的想法是采用增量更新模型参数的方式。也就是说,我们在后续时间段的数据上迭代地更新用户、物品的节点表征。这种方法能够直接捕捉用户在特定时间范围内的持续兴趣变化。

然而,增量微调机制存在两个主要问题。首先,基于小范围交互的迭代更新可能导致模型收敛到特定时间段的局部最优解,限制了未来更新用户、物品表征的持续微调潜力。其次,持续更新预训练模型的参数可能会带来显著的计算负担。

在我们的方法中,我们通过使用预训练时间和当前时间之间的交互边作为图结构 Prompt 来解决上述的问题。这样做允许我们直接在任意的未来时间段上微调预训练模型,而无需进行迭代更新就可以感知完整的用户兴趣和商品特性的表征迁移。我们从大型语言模型的离散 Prompt 机制中受到启发,将特定时间段内的图结构看作离散的 Prompt ,用于指导预训练表征的消息传播。这样可以捕捉预训练和微调时间点之间的表征变化,并为微调提供更好的初始表征。

为了生成 Prompt 结构,我们将预训练的图结构与预训练时间和当前微调时间之间的未来边进行连接。这样的组合让模型能够捕捉时间的动态变化,并提高微调的效果。我们引入了一个超参数 作为 Prompt 结构的采样衰减参数,正 表示包括更早期的结构和较少近期的结构,反之亦然。

生成 Prompt 结构后,我们使用预训练 embedding 在 Prompt 图结构上进行一次无梯度的前向传递,生成用于微调的 embedding。为了缓解过拟合效应并提高微调的鲁棒性,我们引入了一个随机门控机制,略微扰动预训练的嵌入。这个随机门控机制使用不可学习的随机高斯权重。

需要注意的是,我们提出的图时间编码机制在结构 Prompt 过程中也起着重要作用,有助于模型感知相对时间的关系。通过在 Prompt 结构上传播从广泛预训练中学到的表征,我们实现了两个目标。首先,我们使得获得的表征能够保有稳定的用户长期兴趣。其次,我们能够快速捕捉到后续时间范围内用户兴趣的变化。通过避免直接在短期图上训练表征,我们减轻了模型参数陷入局部最优解的风险。这种方法使我们在后续微调中更具灵活性,并使模型能够更有效地适应用户随时间变化的兴趣。

最后,为了解决节点表征在预训练时间和微调时间的分布变化(distribution shift)问题,我们额外引入一个可学习的门控机制,以建模用户/物品表征随时间的变化,有效地保留了为进行准确的未来推荐所必需的信息信号。这样的随机-可学习的双重门控机制类似于一个高效的编码-解码器结构,用少量的参数模拟并学习潜在的表征变化,以提高模型的鲁棒性和性能表现。

离线与线上实验

实验设置&数据集

为了在离线实验中更好地验证推荐模型真实世界(流式环境)中的表现,我们并没有选择采用传统的单一时间训练+单一时间评估方式。相反,我们选择提出多个时间点的测评方法,在持续的一系列时间区间中验证模型的动态性能,来更加全面地评估模型的真实表现。

我们选取了三个较大规模的公开数据集,并按照天或周来划分测试的时间尺度。我们报告模型在所有时间尺度上的平均表现以更准确地反映模型在真实场景下的性能。

与基线模型的比较

我们将 GraphPro 与三个研究线的六个最强的基线模型进行了详细的对比,涵盖动态推荐模型、动态图学习模型以及图提示学习模型。同时,为了体现 GraphPro 作为即插即用模型的优秀能力,我们同时将 GraphPro 实现在四个不同的基座模型上,即 LightGCN,SGL,MixGCF 和 SimGCL。上图中展示的完整实验结果表明 GraphPro 在面对长时间、多节点的动态推荐场景时展现出的强大的性能。

微调机制研究

为了详细地探索我们提出的预训练-微调机制对于推荐系统中表征学习的影响,我们根据用户是否在每个时间步骤中进行微调将他们分为两类。没有进行微调的用户也被视作这段时间内的冷启动用户。我们使用亚马逊数据集,在每个时间步骤对这两组用户进行独立评估,并将结果呈现在下图中。可以发现,

  • 无论用户的表征是否在这段时间中被微调,GraphPro 均有效地提升了两类用户的推荐效果,且在大多数情况下表现优于基准方法
  • GraphPro 在长期持续提升方面表现出色。在第一个时间节点上相比基线模型有一个短暂的滞后,但之后所有时间段均超过了所有的基线方法,突出了 GraphPro 在真实动态环境中的优势

这一部分研究了我们的 GraphPro 方法的学习效率。作为一个参数高效的方法,GraphPro在预训练和微调过程中都尽量减少了可学习的权重数量。我们在下图中比较了训练曲线的结果,发现GraphPro 不仅在淘宝和口碑数据集上推荐性能优于 EvolveGCN-O 和 GPF,而且只需要更少的训练轮数。例如,GraphPro 只需要进行四个微调阶段就能达到收敛,相比基线方法,所需的训练轮数和时间大约减少了一半,这突显了 GraphPro 在提高效率方面的优势。

线上部署 A/B 实验

我们将 GraphPro 部署在微信公众平台上,一个每天服务数亿用户的推荐场景。在下图所示的 A/B 测试中,GraphPro 和基线模型参与了共 200 万用户的推荐体验。从五天的表现数据总结来看,GraphPro 在 CTR 和点击量上均做到了更优。

动态微调近似、甚至优于全样本训练

我们进一步全面比较我们的 GraphPro 方法和传统的全量数据训练方法(FULL)的性能。我们想要确定GraphPro是否能够达到或超过FULL的性能水平。为了实现这个目标,我们使用了三个不同的数据集进行了仔细的比较,特别关注召回率和平均每轮的时间。我们将分析结果以下图的可视化形式呈现出来。从结果上,我们能够得到两个有趣的观察:

  1. GraphPro 在淘宝和口碑数据集上表现出色,在每个测试点都超过了FULL的性能。这凸显了GraphPro 在处理时间敏感数据方面的强大能力。在亚马逊数据集中,两种方法表现相当,但GraphPro 在初始阶段显示出明显优势。而随着评估的进行,不会输给FULL。
  2. 此外,GraphPro 吸引人的一个重要方面在于其出色的效率。与FULL方法相比,GraphPro大幅缩短了平均训练时间,实现了惊人的效率提升。具体而言,在淘宝数据集上,我们观察到训练速度提高了60倍,在口碑数据集上提高了24倍,在亚马逊数据集上则达到了空前的81倍提升。这些训练效率的改进可以归因于GraphPro的创新架构,显著加快了学习过程



欢迎干货投稿 \ 论文宣传 \ 合作交流


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK