本文是阿里发表在KDD 2018,基于Graph Embedding实现淘宝首页推荐召回。主要通过用户点击的行为历史构建item图,学习图上所有item的embedding。同时为了解决可扩展性(scalability)、稀疏性(sparsity)、冷启动问题(cold start),在Item图的基础上,增加 item 的额外信息(例如category, brand, price等)丰富item表征力度。提出了BGE、GES和EGES三个模型。
1.背景
淘宝平台推荐的三个问题:
- 可扩展性(scalability):已有的推荐算法(CF,Base-Content,DL)可以在小数据集上有不错效果,但是对于10亿用户,20亿商品这样海量的数据集上效果差。
- 稀疏性(sparsity):用户仅与小部分商品交互,难以训练准确的推荐模型。
- 冷启动(cold start):物品上新频繁,然而这些商品并没有用户行为,预测用户对这些商品的偏好是十分具有挑战性的。
现在业界针对海量数据的推荐问题通用框架是分成两个阶段,matching & ranking。在matching阶段,我们会生成一个候选集,它的items会与用户接触过的每个item具有相似性;接着在ranking阶段,我们会训练一个深度神经网络模型,它会为每个用户根据他的偏好对候选items进行排序。本文关注的问题在推荐系统的matching,也就是从商品池中召回候选商品的阶段。核心的任务是计算所有item之间的相似度。
为了达到这个目的,本文提出根据用户历史行为构建一个item graph,然后使用DeepWalk学习每个item的embedding,即Base Graph Embedding(BGE)。BGE优于CF,因为基于CF的方法只考虑了在用户行为历史上的items的共现率。但是对于少量或者没有交互行为的item,仍然难以得到准确的embedding。为了减轻该问题,本文提出使用side information来增强embedding过程,提出了Graph Embedding with Side information (GES)。例如,属于相似类别或品牌的item的embedding应该相近。在这种方式下,即使item只有少量交互或没有交互,也可以得到准确的item embedding。在淘宝场景下,side information包括:category,brand,price等。不同的side information对于最终表示的贡献应该不同,于是本文进一步提出一种加权机制用于学习embedding with side information,称为Enhanced Graph Embedding with Side information (EGES)。
2.框架
2.1 构建 item graph
现实中,在淘宝上一个用户的行为趋向于如图2(a)所示的序列。之前基于CF的方法只考虑了items的共现,但忽略了顺序信息(可以更精准地影响用户的偏好)。然而,不可能使用一个用户的整个历史,因为:计算开销和存储开销会非常大,一个用户的兴趣趋向于随时间漂移。因此,我们设置了一个时间窗口,只选择用户在该窗口内的行为。这被称为是基于session的用户行为(session-based)。经验上,该时间窗口的区间是一个小时,设置一个时间窗口,会通过一个有向边进行连接,例如:图2(b)的item D和item A是连接的,因为在图2(a)中用户u1顺序访问了item D和A。通过利用在淘宝上所有用户的协同行为,我们会为每条边eij基于在所有用户行为的行连接items中的出现总数分配一个权重。特别的,在所有用户行为历史中,该边的权重等于item i转向item j的频次。
当然在实际使用中,数据肯定存在噪声,需要对做一些处理,来消除噪声:
- 在点击后停留的时间少于1秒,可以认为是误点,需要移除。
- 还有一些过度活跃用户,三月内购买商品数超过1000,或者点击数超过3500,就可以认为是一个无效用户