凑单这个技术活,阿里工程师怎么搞?

简介: 在双11的购物环节中,平台与商家为了激发用户的购买欲望,在不同品类或卖家店铺下存在各种满减优惠活动。在已加购一些目标商品的情况下,一部分用户会选择加购一件额外的商品,在符合购物计划的同时满足特定的满减条件,收获一件物美价廉的商品;还有一部分用户在选择额外商品的时候,会无意间发现一个惊喜的商品,甚至更改之前的购物计划;凑单作为购物环节重要的环节,具有帮助用户提高优惠购物效率与购物探索性两大重要角色。

image

小叽导读:在双11的购物环节中,平台与商家为了激发用户的购买欲望,在不同品类或卖家店铺下存在各种满减优惠活动。在已加购一些目标商品的情况下,一部分用户会选择加购一件额外的商品,在符合购物计划的同时满足特定的满减条件,收获一件物美价廉的商品;还有一部分用户在选择额外商品的时候,会无意间发现一个惊喜的商品,甚至更改之前的购物计划;凑单作为购物环节重要的环节,具有帮助用户提高优惠购物效率与购物探索性两大重要角色。

背景

今年凑单相比往年,在产品形态上我们在第二页推荐中增加了锦囊,增加产品的丰富度,为用户推荐个性化的品类标签,增强用户对产品的黏性。在业务上额外支持了天猫万券齐发会场的个性化推荐与品类津贴的混合凑单。在今年的凑单场景中,继续注重用户在凑单场景的探索发现性与逛的体验,提升推荐的丰富度与多样性,增强跨类目推荐的体验,而本文主要介绍其中在Graph Embedding方面的工作,包括并行化算法的尝试与应用。

image

算法

问题的抽象与描述

在互联网平台上用户与商品的基本购买关系可以用基于用户/商品两种二部图所描述如下所示:

image

其中蓝色实线表示用户与商品的直接点击、购买等行为关系,黑色虚线表示表示商品之间基于用户的共同行为关系(点击、加购、购买等),若考虑节点自身的相关属性,则该二部图会变成更加复杂的属性图。

当目标为计算商品之间的I2I关系的时候,传统的一种较为常用的方法是,将用户/商品的二部图通过用户共同行为关系转化为商品之间的同构网络,而同构图中的权重则会基于Memory Based协同过滤的方法计算(如:Adamic-Adar等权衡节点与邻居直接关系与信息热度的1阶计算方法、集团的Swing等综合考虑节点邻居之间相似性的2阶算法);

另外一种较为常用的方法是在二部图上采样(带权重的随机游走)或基于用户在一个Session中的日志数据,捕获用户的连续行为,得到商品之间的“共现”样本,采用Skip Gram的模型(DeepWalk、Node2Vec、LINE等)训练得到商品Embedding,然后基于TOPK的相似度得到商品I2I。

基于共同行为关系的I2I算法能从大量用户行为数据中精准的捕获商品之间的相关性,在集团内各种推荐场景中都发挥着非常重要的作用。

在凑单场景中,当用户在已加购一定商品的基础上,若再推荐与购买或已经浏览过的商品,则可能会适得其反,因此在凑单的推荐上更侧重于跨类目与丰富度的提升。去年的凑单首次将Graph Embedding算法应用在业务中,而今年我们在去年的基础上强化跨类目的训练,并基于BSP框架在基于BSP的Graph Embedding算法实现上做了一次尝试与算法应用,并设计了一个跨类目属性的概率图模型。本文主要介绍了Graph Embedding算法的实现与应用部分,这只是凑单业务场景的一个部分。

基于BSP的分布式LINE算法实现

SGNS(Skip-Grams with Negative Sampling)是Word2Vec的一个经典模型,自DeepWalk问世以来,类似SGNS的模型在Graph Embedding领域中得到了非常广泛的应用,近些年也陆续有很多改进版本的算法问世,而LINE是其中一个比较经典且效果显著的结合网络局部1阶、2阶关系训练节点向量的算法,也是Graph Embedding算法系列中经常用来作为State of the Art对比的算法,算法基于网络图的边权分布对相邻连接节点之间进行建模与训练:

image

其中,image表示节点image的向量,p1通过图中两节点Embedding內积的Sigmoid函数σ定义的两点之间的连接概率,O1是1阶目标函数Loss,描述边的实际连接分布与通过p1表达整个图的概率分布之间的KL距离,O2是2阶目标函数Loss,在2阶模型中每个节点image除了自身节点的向量image之外,在更新过程中维护一个作为邻居节点context信息的向量image,在Glove中也有用到类似context变量的方法。考虑到O2目标函数中分母存在归一化项带来的计算量问题,与Word2Vec的SGNS模型类似,LINE采用如下负采样的方法训练模型:

image

其中,采用O1与O2作为目标函数分别训练得到1-order与2-order的embedding向量,算法最终经常会采用归一化后的向量作为LinkPrediction以及分类问题的特征。

