Press "Enter" to skip to content

华为图神经网络在推荐系统中的应用

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

 

 

分享嘉宾 :郭威 华为 高级工程师

 

编辑整理: 吴祺尧 加州大学圣地亚哥分校

 

出品平台:DataFunTalk

 

导读: 我 们目前处于信息化社会,用户希望从互联网上海量的信息中获取到自己喜欢看到的内容,所以个性化推荐系统被广泛应用。 推荐系统利用用户与用户,用户与物品以及物品与物品之间的丰富关系,而这些关系可以天然地被建模成图结构。 今天分享的主题是图神经网络在推荐系统中的应用与探索。

 

今天的介绍会围绕下面五点展开:

 

推荐系统和图神经网络

 

图神经网络用于召回

 

图神经网络用于精排

 

图神经网络用于重排

 

总结与展望

 

01

 

推荐系统和图神经网络

 

首先和大家分享下推荐系统和图神经网络的背景。

 

个性化推荐系统可以看作一个“过滤器”,它针对用户筛选他们想要获取的信息。华为在许多应用场景下都部署了推荐系统,如华为应用市场、华为游戏中心、华为浏览器、华为应用、华为阅读、华为视频、华为云、华为商城、华为负一屏等。

 

 

推荐系统利用用户和物品的特征,如用户画像、物品属性、上下文信息、历史行为信息等来为用户做推荐。值得注意的是,用户与用户之间的联系、用户与物品的交互、物品与物品的联系可以被天然建模为一个图结构,而图神经网络针对图有优异的表征学习能力。因此,图神经网络近年来被大量应用于推荐系统,并取得了显着的性能提升。

 

推荐系统的典型结构如下 。首先,系统在百万级别的待推荐的物品池中召回千级别的物品;其次,系统进入排序阶段,从上一阶段召回的几千个候选物品中选取几百个物品;最后,重排序阶段选择几十个物品组成输出列表反馈给用户。华为在推荐系统各个阶段都尝试使用了图神经网络,并针对此进行了大量研究,接下来会逐一进行介绍。

 

02

 

图神经网络用于召回

 

首先分享一下华为将图神经网络用于召回阶段的经验。

 

 

早期将图神经网络引入推荐系统的是在KDD2018上发表的Pinsage,它们构建了一个二部图,对每个节点在图上采样邻居做汇聚。Pinsage在线上取得了较大的收益。SIGIR2019的NGCF基于Graphsage,加入了中心节点与邻居节点的交互。诺亚在ICDM2019提出了Multi-GCCF,在user-item二部图的基础上加入了user-user和item-item相似型图,相较于NGCF有了进一步的性能提升。SIGIR2020的DGCF将用户与商品的多种交互行为拆分为多个兴趣子图,在子图上分别进行建模。诺亚在SIGIR2020提出了NIA-GCN,考虑到了邻居间的交互信息,在聚合时加入了它们可以提升聚合效果。LightGCN发现邻居的非线性聚合函数和激活函数是可以去除的,并通过这个做法达到了更好的效果。SGL和NCL将对比学习引入了图的建模过程。SGL考虑了图的节点dropout、边的dropout以及随机游走来构建对比的视图;NCL采用了空间上的邻居节点以及语义上的邻居节点来建立对比视图,其中语义上的邻居是通过聚类得到的。

 

1. 邻居交互感知的图卷积网络

 

 

华为在SIGIR2020提出的NIA-GCN这一工作,重点解决了已有GCN召回模型存在的几个关键问题。

 

首先,user-item二部图是一个异质图,包含user和item两种不同类型的节点。GCN、NGCF忽略了二部图的异质性。

 

其次,图卷积神经网络会经历邻居节点采样+聚合函数进行信息聚合,但是现有工作采用的聚合函数一般为mean、max、LSTM等,它们限制了模型的表达能力。比如上图下侧,左边的图结构若使用max函数则无法将两种不同的图结构进行区分;右边的图若使用mean函数也会得到相同的聚合结果;LSTM函数不是排列不变的,且难以训练。

 

 

针对以上两个问题,我们提出了基于邻居交互感知的图卷积网络。

 

