1. 概述

相比较于基于Collaborative Filter算法,基于基础Graph Embedding模型可以根据用户的行为序列学习出item的embedding,利用item对应的Embedding可以方便计算item与item之间的相似度,并在实践中被证明是卓有成效的方法,在基于基础Graph Embedding模型,主要包括item2vec,node2vec,deepwalk等算法。

在使用基础Graph Embedding算法的前提是用户的行为序列,但是对于一些新的item或者用户很少有行为的item,即冷启动问题,基础的Graph Embedding算法很难学到对应item的embedding表示,为此,一些针对item冷启动的方法被提出,其中就包括GES和EGES算法。

GES和EGES是阿里在2018年提出的两个基于Graph Embedding的算法,其中GES全称为Graph Embedding with Side Information,EGES全称为Enhanced Graph Embedding with Side Information。为了解决冷启动的问题,GES和EGES在计算item embedding的过程中引入了side information。

2. 算法原理

2.1. side information

side information在推荐系统中有着重要的作用,不仅仅能应用在召回中用于处理冷启动问题,同时在排序阶段中也有广泛的应用。side information主要指的是与item相关的一些先验信息,对于商品而言,先验信息包括:类别,商店,价格等。

2.2. GES算法

GES算法全称为Graph Embedding with Side Information,假设W\mathbf{W}W表示item或者side information的embedding矩阵,其中,Wv0\mathbf{W}_v^0Wv0表示item vvv的embedding,Wvs\mathbf{W}_v^sWvs表示第sss个side information,item vvv共有nnn个side information,则对于item vvv共有n+1n+1n+1个向量:

Wv0,⋯,Wvn∈Rd\mathbf{W}_v^0,\cdots ,\mathbf{W}_v^n\in \mathbb{R}^dWv0,WvnRd

其中,ddd为embedding的维度。

对于item vvv,使用average-pooling将这n+1n+1n+1个向量聚合起来,得到item vvv的向量表示:

Hv=1n+1∑s=0nWvs\mathbf{H}_v=\frac{1}{n+1}\sum_{s=0}^{n}\mathbf{W}_v^sHv=n+11s=0nWvs

2.3. EGES算法

EGES算法全称为Enhanced Graph Embedding with Side Information,从其名字来看便可以知道,EGES是GES的增强版。在GES中,每一个向量,包括一个item的向量以及nnn个side information的向量,这些向量的权重是一样的。从实际的情况来看,不同种类的side information对于最终的embedding的贡献是不一样的。因此EGES对GES中的向量做了加权的操作。

假设对于item vvv,权重矩阵为A∈R∣V∣×(n+1)\mathbf{A}\in\mathbb{R}^{\left | V \right |\times \left ( n+1 \right )}ARV×(n+1),其中,Aij\mathbf{A}_{ij}Aij表示第iii个item的第jjj个side information的权重,为简单,记aija_i^jaijAij\mathbf{A}_{ij}AijAi0\mathbf{A}_{i0}Ai0表示的是item iii本身向量的权重,记为ai0a_i^0ai0

对于item vvv,加权平均后的结果为:

Hv=∑j=0neavjWvj∑j=0neavj\mathbf{H}_v=\frac{\sum _{j=0}^ne^{a_v^j}\mathbf{W}_v^j}{\sum _{j=0}^ne^{a_v^j}}Hv=j=0neavjj=0neavjWvj

其中,使用eavje^{a_v^j}eavj而不是avja_v^javj是为了保证权重大于0。

2.4. GES和EGES的模型结构

GES和EGES的模型结构如下图所示:


其中,Dense Embeddings表示的是item向量以及nnn个side information的向量。Hidden Representation即为如上公式中的Hv\mathbf{H}_vHv。从上述过程来看,GES即为EGES模型的简化版本,即权重都为1n+1\frac{1}{n+1}n+11

2.5. EGES中item向量的求解

EGES算法的流程如下图所示:


从EGES算法的流程中,笔者发现,其与DeepWalk的流程基本一致,不同的主要是两点:1)学习的参数不同,在DeepWalk中主要是item的向量表示,在EGES中不仅要学习item的向量W0\mathbf{W}^0W0nnn个side information的向量W1,⋯Wn\mathbf{W}^1,\cdots \mathbf{W}^nW1,Wn,还包括权重的矩阵A\mathbf{A}A;2)在DeepWalk中使用的是SkipGram,在EGES中使用的是WeightedSkipGram。