从分布式的角度观察目标函数,任意节点image的更新依赖如下两个部分:1.image的邻居节点,2.从全局按照image

的概率负采样得到的节点。在BSP计算框架下,第1部分的特性非常适合并行化(类似SVD等算法的分布式实现),而第2部分的特性使得BSP框架下的并行化遇到一定的麻烦,因为需要从全局进行采样与更新,因此之前的主流并行化实现模式是Parameter Server的编程模式,而BSP则更多的用于其中的采样环节,作为后续PS上训练Word2Vec算法的样本准备环节,(类似算法那有DeepWalk/Node2Vec等)。

2017年AAAI上发表了一篇关于分布式负采样的Paper,文中提出了一种Target Negative Sampling的方法,其通过在Target节点所在Partition中进行采样的方式实现了负采样在Partition间的并行化,简单理解可以认为其将负采样所需要的计算与存储分摊在了不同的Partition上,通过不同Partition上的AliasMethod采样分摊负采样的计算与存储。

基于集团的Odps-Graph(BSP编程框架)我们实现了LINE的分布式算法,在Odps-Graph框架下,不同的vertex会分摊在不同worker内进行存储,反之一个worker会承担多个vertex的计算与存储,将负采样约束在worker范围内,通过消息的发送实现跨worker的负采样,从而得到近似全局负采样并分摊存储的效果。在梯度更新方面,基于正、负样本的节点向量更新分别采用2个独立超步通过vertex之间的消息发送实现。其余采用类似SGNS模型训练的Graph Embedding算法均可以采用类似的思路实现,伪代码如下:

image

回到凑单的业务场景中,基于用户历史的共同点点击、购买等行为样本数据,其中对于跨类目的行为进行加权,增强跨类目的训练,基于分布式的Graph Embedding算法,训练的到商品的embedding表达,离线计算得到商品的I2I数据,用于I2I召回的索引Build与在线TopK的推荐商品召回,这种跨类目的做法我们可以归类为样本跨类目的范畴。

举几个实际的Case,如下所示:

通过第一幅现代装饰画,召回后面的油画、开关贴、餐具瓷器、冷水壶、墙贴等多个跨类目下的商品:

image

通过第一件风衣,召回后面的面霜、睫毛膏、BB霜、耳饰、连衣裙等多个跨类目下的商品:

image

跨类目概率图模型

传统的Graph Embedding基于Graph中任意两节点与之间的相似度进行edge表达的建模,在凑单等注重丰富度的业务场景中则相对偏重于跨类目的学习。2018年WWW有一篇介绍了考虑人气属性差异的RARE算法,其通过人气差异去削弱人气差异较大节点之间的embedding相似度,虽然他们可能之间存在一条边。

在凑单场景中,我们基于RARE模型进行扩展,尝试基于类目相似度差去削弱在相同类目下不同共同用户行为作用商品之间的embedding相似度。并重点将类目考虑到edge的建模中,而由于类目是一个离散变量,类目的差异我们采用将其做embedding的方法计算,并在模型中结合类目做了一些修正,构建如下所示概率图模型:

image

image


其中, image分别为商品i与商品 j所属类目对应的embedding向量, image为商品跨类目embedding向量,通过如下MAP的方法训练模型:

image

其中,imageimageimageimage
的Gauss先验,同时具有模型参数正则化,提升泛化能力的作用。模型本身并不复杂,其表达的思想在于当用户同时在两个商品上发生行为时,一部分可能来自于相同属性的作用(在这里是类目的作用),而并非我们所学习的embedding本身,而在模型中我们也将embedding定义为跨类目的相似表达。基于跨类目概率属性图的算法模型我们还在进一步的深入分析与研究中,包括商品以及类目embedding的分析、模型设计上的优化以及如何更好的在业务中发挥效果等。

总结

Graph Embedding是图学习表达领域一个重要的分支,通过Graph节点的向量表达,描述复杂稀疏的网络结构,能够学习到不同节点之间1、2阶之外的高阶关系,在提升丰富度,新颖性方面有其独特的优势。目前集团内也有算法以及系统团队对其有更加深入的研究与实现,期待广泛的合作与交流学习。

展望

算法上,目前凑单的Graph模型中暂时只有考虑类目与边关系,随着近些年属性图算法、基于Meta Path的Graph Embedding以及深度学习的快速发展,后续会融入更多的商品、用户维度的属性特征,提高模型的精度与表达能力,此外将基于embeddingI2I的召回与排序之间综合考虑建模也是未来研究的重点。

业务上,目前凑单中很多场景入口信息还不完善,比方说用户购物车真实点击入口商品等,因此在实现用户真正意义的“更好的凑”还有比较大的提升空间,此外在用户体验上,今年增强了动态性,削弱了相似商品的重复曝光体验,因此如何更好的挖掘用户的体验也是值得深入研究的方向。

项目总结