首先,我们引入了邻居的交互,将每个邻居作为中心节点的特征,利用邻居间的哈德玛积来捕获邻居间的特征交互。其中,在计算哈德玛积时,我们借鉴了FM的做法,其时间复杂度可以有效地被降低。上图下侧展现了完整的邻居汇聚以及中心节点-邻居的聚合过程。首先,每一对邻居之间都会进行交互,考虑了一阶(求和)和二阶(哈德玛积)关系,之后对它们进行一个变换得到邻居汇聚的表征;在下一阶段,华为将邻居汇聚表征和中心节点表征进行组合,最终得到聚合特征。

 

 

我们还考虑到异质图中邻居节点的异质性,将逐级汇聚的邻居聚合方式改变为一阶邻居节点与二阶邻居节点并行聚合的方式。此外,我们加入了一阶邻居和二阶邻居节点之间的交互信息,使得我们可以更好地建模一阶邻居和二阶邻居的重要性,进行邻居信息的选择。

 

 

上图展示了NIA-GCN在四个数据集上的实验结果。相较于基线,NIA-GCN拥有2.9%到21.8%的效果提升。从消融实验的结果中,我们可以发现NIA-GCN的三个模块均可以在离线实验中取得一定的效果提升。

 

2. GCN在召回场景的轻量化

 

 

由于工业场景下数据量非常大,如果我们每天都用过去30天的数据来训练GCN模型,那幺训练速度是不可以接受的。 为了使GCN在工业场景下可落地,我们采用了增量学习的思想 。 我们每一天只会使用到最新一天的数据来训练GCN模型 。但是,增量学习容易遇到灾难性遗忘的问题,即增量更新的模型在新数据上过拟合,忘记了在旧模型上学习到的知识。目前已有的增量学习解决方案为正则化和蓄水池。正则化指的是将旧模型上学习到的知识蒸馏到增量学习的新模型;蓄水池保留一部分旧数据,和新数据混合在一起用于增量学习。

 

 

我们提出了GraphSAIL,是GCN在召回场景下的轻量化优化方案,提出了全新的三种机制来防止GCN增量学习遇到灾难性遗忘的问题。

 

首先,新学习得到的embedding不应该偏离旧的embedding太远,正则化系数保证变化大的节点,权重蒸馏权重小。其次,我们考虑了局部结构的蒸馏,希望中心节点和一阶邻居的相似度在旧模型和增量学习的新模型之间不应该偏离太远。

 

 

第三,我们考虑了全局结构的蒸馏,旧模型和新模型的embedding在空间中的分布位置不应该偏离太远。首先将user节点和item节点进行聚类,得到K个类中心以及对应的平均embedding;然后我们计算每个节点和类中心的相对距离。蒸馏节点的全局位置通过维持节点和类中心的相对距离,使得增量学习的新模型在全局结构上不会大幅偏离旧模型。

 

 

上图展示了GraphSAIL和三个基线的实验结果 。第一个基线直接用新数据来fine-tune旧模型,第二个基线是embedding蒸馏的不加权版本,第三个基线利用知识蒸馏来保留每个节点的一阶局部结构。从实验结果来看,我们的模型在两个数据集上对比三个基线都有更优异的表现,甚至在某些模型的实验中能超过full batch的效果。值得一提的是,我们的训练速度相较于full batch训练有极大的提升。

 

03

 

图神经网络用于精排

 

 

业界已有的研究工作可以分为两大方向:基于特征交互的建模和基于显式关系的建模。 https://github.com/zziqi/CTR-Estimation 是我们整理了业界已有的CTR模型的链接。

 

CIKM2019中提出的FiGNN使用特征之间的关系构建了一个全连接图,在这个图上做特征交互,但是由于有些特征之间是完全没有联系的,这种做法会引入大量的噪声。GraphFM在FiGNN的基础上对全连接图的每条边的存在性进行判断,最后在筛选后的特征图上进行图卷积操作,建模特征交互。AAAI2021提出的L0-SIGN使用L0正则,确保只有少部分边参与特征图的构建。

 

