Graph Embedding(用户历史行为的特征挖掘)

2020-08-13  本文已影响0人  小幸运Q

https://zhuanlan.zhihu.com/p/133870768
https://zhuanlan.zhihu.com/p/140508936


image.png

经典的Graph Embedding方法——DeepWalk

早期影响力较大的graph embedding方法是2014年提出的DeepWalk,它的主要思想是在由物品组成的图结构上进行随机游走,产生大量物品序列,然后将这些物品序列作为训练样本输入word2vec进行训练,得到物品的embedding。

对于随机选择的点,下一步选择哪里作为落脚点需要计算各边的权重占比。

image.png

其中N+(vi)是节点vi所有的出边集合,Mij是节点vi到节点vj边的权重

如果物品相关图是无相无权重图,那么跳转概率将是上面公式的一个特例,即权重Mij将为常数1,且N+(vi)应是节点vi所有“边”的集合,而不是所有“出边”的集合。

Node2vec

通过调整随机游走权重的方法使graph embedding的结果在网络的同质性(homophily)和结构性(structural equivalence)中进行权衡权衡。

image.png

网络的“同质性”指的是距离相近节点的embedding应该尽量近似,如图,节点u与其相连的节点s1、s2、s3、s4的embedding表达应该是接近的,这就是“同质性“的体现

“结构性”指的是结构上相似的节点的embedding应该尽量接近,图4中节点u和节点s6都是各自局域网络的中心节点,结构上相似,其embedding的表达也应该近似,这是“结构性”的体现。

BFS反映了结构性(周边结构相似),DFS反应了同质性(周游世界才知道我们相似)

image.png

从节点v跳转到下一个节点x的概率为:(w_{vx}是边vx的权重)

image.png image.png

其中,d_{tx}指的是节点t到节点x的距离,参数p和q共同控制着随机游走的倾向性。参数p被称为返回参数(return parameter),p越小,随机游走回节点t的可能性越大,node2vec就更注重表达网络的同质性,参数q被称为进出参数(in-out parameter),q越小,则随机游走到远方节点的可能性越大,node2vec更注重表达网络的结构性,反之,当前节点更可能在附近节点游走。

同质性相同的物品很可能是同品类、同属性、或者经常被一同购买的物品。结构性相同的物品则是各品类的爆款、各品类的最佳凑单商品等拥有类似趋势或者结构性属性的物品。

由于node2vec的这种灵活性,以及发掘不同特征的能力,甚至可以把不同node2vec生成的embedding融合共同输入后续深度学习网络,以保留物品的不同特征信息。


阿里EGES(Enhanced Graph Embedding with Side Information)

基本思想是在DeepWalk生成的graph embedding基础上引入补充信息。

如果单纯使用用户行为生成的物品相关图,固然可以生成物品的embedding,但是如果遇到新加入的物品,或者没有过多互动信息的长尾物品,推荐系统将出现严重的冷启动问题。为了使“冷启动”的商品获得“合理”的初始Embedding,阿里团队通过引入了更多补充信息来丰富Embedding信息的来源,从而使没有历史行为记录的商品获得Embedding。

生成Graph embedding的第一步是生成物品关系图,通过用户行为序列可以生成物品相关图,利用相同属性、相同类别等信息,也可以通过这些相似性建立物品之间的边,从而生成基于内容的knowledge graph。而基于knowledge graph生成的物品向量可以被称为补充信息(side information)embedding向量,当然,根据补充信息类别的不同,可以有多个side information embedding向量。

最简单的方法是在深度神经网络中加入average pooling层将不同embedding平均起来,阿里在此基础上进行了加强,对每个embedding加上了权重,如图7所示,对每类特征对应的Embedding向量,分别赋予了权重a0,a1…an。图中的Hidden Representation层就是对不同Embedding进行加权平均操作的层,得到加权平均后的Embedding向量后,再直接输入softmax层(中间类似skip-gram的后半段),这样通过梯度反向传播,就可以求的每个embedding的权重ai(i=0…n)

基于skip-gram的EGES模型,SI 0代表商品v的embedding,SI i代表商品v的side info,P代表正样本,N代表负样本

H_v=\frac{\sum_{j=0}^{n} e^{a_v^j}W_v^j}{\sum_{j=0}^{n} e^{a^j_v}}

H_v是商品v的n个side info+原商品embedding的融合,Z_u是商品u的embedding表达,y代表节点u对应的label(skip-gram中的正样本(上下文中存在)1,负样本0)

L(v,u,y)=-[ylog(\sigma(H_v^TZ_u))+(1-y)log(1-\sigma(H_v^TZ_u))]

使用e^{a_j}方便求导,而且不用担心变0

使用side embedding的平均值予以填充。


噪音消除:

当然在实际使用中,数据肯定存在噪声,需要对做一些处理,来消除噪声:

  1. 在点击后停留的时间少于1秒,可以认为是误点,需要移除。
  2. 还有一些过度活跃用户,三月内购买商品数超过1000,或者点击数超过3500,就可以认为是一个无效用户,需要去除。
  3. 还有一些商品频繁的修改商品内容的,造成前后同一id的商品信息不对应,需要移除。

数据筛选

然而,不可能使用一个用户的整个历史,因为:

  1. 用户的历史记录太多,计算代价和存储代价昂贵;
  2. 用户的兴趣往往会随时间改变。

因此,我们设置了一个时间窗口,只选择用户在该窗口内的行为。这被称为是基于session的用户行为(session-based)。


Embedding与深度神经网络的训练分开(Embedding离线,深度网络实时)

因为用户的兴趣爱好和商品的属性基本上变化很少(短时间内),所以embedding不需要太高的频率。甚至可以降到周的级别(可以离线训练),但是上层神经网络为了抓住最新的数据整体趋势信息,往往需要高频训练甚至实时训练。这也是平衡训练开销与精度后的最优方案。

上一篇下一篇

猜你喜欢

热点阅读