本文介绍了凑单项目Graph Embedding方面的一些工作,只覆盖了凑单项目的一小部分,今年我们在系统以及算法上都做了一次较为全面的升级,在算法模型上部署了深度学习模型,分组背包优化模型,跨类目Graph模型,在权重的学习方面引入了实时的LTR,整体上同比去年直接引导进店支付金额+XX%,转化率+XX%,线上A/B对比基准通曝光价值+XX%,转化率+XX%。

原文发布时间为:2018-12-18
本文作者:天栋
本文来自云栖社区合作伙伴“ 阿里巴巴机器智能”,了解相关信息可以关注“ 阿里巴巴机器智能”。

相关文章
|
JSON JavaScript 前端开发
JS动态加载以及JavaScript void(0)的爬虫解决方案
Intro 对于使用JS动态加载, 或者将下一页地址隐藏为JavaScript void(0)的网站, 如何爬取我们要的信息呢? 本文以Chrome浏览器为工具, 36Kr为示例网站, 使用 Json Handle 作为辅助信息解析工具, 演示如何抓取此类网站.
7278 0
|
11月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
盒模型 盒模型: 所谓盒模型,就是浏览器为页面中的每个HTML元素生成的矩形盒子。 这些盒子们都要按照可见板式模型在页面上排布。 可见的板式模型主要由三个属性控制:position 属性、display 属性和 float属性。 position属性控制页面上元素间的位置关系。 display属性控制元素是堆叠、并排或者不在页面上显示。 float属性提供控制的方法,以便于把元素组成成多栏布局。 盒模型讲解: 在默认的情况下,每个盒子的边框是不可见的,背景也是透明的。 所以我们 不能直接的看到页面中的盒
1537 1
|
11月前
|
人工智能 编解码 算法
《3D植被建模痛点解决:开放世界层级实例化+GPU批处理优化方案》
本文记录开放世界生存游戏“迷雾森林”场景3D植被建模的技术攻坚过程。初期因静态烘焙方案,出现近景纹理拉伸、中景阴影脱节、显存过载闪退等问题,后转向“动态层级实例化”,按空间、模型、材质三维度拆分植被资源,搭建层级参数库。面对实例化数量过载,通过材质分组批处理与GPU实例化优化,将Draw Call从3200次降至210次,帧率回升至58帧。后续开发动态环境响应模块,实现植被随天气调整形态,并优化地形采样算法解决穿模悬浮问题。最终沉淀“四维协同”建模逻辑,还探索AI辅助LOD生成,为开放世界3D资产开发提供可复用路径。
634 6
|
人工智能 安全 API
Higress.ai 站点全新发布,轻松解锁 AI 新能力,开启全球服务!
Higress.ai 除了提供常见的最佳实践(文章形式)/社区/企业版/GitHub/文档等功能外,特别设计了快速体验 AI 网关的【场景体验】,并提供开源体验和云上体验两种方式。同时,我们会在该站点首发 Higress AI 网关的最新能力。例如,我们即将上线 AI Guideline 提示词功能,开发者基于通义灵码/Cursor 等 AI 编程工具,将 Nginx/Kong 的 Lua 插件快速转化为 Higress Wasm 插件。
|
Java 程序员 编译器
float f = 3.4; 背后的奥秘,90% 的程序员都答错了!
小米是一位热爱分享技术的29岁程序员,本文探讨了一道常见的Java面试题——为何直接声明浮点型变量3.4会报错。文中详细解析了Java中float与double的区别及处理方法,指出了默认情况下3.4被视为double类型,需通过加后缀F或强制类型转换解决。同时,小米还分享了浮点数精度问题及其在实际开发中的应用建议。
584 5
|
存储 固态存储 虚拟化
【vSAN分布式存储服务器数据恢复】VMware vSphere vSAN ESXi超融合HCI分布式存储数据恢复案例
近期,我司处理了一个由10台华为OceanStor存储组成的vSAN超融合架构,其中一台存储闪存盘出现故障,用户取下后用新的闪存盘代替,然后对该闪存盘所在的磁盘组进行重建,导致集群中一台使用0置备策略的虚拟机数据丢失。
606 6
|
机器学习/深度学习 编解码 测试技术
【YOLOv8改进-SPPF】 Focal Modulation :使用焦点调制模块替代SPPF
YOLOv8专栏介绍了FocalNets,一种取代自注意力的新型模块,提升模型在图像分类、检测和分割任务中的性能。Focal Modulation包括局部聚焦、全局调制和多尺度处理,通过融合CNN和自注意力优点。代码展示了FocalModulation模块的实现。论文和代码已开源。在多个基准测试中,FocalNets超越了Swin等先进模型。
|
弹性计算 并行计算 Shell
在云上搭建CosyVoice环境-保姆级教程
发现个好玩的模型,阿里最近开源的,可以便捷的复刻人声,本文提供全套安装过程。仓库地址:https://github.com/FunAudioLLM/CosyVoice。
7118 1

热门文章

最新文章