精排中会考虑大量的特征,如user id,item id以及一些feature,我们其实是可以得到它们之间的显式关系,通过构建一个异质图来做显式关系建模。比较有代表性的工作有去年诺亚在KDD2021发表的DGENN,SIGIR2022发表的HIEN和GMT。其中,HIEN在DGENN的基础上建模了层级关系,GMT将gnn和transformer结合在一起,利用图采样和GNN得到多个表征,并在这个基础上使用Transformer进行建模,取得了不错的效果。

 

 

在DGENN之前,CTR预估模型可以分为两大类。首先,基于特征交互建模的CTR模型的代表作为PNN,DeepFM和xDeepFM。第二类是基于用户行为建模的CTR预估模型,如DIN,DIEN和SIM。CTR模型的趋势是向着越来越复杂的数据的方向来发展,越来越多模型使用检索的机制来找到用户历史行为中有用的信息来建模,即通过寻找越来越复杂的特征来提升效果。

 

 

但是已有的CTR预估模型存在两个问题:特征的稀疏性以及行为的稀疏性。在真实的业务数据上,我们发现它们大多服从长尾分布,即存在大量稀疏特征,在训练数据中只出现很少的次数,存在大量用户只有很少的历史交互。那幺此时,基于用户历史行为进行建模是很难得到很好的效果。基于此, 我们考虑使用GNN引入特征之间的关系和行为之间的关系来增强样本。

 

 

上图展示了DGENN的基本结构 。

 

已有的CTR模型的范式可以分为embedding层、表征学习、预测层三部分。我们利用图表征学习来优化embedding层,所以DGENN可以作为插件应用与大部分已有的CTR模型。具体地, 我们构建了一张异质图,包括user和item的属性图、user-user相似性图、item-item共现图以及user-item的协同图 。为了从包含各类关系的异质图中学习出一个好的表征,我们提出了分治策略和课程学习策略。前者先构建单属性图,再汇聚所有属性信息;后者考虑到行为之间的关系复杂性,先学习用户、商品各自的表征,再学习用户-商品的协同关系。

 

 

上图展示了实验结果,我们的方法在多个数据集上相比已有的基线模型有了大幅提升。 其次,我们将DGENN作为插件作用于多个基线模型(PNN、DIN、FiGNN),均取得了明显的效果提升。消融实验也表明四种不同的图之间是互补的,组合起来可以提升最终的效果。

 

 

我们目前在探索的方向是GCN在精排场景下的轻量化。 由于精排对时延要求很高,为了使复杂的GCN模型可以在精排场景落地, 我们考虑了三个优化方案:

 

首先,我们可以使用图预训练+fine tune的方法 ,先对异质图进行对比学习预训练得到节点表征,之后再进行fine tune。

 

第二个方案是图蒸馏,我们可以使用一个MLP对大型GNN进行蒸馏,在线上精排阶段使用这个MLP进行推理,既降低了时延又增加了模型的鲁棒性。

 

第三个方案是图粗化 ,即在大型图进行聚类,将图中节点的数量显着降低,那幺推理过程中的时间复杂度可以被大幅度降低。

 

04

 

图神经网络用于重排

 

 

在重排序阶段会存在一个待排序列表,由于排序阶段得到的排序分是pointwise的预测方式,没有考虑到商品间的关系,直接给出这部分预测结果可能无法满足用户的真实需求。排序列表中的商品关系会是可以互换且被用户同时交互的(例如互补关系),用户也会以不同的偏好和视角来看待排序列表。通过考虑商品间的关系,我们可以将更好的推荐结果返回给用户。

 

 

图神经网络可以建模商品之间的关系,因此可以被用于个性化重排序。 我们构建了一个由用户节点和商品节点组成的异质图来建模用户和商品间的关系。 图中有两种类型的边。我们使用商品间的关系(互补/可替代)来建模商品-商品间的边,使用初始的精排分数来建模用户-商品间的边。GNN中的消息传播机制需要学习用户/商品的表征向量。在汇聚商品节点信息时,我们考虑了商品之间边的类型(即商品之间的关系);而在汇聚用户节点信息时,我们不仅加入了用户的边类型(即排序分),还考虑了用户自身的表征来建模用户个性化信息。最后,我们根据网络生成的打分进行个性化重排序。

 

 

 

