阿里EGES

news2024/10/6 6:42:29

EGES:Billion-scale Commodity Embedding for E-commerce Recommendation in Alibaba

阿里的EGES是Graph Embedding的一个经典应用,在内容冷启和物料召回上面有较多的落地潜力。主要思想是根据用户交互的物料作为节点构建物料图,在传统的DeepWalk学习节点Embedding的基础上,使用attention融合节点的side information,使得学习到的物料Embedding包含更丰富、精准的信息。

动机

为了解决淘宝推荐的三大挑战:

  1. Scalability 扩展性,淘宝有十亿量级的用户和二十亿量级的物料
  2. Sparsity 稀疏性,很多用户有交互的物料非常少,用户或者物料很难学习的充分
  3. Cold Start 冷启动问题,每小时有上百万的新物料上线,新物料的推荐是个很大的问题

优化目标

给定图 G = ( V , E ) G = (V, E) G=(V,E) V V V表示节点集合, E E E表示边集合,目标是学习一个映射函数 Φ : V → R d \Phi : V \rightarrow R^d Φ:VRd,使得每个节点 v ∈ V v \in V vV映射成一个 d d d维向量。

使用DeepWalk方式学习Graph Embedding,DeepWalk使用Word2vec来学习图的节点表示。应用Skip-gram来优化,表示如下。
min ⁡ Φ = ∑ v ∑ c ∈ N ( v ) P r ( c ∣ Φ ( v ) ) \min_{\Phi} = \sum_v \sum_{c \in N(v)} Pr(c \vert \Phi(v)) Φmin=vcN(v)Pr(c∣Φ(v))

构建图

