介绍
今天给大家介绍3篇图神经网络在阿里推荐业务中的应用,涉及到了图神经网络,组合优化,和强化学习等技术。
KDD2019 Exact-K Recommendation via Maximal Clique Optimization
WWW2021 Large-scale Comb-K Recommendation
AAAI2021 Who You Would Like to Share With? A Study of Share Recommendation in Social E-commerce
淘宝首页 Exact-K
推荐中可能90%以上的任务做的都是:给单个用户推荐单个商品,top-k排序推送即可。实际工业场景下的业务复杂多样, 也诞生了多种推荐需求。比如,给单个用户推荐一次性推荐一组K个商品,如下图红框所示。这里给单个用户推荐的一组4个商品(hat, scarf, socks, glove),K=4。
![](https://i-blog.csdnimg.cn/blog_migrate/b0fa193402204427610a60bd8aa5d1df.jpeg)
本文将一组K个商品叫做card, 推荐一组商品的推荐范式叫做Exact-K,其旨在最大化用户点击card的概率。注意,这里的card需要满足一些约束,比如多样性。有点类似重排过程,希望展示给用户的商品不要过于单一。
问题定义
Exact-K推荐
给定候选的N个商品的集合 , Exact-K旨在给用户 推荐K个商品构建的一个card ,其能够最大化用户的点击概率。
对于card的约束为。 代表了用户是否喜欢或点击。这里用 来表示是否满足约束。这里约束的个数 时,代表没有任何约束。
上面的问题看起来和Graph并没有什么关系,但是作者用了一个巧妙的转化,将其转为图上的组合优化问题。
具体的,作者构建了一个图 , 其中每个节点 代表一个候选商品 , 连接节点 的边 表示商品 是否满足约束 。
Exact-K的需求会转化成选取图上的一个clique,其可以最大化上面的目标函数。这实际是maximal clique optimization问题。
以下图为例,20个商品组成了一张图, 为了选取K=4个商品, 有很多可能。这里用圆圈标识了两个不同的商品组合card 。
![](https://i-blog.csdnimg.cn/blog_migrate/ae56fc43733b0b0b150e54f22dd79dd4.jpeg)
最naive的解法
上述问题有一个最naive的解法,就是忽略约束,直接估计节点的权重,然后选取权重和最大的一组商品,如下所示:
其中, 就代表节点的权重 ,可以用CTR来表示。CTR越高,商品节点被点击概率越高,越重要。
本文求解策略
上述naive算法的效果肯定是非常差的,为了更好的为用户推荐card,本文提出了一个Encoder-Decoder Pointer framework, 其encoder部分用GAT来学习节点表示,其decoder部分用pointer来选取图上的clique,即card 。
![](https://i-blog.csdnimg.cn/blog_migrate/e819195857c52a1260b31acf0a50709e.jpeg)
Encoder-Decoder
Encoder部分是一个常见的GAT,其所学习节点表示为 。
Decoder部分类似文本生成, 用RNN来逐个选取(生成)card中的每个商品。
到这里就达到Exact-K的目标了,已经可以为用户 生成一组K个商品构成的card 。但是问题是如何训练模型呢?
强化学习训练
本文将encoder 作为状态state, decoder 作为策略policy,整个优化目标作为奖励reward,然后按照强化学习的方式进行训练。
损失函数主要包括2部分:
真实值和预测值之间的交叉熵损失函数
基于Reward的损失
最终的loss是两部分混合。
实验
首先是有效性实验,提升显著。
![](https://i-blog.csdnimg.cn/blog_migrate/4a7bce6ae6cc8e310960e291c72d5617.jpeg)
然后各种强化学习训练trick对于提升Exact-K求解的作用,把P@4从0.3340提升到了0.4743。
![](https://i-blog.csdnimg.cn/blog_migrate/9286cc8c43e515459c955b4040ebe0b8.jpeg)
聚划算/百亿补贴 Comb-K
Comb-K和后面的那篇HGSRec都是小编在阿里实习期间做的,其核心架构都是异质图建模和异质图神经网络。因此,我们建立了一个统一的框架来支持多种业务,如下所示:
![](https://i-blog.csdnimg.cn/blog_migrate/cd1cb1e650b524bce61d7add67f7987f.jpeg)
WWW这篇研究了聚划算/百亿补贴业务的选品算法。我们希望选取一组能够满足在频道所有用户总体偏好并最大化一组商品的收益。这里需要注意,选取一组商品之后还需要招商让其降价打折进到频道里,最后才是个性化商品推荐模型来对用户进行投放。类似的业务场景在亚马逊和京东都可以看到。
聚划算业务流程比较复杂,由3波同学一起来完成,可以分为下面3个阶段:
选品阶段:选取有限数量(K个)一组商品K-set,满足大部分用户偏好。
招商阶段:对选品结果招商,让其降价打折进来
投放阶段:基于用户个性化偏好,对选品进行排序并投放(用户可见的阶段)。
为了最大化在投放阶段的收益,我们在选品阶段就要充分考虑未来投放的情况并用来指导选品过程。难点在于,选品在前,投放在后。怎么才能预知未来会发生的事情呢?
(下图中的Delivery Window可以看做投放->选品的指导信号)。
![](https://i-blog.csdnimg.cn/blog_migrate/a2525d0f71d868bac3039129ed74c71e.jpeg)
Delivery Window叫投放窗口,其代表了在投放阶段每个用户能看到的商品数量。这里的 30和0.78代表大概78%的用户只会看到30个商品就离开了。既然观测到了这个未来会窗口现象,那么能不能将其作为某种约束或者指导信号,在目前的选品阶段就进行考虑呢?例如下图中的红色指导信号。
![](https://i-blog.csdnimg.cn/blog_migrate/05d4e45d40aa3b3d689afcdfed45d181.jpeg)
问题定义
给定一个促销场景 ,其包含所有用户,商品,及其之间的交互。这里旨在选取一组商品的集合 , 其在所有用户上的收益 最大:
其中, 代表商品 是否被选择, 代表只选取了K个商品。
现在核心问题来了,怎么选取这一组K个商品呢?这就是Comb-K要做的事情。
注意:Exact-K是针对场景内单个用户选取的K个商品, Comb-K是针对场景里所有的用户选取的K个商品。
Comb-K的建模
用户级别Comb-K
给定用户 在商品