我们在亚马逊数据集上进行了实验,如上图所示。

 

其中,AB和BT为互补关系,AV和BV为可替换关系。从实验结果来看,我们的方法的表现均超过了基线模型;消融实验也表明去掉模型的用户表征、线性表换、商品之间的互补/可替换关系均会使效果有所下降,进而证明了各模块的有效性和必要性。

 

05

 

总结和展望

 

图神经网络在推荐系统的召回、精排、重排中得到了广泛的研究和应用。具体地, 我们提出了邻居交互感知的GCN模型来提高召回模型的效果 。针对精排模型中复杂的特征和关系,我们将数据建模成一个复杂的全局异质图,提出了两个策略(分治策略以及课程学习)来更好地学习embedding。针对重排模型中的商品关系,我们将用户-商品建模成一个异质图来进行个性化的重排序。此外,我们利用增量学习、预训练等策略进一步提升图神经网络模型的训练、推理效率。

 

我们认为,在未来,图神经网络可以在多行为、多场景、多模态等特征丰富的场景下得到广泛应用。另外,在真实场景下我们往往会将复杂的关系建模为一个异质图,其包含多种类型的节点和边,那幺更好地建模这种异质图是未来研究的方向。最后,我们希望进一步提升图神经网络的训练效率,增快模型迭代效率。

 

06

 

Q&A

 

Q:NIA-GNN在聚合信息时考虑了二阶邻居节点的直接传递,那幺它是不是等价于将二阶节点与中心节点加入residual直连?

 

A:首先,我们会将节点的一阶邻居和二阶邻居进行采样。在传统的Graphsage中,信息聚合的方式是根据阶次逐步传递的,那幺此时中心节点不仅包含了一阶邻居的信息,还包含了二阶邻居的信息。我们的做法则是直接将一阶邻居信息和二阶邻居信息汇聚至中心节点,考虑到二阶节点的同质性和一阶节点的异质性,经过实验我们发现,二阶节点信息比一阶节点的信息更重要,所以直接将二阶节点信息汇聚至中心节点的效果更好。

 

Q:请问有关用户兴趣建模类的模型,是不是大部分都会将item embedding一起进行优化?有没有尝试过利用已有item的embedding进行用户兴趣提取?

 

A:以DGENN为例,我们考虑了四种异质图:属性图、user-user相似性图、item-item共现图和user-item协同图。事实上,要是你去除其中一类图,如item-item图,也可以通过GNN来得到有用的信号。

 

Q:异质图的构图有没有一些实用的经验可供分享?比如如果不按照DGENN进行四种异质图的构图,会不会对模型效果产生影响?

 

A:可视化是十分关键的手段。以华为应用市场为例,我们将构建了用户和app节点组成的异质图,通过图神经网络的学习得到了app的表征。由先验知识我们可以知道,例如抖音和抖音火山版应该在embedding空间上是十分相似的,那幺我们可以可视化embedding来观察它们的表征之间的距离是否足够近,进而判断我们构建的图是否可以充分学习这个场景下的表征。在有些场景下用户的交互行为十分稀疏,使用用户的点击行为序列进行构图会引入大量噪声信息,那幺直接进行构图会很难使得图神经网络提取到有效的表征,此时我们可以通过可视化及时发现问题。可视化可以及时验证学习到的表征是否符合你的需求,进而判断构图的合理性。

 

Q:DGENN中属性图是如何构建的?

 

A:由于我们使用了分治法,其实我们并没有针对所有属性与属性之间的关系构建一张属性-属性的图。在DGENN中,我们先会根据item/user的一种属性信息进行建模,挖掘item与user在这一属性下的关系,最后再将多重属性关系聚合。

 

Q:如何将重排模型和业务要求的重排规则进行融合?

 

A:GNN可以在重排阶段带来更多的多样性,当然我们也可以根据业务规则来修改GNN中某些边的关系。例如,要是业务方要求为用户推荐更多有互补关系的商品列表,那幺我们可以人工标注更多拥有互补关系的边加入图中,进而引导图神经网络关注拥有互补关系的商品。总而言之,我们可以在构图的过程中做出一些针对性的设计,把业务方想要达到的规则融入其中。

 

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。