Graph Embedding在淘宝推荐系统的应用

之前已经写过两篇graph embedding(GE)的文章,都比较偏理论。关于GE这个主题再写最后一篇文章,是在推荐系统的实际应用。这是18年阿里发的一篇文章,应用在淘宝上,《Billion-scale Commodity Embedding for E-commerce Recommendation in Alibaba》,附个链接 https://arxiv.org/pdf/1803.02349.pdf。

算法的目的是生成商品的表示向量,然后对商品两两之间做点积,计算商品之间的相似度。对用户有过行为的每个商品,召回一批最相似的商品,这个阶段文章称为matching,然后将这些商品送给第二个阶段ranking做排序。

最基本的方法是根据用户行为,构建以商品为node的图,然后通过random walk生成商品的序列,再利用skip-gram算法,生成商品的表示向量,这称为Base Graph Embedding(BGE)。具体来看阿里是怎么操作的,如图1所示。图1(a)表示3个用户购买过的商品,并按照时间顺序做了排列,比如用户U1先后购买了D A B三个商品。这里有一个业务上的技巧,就是把用户在某个时间窗内的连续行为作为一个session,例如一个小时,如果超过时间窗,就划分为不同的session。通常在短周期内访问的商品更具有相似性。根据购买顺序构建有向图,如图1(b)所示,​edge_{ij}记录了从商品i到商品j的出现次数。计算商品的转移概率,并根据转移概率做游走,生成商品序列,如图1(c)所示。其中转移概率公式如公式(1)所示,M_{ij}​表示从商品i到商品j的出现次数,​N_{+}(v_i)表示​v_i的直接邻域。最后根据skip-gram训练商品的向量表示,如图1(d)所示。

Graph Embedding在淘宝推荐系统的应用_第1张图片 公式(1)
Graph Embedding在淘宝推荐系统的应用_第2张图片 图1

新商品没有用户行为,因此无法根据BGE训练得出向量。为了解决物品的冷启动问题,阿里加上了物品的边信息Side Information,例如品牌,商品类别,商店等信息。SI相似的商品,在向量空间中也应该接近。具体做法如图2所示,在最下面的Sparse Features中,SI0​表示商品本身的one-hot特征,SI1​到SIn​表示n个边信息的one-hot特征。每个特征都索引到对应的embedding向量,得到第二层的Dense Embeddings,然后将这(n+1)个向量做平均来表示这个商品,计算公式如公式(2)所示,​W_v^s表示商品v的第s个边信息向量,H_v​是隐向量。剩下的事情就和BGE相同了。这个做法叫Graph Embedding with Side Information(GES)。

Graph Embedding在淘宝推荐系统的应用_第3张图片 公式(2)
Graph Embedding在淘宝推荐系统的应用_第4张图片 图2

取平均还是显得太粗糙了,因为不同的边信息对于商品的向量可能会有不同的贡献。因此,可以另外学习一个权重矩阵A \in R^{|V|\times (n+1)}​,其中|V|表示商品集合V的数量,​A_{ij}表示第i个商品的第j个边信息权重。计算公式如公式(3)所示,从平均变成了加权求和。为什么对权重取e的指数,是为了保证所有边信息的权重大于0。这个方法叫做Enhanced Graph Embedding with Side Information(EGES)。

Graph Embedding在淘宝推荐系统的应用_第5张图片 公式(3)

图3是抽取的8个不同的商品,在各个边信息上的权重的分布。可以看到,对每个商品,不同的边信息有不同的权重。最重要的还是item本身的向量,第二重要的是shop这个边信息。

Graph Embedding在淘宝推荐系统的应用_第6张图片 图3

关于新商品的冷启动问题,因为尚未学到权重矩阵,因此将边信息向量求平均作为商品的表示。

很简单的文章,最后自问自答两个问题。

1)本文的边信息都是类别特征,如果是文本或者图像特征,该怎么加到图网络中?

我的想法是,可以先预训练文本或图像,生成文本或图像的表示向量,作为其中一个边信息向量,然后固定住文本和图像向量,放在整个网络中学习这两个向量的权重。

2)原文算法在构建图的时候采用的是有向图,这个真的是有必要的吗?

skip-gram算法的训练是丢掉顺序信息的,因此序列(v_i,v_j)​和序列(v_j,v_i)​是等价的。skip-gram不关心序列顺序,只是不知道有向图和无向图生成的item pair数量分布是否有差异。

你可能感兴趣的:(深度学习,机器学习,推荐算法)