构建有向图,采样节点序列。需要做清洗:点击后停留不超过1s的行为去掉;3个月内购买超过1000个物料或者超过3500个点击的用户去掉;对于物料ID不变但是内容有更新的物料去掉。
在这里插入图片描述
随机游走的节点转移概率定义如下, M M M表示节点的邻接矩阵, M i j M_{ij} Mij表示节点 i i i到节点 j j j的权重,节点的权重定位为相邻节点 i i i跳转到节点 j j j的频率。
P ( v j ∣ v i ) = { M i j ∑ j ∈ N + ( v i ) M i j v j ∈ N + ( v i ) 0 e i j ∉ E P(v_j|v_i)= \begin{cases} \frac {M_{ij}} {\sum_{j \in N_+(v_i) M_{ij}}} & \text v_j \in N_+(v_i)\\ 0& \text e_{ij} \notin E \end{cases} P(vjvi)={jN+(vi)MijMij0vjN+(vi)eij/E
然后应用优化目标
min ⁡ Φ = − log ⁡ P r ( ( v i − w , . . . , v i + w ) \ v i ∣ Φ ( v i ) ) \min_{\Phi} = - \log Pr( (v_{i-w}, ..., v_{i+w} ) \backslash v_i \vert \Phi (v_i)) Φmin=logPr((viw,...,vi+w)\vi∣Φ(vi))
其中 w w w是窗口大小,使用节点独立性假设
P r ( ( v i − w , . . . , v i + w ) \ v i ∣ Φ ( v i ) ) = ∏ j = i − w , j ≠ i i + w P r ( v j ∣ Φ ( v i ) ) Pr( (v_{i-w}, ..., v_{i+w} ) \backslash v_i \vert \Phi (v_i)) = \prod_{j=i-w,j \neq i}^{i+w} Pr(v_j \vert \Phi (v_i)) Pr((viw,...,vi+w)\vi∣Φ(vi))=j=iw,j=ii+wPr(vj∣Φ(vi))
基于负采样方法, N ( v i ) ′ N(v_i)' N(vi)表示节点 v i v_i vi的负采样,可以得到优化目标的详细形式
min ⁡ Φ = log ⁡ σ ( Φ ( v i ) T Φ ( v j ) ) + ∑ t ∈ N ( v i ) ′ log ⁡ σ ( − Φ ( v t ) Φ ( v i ) ) \min_{\Phi} = \log \sigma (\Phi(v_i)^T \Phi(v_j) ) + \sum_{t \in N(v_i)'} \log \sigma (- \Phi(v_t) \Phi(v_i)) Φmin=logσ(Φ(vi)TΦ(vj))+tN(vi)logσ(Φ(vt)Φ(vi))

GES:Graph Embedding with Side Information

除了物料ID之外,还可以加入其他的物料信息,比如物料一级类目、二级类目、所属商家、所属店铺等信息, W W W表示物料ID的Embedding矩阵,其中 W v 0 W_v^0 Wv0表示物料节点 v v v的ID的Embedding, W v s W_v^s Wvs表示第 s s s个sideinfo, H v H_v Hv表示融合之后的Embedding
H v = 1 n + 1 ∑ s = 0 n W v s H_v = \frac {1} {n+1} \sum_{s = 0}^n W_v^s Hv=n+11s=0nWvs

EGES:Enhanced Graph Embedding with Side Information

上面各个sideinfo融合的时候权重是一样的,实际情况肯定是不同的sideinfo权重不一样,设置不同的权重更符合事实。设置一个权重矩阵 A ∈ R ∣ V ∣ × ( n + 1 ) A \in R^{|V| \times (n+1)} ARV×(n+1) 表示各个节点在各个sideinfo上面的权重,融合后的Embedding为
H v = ∑ j = 0 n e a v j W v j ∑ j = 0 n e a v j H_v = \frac {\sum_{j=0}^n e^{a_v^j} W_v^j } { \sum_{j=0}^n e^{a_v^j} } Hv=j=0neavjj=0neavjWvj

学习算法

节点 v v v的Embedding是 H v H_v Hv,节点 v v v的一个邻居节点的Embedding表示为 Z u ∈ R d Z_u \in R^d ZuRd,label为 y y y,那么代入上面的优化目标,可以得到

L ( v , u , y ) = − [ y log ⁡ ( σ ( H v T Z u ) ) + ( 1 − y ) log ⁡ ( 1 − σ ( H v T Z u ) ) ] L(v,u,y) = - [ y \log (\sigma (H_v^TZ_u)) + (1-y) \log (1 - \sigma(H_v^TZ_u) ) ] L(v,u,y)=[ylog(σ(HvTZu))+(1y)log(1σ(HvTZu))]
梯度求解如下
在这里插入图片描述
算法步骤
在这里插入图片描述
在这里插入图片描述

实验结果

在这里插入图片描述

DeepWalk相关

EGES使用了DeepWalk作为Graph节点Embedding的学习,这里简要回顾下DeepWalk。

DeepWalk优缺点:

优点:
首个将自然语言处理和深度学习应用到图机器学习中
稀疏数据场景性能很好

缺点:
随机均匀游走
需要大量随机游走序列
学到的是局部信息,很难学到全局信息
仅利用到节点的连接信息,没有利用节点的属性
使用的是word2vec,网络层级不深

DeepWalk的主要思想是将图中节点进行采样得到一系列节点序列,将这些节点序列看做句子,节点看做词汇,套用自然语言处理处理领域的word2vec对节点进行无监督编码处理,得到节点Embedding。使得在图结构中比较接近的节点的Embedding在向量空间中也比较接近。

如下图所示,图中比较接近的点编码后的Embedding(二维,d=2)在向量空间上也是比较接近。
在这里插入图片描述

为什么可以套用Word2vec

因为自然语言处理中,句子中的词汇的分布是幂律分布,少量的词大量使用,有大量的长尾词汇。而一个现实的图中,也是少量的节点有大量的连接(度),大部分节点的度比较少,二八定律也非常明显,因此随机采样的节点序列也是符合幂律分布的,因此可以套用。
在这里插入图片描述

使用skip-gram算法,用中心词预测周围词, w w w表示窗口大小
min ⁡ Φ = − log ⁡ P r ( ( v i − w , . . . , v i + w ) \ v i ∣ Φ ( v i ) ) \min_{\Phi} = - \log Pr( (v_{i-w}, ..., v_{i+w} ) \backslash v_i \vert \Phi (v_i)) Φmin=logPr((viw,...,vi+w)\vi∣Φ(vi))

DeepWalk算法步骤

设定好窗口大小 w w w,Embedding大小 d d d,每个节点随机游走的次数 γ \gamma γ,游走的序列长度 t t t
在这里插入图片描述

在这里插入图片描述

实验结果

因为是无监督产生的Embedding结果,实验评估的时候讲这些Embedding作为中间结果来做多分类,计算F1值,可以看到标注的label比例越大,DeepWalk效果越好。
在这里插入图片描述
在这里插入图片描述
节点的游走次数 γ \gamma γ对效果的影响,大概在 γ > 10 \gamma > 10 γ>10之后效果增长缓慢。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/457765.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(二)AIGC—Stable Diffusion(2)

越往后,加的噪声越多,逐渐递增 正常的话,类似RNN,前向传递,不利于模型训练。 如果直接从x0到xt最好,DPPM这篇论文就实现了这一目标 beta这一参数在扩散过程是已知的,前期设计好,从0…

从0搭建Vue3组件库(六):前端流程化控制工具gulp的使用

随着前端诸如webpack,rollup,vite的发展,gulp感觉似乎好像被取代了。其实并没有,只不过它从台前退居到了幕后。我们仍然可以在很多项目中看到它的身影,比如elementplus、vant等。现在gulp更多的是做流程化的控制。 比如…

【算法题解】28.子集的递归解法

这是一道 中等难度 的题 题目来自: https://leetcode.cn/problems/subsets/ 题目 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 …

51单片机(二)成功点亮LED

❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其实STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要…

nuxt3 + pinia + swiper +element-plus + less + 腾讯地图 创建项目及使用

一。先说优点 1、基于Vue3: Nuxt3是基于Vue.js 3开发的,Vue.js 3是目前最流行的前端框架之一。 这意味着你可以利用Vue3的所有优势,如性能优化、响应式编程、更好的TypeScript支持等。2、服务端渲染(SSR)&#xff1a…

C++之引用的介绍

目录 前言 引用 1.引用的概念 2.引用特性 3.引用的权限 4. 使用场景 4.1 做参数 4.2 做返回值 5.引用和指针的区别 前言 相信大家都看过水浒传,里面的英雄人物除了自己的名字外都有自己的称号,比如:花和尚——鲁智深,豹…

centOS7.9安装nginx

此示例为安装nginx-1.20.1 (小版本无差别) 安装过程 sftp上传nginx-1.20.1.tar.gz文件到机器(在root目录下) #cd /usr/local/nginx/sbin #./nginx -V (查看版本,如果已经有安装过的话会出现版本号) 切换到loca…

k8s 源码分析 informer篇

之前介绍过informer的流程,文章在 informer介绍。今天梳理一下他的源码和流程。 一、概念 什么是 Informer informer 是 client-go 中的核心工具包,informer 其实就是一个带有本地缓存和索引机制的,可以注册 EventHandler 的 client 本地缓存…

L2-1 堆宝塔

堆宝塔游戏是让小朋友根据抓到的彩虹圈的直径大小,按照从大到小的顺序堆起宝塔。但彩虹圈不一定是按照直径的大小顺序抓到的。聪明宝宝采取的策略如下: 首先准备两根柱子,一根 A 柱串宝塔,一根 B 柱用于临时叠放。把第 1 块彩虹圈…

Linux下使用Mysql 第一天

目录 安装mysql 更改账户名和密码 启动/关闭mysql mysql的基本操作 数据库CURD 创建数据库 查看数据库 修改数据库 删除数据库 表的CURD 创建表 查看表 修改表 删除表 表数据的CURD create数据 Retrieve数据 update数据 delete数据 DML和DDL的区别&#xf…

波形生成:均匀和非均匀时间向量

波形生成—— 脉冲、chirp、VCO、正弦函数、周期性/非周期性和调制信号 使用 chirp 生成线性、二次和对数 chirp。使用 square、rectpuls 和 sawtooth 创建方波、矩形波和三角形波。 如需了解此处未显示的其他无线波形生成功能,请参阅无线波形发生器 (Communicat…

【腾讯云-2】极简搭建边缘集群

1 创建 流程和https://blog.csdn.net/qq_47058489/article/details/130347795差不多,可参考 查看基本信息: 创建边缘集群的过程中会初始化master,说明包含一个托管master节点 但是没有其他节点 2 开启节点远程登录 通过 SSH 的方式远…

JavaScript模块化开发

目录: 1 认识模块化开发 2 CommonJS和Node 3 require函数解析 4 AMD和CMD(了解) 5 ESModule用法详解 6 ESModule运行原理 模块化不是两个不同的js文件直接导入到某个页面中的,因为这两个文件只要有相同的变量或函数&#xf…

html学习(标签、css、选择器)

认识HTML HTML是HyperText Markup Language的缩写,中文名为超文本标记语言。它是一种用来创建网页的标准标记语言,由标签(tag)和文本构成,用于描述网页的结构和内容。HTML文档可以被浏览器解析并呈现出网页的内容和样…

方向梯度直方图(Histogram of Oriented Gradient)

1.方向梯度直方图(Histogram of Oriented Gradient) 笔记参考:HOG特征提取 笔记参考:一文讲解方向梯度直方图(hog) 笔记参考:Histogram of Oriented Gradients (HOG) | By Dr. Ry Stemplicity …

【Java-01】深入浅出匿名对象 , 继承 , 抽象类

主要内容 面向对象回顾 匿名对象介绍 面向对象特征 - 继承 抽象类的使用 模板设计模式 1 面向对象回顾 面向对象的核心思想是什么 ? 用代码来模拟现实生活中的事物 , 比如学生类表示学生事物 , 对象表示的就是具体的学生 , 有了类就可以描述万千世界所有的事物了 现有的…

【PaddleNLP-kie】关键信息抽取2:UIE模型做图片信息提取全流程

文章目录 本文参考UIE理论部分step0、UIEX原始模型使用网页体验本机安装使用环境安装快速开始 step1、UIEX模型微调(小样本学习)微调模型对比step2、服务化部署step3、提升推理速度模型量化更换模型fast-tokenizer提高batch_size(没用&#x…

第十一章 组合模式

文章目录 前言一、组合模式基本介绍二、UML类图三、完整代码抽象类,所有类都继承此类学校类以父类型引用组合一个学院类学院类以父类型引用组合一个专业类专业类,叶子节点,不能再组合其他类测试类 四、组合模式在JDK集合的源码分析五、组合模…

51单片机(一)软硬件环境和单片机介绍

❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其实STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要…

delta.io 参数 spark.databricks.delta.replaceWhere.constraintCheck.enabled

总结 默认值true 你写入的df分区字段必须全部符合覆盖条件 .option("replaceWhere", "c2 == 2") false: df1 overwrite tb1: df1中每个分区的处理逻辑: - tb1中存在(且谓词中匹配)的分区,则覆盖 - tb1中存在(谓词中不匹配)的分区,则append - tb1中不存…