2.6. Weighted Skip-Gram

Weighted Skip-Gram算法的流程如下所示:


为了能够更好的理解上述的流程,我们需要先了解word2vec中Skip-Gram模型的具体流程,在词向量的求解过程中除了Skip-Gram还可以是CBOW模型,本文的重点是Skip-Gram模型,Skip-Gram模型的结构如下图所示:


为讨论的方便,假设在Skip-Gram模型中,每个词的向量维度为ddd,在词典VVV中,中心词wcw_cwc的词向量为vc∈Rdv_c\in \mathbb{R}^dvcRd,背景词wow_owo的词向量为uo∈Rdu_o\in \mathbb{R}^duoRd。给定中心词生成背景词的条件概率可以通过对向量内积做softmax运算而得到:

P(wo∣wc)=exp(uoTvc)∑i∈Vexp(uiTvc)P\left ( w_o\mid w_c \right )=\frac{exp\left ( u_o^Tv_c \right )}{\sum _{i\in V}exp\left ( u_i^Tv_c \right )}P(wowc)=iVexp(uiTvc)exp(uoTvc)

此时,对于整个文本可以得到如下的概率形式:

∏t=1T∏−m⩽j⩽m,j≠0P(w(t+j)∣w(t))\prod_{t=1}^{T}\prod _{-m\leqslant j\leqslant m,j\neq 0}P\left ( w^{\left ( t+j \right )}\mid w^{\left ( t \right )} \right )t=1Tmjm,j=0P(w(t+j)w(t))

语言模型中的目标是要使得上述的概率最大,通过log似然,可以得到如下的损失函数:

−∏t=1T∏−m⩽j⩽m,j≠0logP(w(t+j)∣w(t))-\prod_{t=1}^{T}\prod _{-m\leqslant j\leqslant m,j\neq 0}log\; P\left ( w^{\left ( t+j \right )}\mid w^{\left ( t \right )} \right )t=1Tmjm,j=0logP(w(t+j)w(t))

对于logP(wo∣wc)log\; P\left ( w_o\mid w_c \right )logP(wowc),有:

logP(wo∣wc)=uoTvc−log(∑i∈Vexp(uiTvc))log\; P\left ( w_o\mid w_c \right )=u_o^Tv_c-log\left ( \sum _{i\in V}exp\left ( u_i^Tv_c \right ) \right )logP(wowc)=uoTvclog(iVexp(uiTvc))

为了能够对其中的参数求解,可以使用梯度下降法求解,此时需要对损失函数求导,以∂logP(wo∣wc)∂vc\frac{\partial log\; P\left ( w_o\mid w_c \right )}{\partial v_c}vclogP(wowc)为例:

∂logP(wo∣wc)∂vc=uo−∑j∈VP(wj∣wc)⋅uj\frac{\partial log\; P\left ( w_o\mid w_c \right )}{\partial v_c}=u_o-\sum _{j\in V}P\left ( w_j\mid w_c \right )\cdot u_jvclogP(wowc)=uojVP(wjwc)uj

从上述的公式发现,每次的求导数的过程中,都需要对整个词典中的词计算,如果词典较大,那么每次更新时的计算成本就比较大,为降低计算成本,近似的训练方法被提出,负采样(Negative Sampling)便是其中的一种近似计算方法。

对于上述给定的中心词wcw_cwc,给定一个背景窗口,假设背景词wow_owo出现在wcw_cwc的背景窗口中的事件概率为:

P(D=1∣wc,wo)=σ(uoTvc)P\left ( D=1\mid w_c,w_o \right )=\sigma \left ( u_o^Tv_c \right )P(D=1wc,wo)=σ(uoTvc)

对于给定的长度为TTT的文本,假设时间步ttt的词为w(t)w^{\left ( t \right )}w(t)且背景窗口大小为mmm,此时联合概率为:

∏t=1T∏−m⩽j⩽m,j≠0P(D=1∣w(t),w(t+j))\prod_{t=1}^{T}\prod _{-m\leqslant j\leqslant m,j\neq 0}P\left ( D=1\mid w^{\left ( t \right )},w^{\left ( t+j \right )} \right )t=1Tmjm,j=0P(D=1w(t),w(t+j))

此时模型中仅考虑了正样本,通过采样KKK个未出现在该背景窗口中的词,此时的联合概率为:

∏t=1T∏−m⩽j⩽m,j≠0P(w(t+j)∣w(t))\prod_{t=1}^{T}\prod _{-m\leqslant j\leqslant m,j\neq 0}P\left ( w^{\left ( t+j \right )}\mid w^{\left ( t \right )} \right )t=1Tmjm,j=0P(w(t+j)w(t))

其中,P(w(t+j)∣w(t))P\left ( w^{\left ( t+j \right )}\mid w^{\left ( t \right )} \right )P(w(t+j)w(t))可以表示为:

P(w(t+j)∣w(t))=P(D=1∣w(t),w(t+j))⋅∏k=1KP(D=0∣w(t),wk)P\left ( w^{\left ( t+j \right )}\mid w^{\left ( t \right )} \right )=P\left ( D=1\mid w^{\left ( t \right )},w^{\left ( t+j \right )} \right )\cdot \prod_{k=1}^{K}P\left ( D=0\mid w^{\left ( t \right )},w_k \right )P(w(t+j)w(t))=P(D=1w(t),w(t+j))k=1KP(D=0w(t),wk)

可以验证,此时计算不再与词典大小相关,而是与负采样的参数KKK相关,以上便是Skip-Gram模型以及负采样的相关内容。

对于采样到的样本uuu,其对应的向量为Zu\mathbf{Z}_uZu,由上述的理论可以得到:

L(v,u,y)=−[ylog(σ(HvTZu))+(1−y)log(1−σ(HvTZu))]\mathfrak{L}\left ( v,u,y \right )=-\left [ ylog\left ( \sigma \left ( \mathbf{H}_v^T\mathbf{Z}_u \right ) \right )+\left ( 1-y \right )log\left ( 1-\sigma \left ( \mathbf{H}_v^T\mathbf{Z}_u \right ) \right ) \right ]L(v,u,y)=[ylog(σ(HvTZu))+(1y)log(1σ(HvTZu))]

可以得到如下的导数:

∂L∂Zu=(σ(HvTZu)−y)Hv\frac{\partial \mathfrak{L}}{\partial \mathbf{Z}_u}=\left ( \sigma \left ( \mathbf{H}_v^T\mathbf{Z}_u \right )-y \right )\mathbf{H}_vZuL=(σ(HvTZu)y)Hv

∂L∂avs=(σ(HvTZu)−y)Zu(∑j=0neavj)eavsWvs−eavs∑j=0neavjWvj(∑j=0neavj)2\frac{\partial \mathfrak{L}}{\partial a_v^s}=\left ( \sigma \left ( \mathbf{H}_v^T\mathbf{Z}_u \right )-y \right )\mathbf{Z}_u\frac{\left ( \sum_{j=0}^{n}e^{a_v^j} \right )e^{a_v^s}\mathbf{W}_v^s-e^{a_v^s}\sum_{j=0}^{n}e^{a_v^j}\mathbf{W}_v^j}{\left ( \sum_{j=0}^{n}e^{a_v^j} \right )^2}avsL=(σ(HvTZu)y)Zu(j=0neavj)2(j=0neavj)eavsWvseavsj=0neavjWvj

∂L∂Wvs=eavs∑j=0neavj(σ(HvTZu)−y)Zu\frac{\partial \mathfrak{L}}{\partial \mathbf{W}_v^s}=\frac{e^{a_v^s}}{\sum_{j=0}^{n}e^{a_v^j}}\left ( \sigma \left ( \mathbf{H}_v^T\mathbf{Z}_u \right )-y \right )\mathbf{Z}_uWvsL=j=0neavjeavs(σ(HvTZu)y)Zu

参考文献

  • Wang J, Huang P, Zhao H, et al. Billion-scale commodity embedding for e-commerce recommendation in alibaba[C]//Proceedings of the 24th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining. 2018: 839-848.
  • [Graph Embedding]阿里超大规模商品Embedding策略EGES
  • Graph Embedding在淘宝推荐系统中的应用
  • NLP之—word2vec算法skip-gram原理详解

推荐系统中的常用算法——基于Graph Embedding的GES和EGES相关推荐

  1. 推荐系统中的常用算法——基于Session的推荐

    1. 概述 <Session-based recommendations with recurrent neural networks>首次提出将RNN方法应用于Session-based ...

  2. 推荐系统中的常用算法——序列深度匹配SDM

    1. 概述 推荐系统中的算法通过用户的历史行为数据挖掘用户的偏好,实现对用户偏好的建模,从而达到为用户推荐用户感兴趣的item.用户的兴趣偏好通常是多变的,而且是多样的.然而传统的基于item的协同过 ...

  3. 推荐系统中的召回算法大致梳理(非完整)

    推荐系统中的召回算法大致梳理(非完整) 定义 推荐策略中的两个关键问题分别是"召回"和"排序". "召回match"是指从全量信息中触发尽可 ...

  4. 【干货】推荐系统中的机器学习算法与评估实战

    [导读]推荐系统是机器学习技术在企业中最成功和最广泛的应用之一.本文作者结合MLMU演讲[1]的Slides,对推荐系统的算法.评估和冷启动解决方案做了详细的介绍. 作者 | Pavel Kordík ...

  5. 分支限界法 java_java中的常用算法之分支限界算法

    一.基本描述 类似于回溯法,也是一种在问题的解空间树T上搜索问题解的算法.但在一般情况下,分支限界法与回溯法的求解目标不同.回溯法的求解目标是找出T中满足约束条件的所有解,而分支限界法的求解目标则是找 ...

  6. 推荐系统中的召回算法--协同过滤

    工业界通用推荐系统架构: Match&Rank 定义:Match基于当前user(profile.history)和context,快速在全库中找到TopN最相关的Item,给Rank来做小范 ...

  7. 【推荐算法】Graph Embedding——引入更多结构信息的图嵌入技术

    在互联网背景下,数据对象之间更多的是以图结构的方式呈现的,典型的例子就是由用户行为序列产生的物品关系图,以及由属性和实体之间组成的知识图谱(knowledge graph).在面对图结构时候,传统的序 ...

  8. 神经网络中的常用算法-BN算法

    目录 一.引言 二.Convariate shift 三.算法 1.算法公式 2.训练中的BN算法 3.测试和推理中的BN算法 四.BN算法在网络中的作用 1.优点 2.缺点 五.论文 一.引言 传统 ...

  9. 神经网络中的常用算法-梯度下降算法的优化

    一.概述 梯度下降法(Gradient descent )是一个一阶最优化算法,通常也称为最陡下降法 ,要使用梯度下降法找到一个函数的局部极小值 ,必须向函数上当前点对应梯度(或者是近似梯度)的反方向 ...

  10. 推荐系统中协同过滤算法实现分析

    原创博客,欢迎转载,转载请注明:http://my.oschina.net/BreathL/blog/62519 最近研究Mahout比较多,特别是里面协同过滤算法:于是把协同过滤算法的这个实现思路与 ...

最新文章

  1. leetcode111. 二叉树的最小深度(队列)
  2. [Unity] Animator 播放 Mixamo 动画卡在第一帧的解决办法:勾选 Loop Time
  3. 回溯法解0-1背包问题(王晓东算法例题)
  4. ExcelToDataTable
  5. php parse url 中文,php parse_url()函数解析URL用法总结
  6. 18-CSS问题-让多个div横排显示并设置间距解决方案
  7. idea报错 IDEA:clear read-only status
  8. SURF源码分析之fasthessian.h和fasthessian.cpp
  9. 阮一峰ES6学习笔记
  10. ssm高仿bilibili视频网站
  11. js实现json转excel的npm包
  12. 卓有成效的管理者——彼得·德鲁克
  13. 5V升压8.4V,5V转8.4芯片电路图
  14. SDUT 1160 某年某月的天数
  15. java 发送封包_【Java学习笔记】自动封包和解包(Autoboxing和AutoUnboxing)
  16. AcWing 838. 堆排序
  17. 谈谈 Spring 中的 NoSuchBeanDefinitionException
  18. bugku crypto-python_jail
  19. JAVA 18 拥有 9 个新特性,JDK18
  20. 商业Wi-Fi:4G时代的垃圾

热门文章

  1. 项目需求到设计的理解
  2. 分享个自己Python爬虫时的浏览器标识库
  3. 多伦多大学计算机硕士读几年,多伦多大学计算机硕士申请条件
  4. ubuntu18.04下载安装mysql 5.7 【压缩包】
  5. 精细化用电侧能源管控 解码光伏电站运维痛点
  6. Go使用gos7实现西门子PLC通讯
  7. php 与shell有什么关系,shell是什么意思
  8. 一点点读懂regulator(二)
  9. 深度理解CNN中的感受野(大杀器)
  10. svchost.exe 占用网络资源