一天造出10亿个淘宝首页,阿里工程师如何实现?

双11手淘首页的几个重要推荐场景截图如下:

一天造出10亿个淘宝首页,阿里工程师如何实现?

如上图所示,左一场景为AIO综合会场,包括AIO日常场景(淘抢购、有好货、清单等)、双11人群会场及行业会场;中间为AIOplus场景卡片综合会场,包括5张会场卡片,每张卡片融入了行业主分会场、标签会场,该业务涉及到20多个日常业务以及标签、行业会场的分发;右三为主会场入口所见所得,用两个素材轮播的方式给双11主会场进行引流。双十一当天整体点击UV引流效果方面,首页给各会场还是取得了很好的分发效果,数据达到数千万UV以上。

与此同时,今年双十一在推荐的去重打散及探索发现上做了很多深度的优化,过去更多的是在相似性推荐的单一数据目标上进行优化,今年在match及rank技术上采用了更多多阶游走及探索发现的embedding技术,力争在ctr效果有一定保证的情况下,加大对用户体验比如多样性、搭配潜在兴趣、深度用户偏好等方面的推荐。

举个简单例子,之前的推荐系统在捕捉到用户对茶杯这一商品感兴趣后,很可能会推出更多的相似茶杯,新的推荐系统在多阶召回技术的基础上通过对用户兴趣进行深度学习的挖掘,会按一定的概率推荐茶叶、茶具等"弱相似"但满足用户搭配潜在兴趣的商品。

究竟阿里如何使用AI构建淘宝首页?今天一起来揭秘。

一. 业务技术简介

首页个性化在算法技术上主要涉及Graph Embedding召回模型、DeepCross&ResNet实时网络排序模型,并在搜索工程Porsche&Blink、Rank Service、Basic Engine等系统的基础上结合业务应用的需求沉淀了Graph Embedding召回框架及XTensorflow排序模型平台供推荐其他场景使用,提升效果均达到两位数以上。

二. 首页个性化推荐框架(包括MATCH召回和RANK排序两部分)

1.万物皆向量--Graph Embedding深度召回框架

在推荐系统的发展历程中,面临了两个核心问题,用户的长尾覆盖度以及新商品的冷启动,这两个维度的数据扩展性瓶颈一直以来对广大推荐算法工程师都是不小的挑战。而我们基于Graph Embedding的理论知识提出的相关创新框架在召回阶段利用用户的序列化点击行为构建全网行为graph,并结合深度速随机游走技术对用户行为进行"虚拟采样"拟合出多阶(一般5以上)的潜在兴趣信息,扩大用户的长尾兴趣宝贝召回,并同时利用side information-based的深度网络进行知识泛化学习,在一定程度上解决了用户覆盖、新商品面临的冷启动问题,同时虚拟样本的采样技术结合深度模型的泛化学习等在用户对商品的探索发现上加大的扩大了召回量,提升了多样性及发现度。

Graph Embedding是一种将复杂网络投影到低维空间的机器学习算法,典型的做法是将网络中的节点做向量化表达,使节点间的向量相似度接近原始节点间在网络结构、近邻关系、meta信息等多维度上的相似性。淘宝个性化推荐场景所面对的数以十亿计的用户、商品、交互数据和各类属性构成了一个规模庞大的异构网络,如果能将网络中的各类信息统一建模在同一个维度空间,用向量的方式进行表达,它的简洁和灵活性会有巨大的应用空间,诸如扩展I2I计算、解决商品冷启动、作为中间结果输出到上层高级模型。据我们所知,业界尚未有,对如此大规模复杂网络进行embedding建模的成熟应用。

本篇主要介绍我们近期在这个方向上所做的一些探索:针对推荐场景,在Graph Embedding基础上,提出了新的S³ Graph Embedding Model对上亿级别的商品进行embedding建模,并将embedding结果应用在商品Item to Item计算中,作为一种全新的match召回方式在手淘首图个性化场景进行应用。从线上BTS结果来看我们改进的Graph Embedding I2I得到不错的效果提升,在覆盖长尾用户以及新宝贝的冷启动上有效扩展了match召回候选。

1.1、Graph Embedding-DeepWalk算法

Graph Embedding是近期热门的一个课题,14年KDD的《DeepWalk: Online Learning of Social Representations》开启了这个方向的热潮,文中借鉴了深度学习在语言模型中的应用,以全新的方式学习网络节点的潜在向量表示,在社会化网络多标签网络分类任务中取得了很好的效果。

DeepWalk是一个two-stage算法:

一天造出10亿个淘宝首页,阿里工程师如何实现?

①构建同构网络,从网络中的每个节点开始分别进行Random Walk 采样,得到局部相关联的训练数据; ②对采样数据进行SkipGram训练,将离散的网络节点表示成向量化,最大化节点共现,使用Hierarchical Softmax来做超大规模分类的分类器;

  • DeepWalk框架:

一天造出10亿个淘宝首页,阿里工程师如何实现?

  • SkipGram训练:

一天造出10亿个淘宝首页,阿里工程师如何实现?

首先从网络中采样训练数据,每一个训练数据是由局部相邻的节点组成的序列,DeepWalk将这组序列看成语言模型中的一个短句或短语,将短句中的每个词转换成隐式表达,同时最大化给定短句某个中心词时,出现上下文单词的概率,具体可以表示为下面这个公式:

一天造出10亿个淘宝首页,阿里工程师如何实现?

其中v_i是中心词(对应于网络中的target node),v_(i-w),···,v_(i+w)是上下文单词(对应于网络中的N阶近邻的node)。在独立分布的假设下,可以简化为:

一天造出10亿个淘宝首页,阿里工程师如何实现?

1.2、S³ Graph Embedding Model

针对推荐场景,我们将原本的Graph Embedding进行了多个方向上的创新改造,历经多个版本逐步演化出S³ Graph Embedding Model,其中S³主要体现在三个方面:

  • Sequence BehaviorSub-graphSide-information

下面我们对演化的过程进行介绍:

(1)Naive版本

  • 将Graph Embedding应用到商品推荐领域中,第一步要解决的就是构建网络,由于商品推荐的整个网络是大规模的异构网络,网络节点类型包括用户、商品、商品类别、用户画像等各种基础属性,不同类型的节点无法在统一的空间进行向量表示。为了简化问题,首先使用阿里原创算法swing来计算商品间的相似度(swing利用user-item二部图计算i2i,比改进过的CF算法仍有明显提升,目前已在各场景中已经广泛应用,构建关于商品的有向带权图同构网络;
  • 第二步是对商品网络进行Random Walk采样,此处我们借鉴了《Node2vec: Scalable Feature Learning for Networks》中灵活的BFS and DFS search strategies(在采样时以一定的几率回溯),通过改变控制参数灵活的控制Random Walk游走过程,在Item Graph的局部稳定性和全局扩展性间做出权衡,调节match结果中多样性和准确性之间的balance。
  • 在采样得到item序列之后,第三步是进行Embedding表示学习,这里对原文的SkipGram模型进行了两处优化:(1)针对超大规模的字典,采用负样本采样(Negative Sampling)替代Hierarchical Softmax分类器,大幅提高训练速度;(2)在语言学中,词按照出现频率从大到小排序之后,服从 Zipfian 分布(即log-uniform分布),所以SkipGram训练多直接采用Zipfian来计算负样本采样的概率,而对我们的数据进行分析后,发现item出现的频次与log-uniform并不完全吻合,不同时间段的数据间也呈现一定的波动趋势,针对这个现象,我们用边训练边统计每个item的出现频次,维护一个能够按照item出现频次生成负样本的动态采样器。模型结构如图所示:

一天造出10亿个淘宝首页,阿里工程师如何实现?

可以看到,相比于swing的一阶扩展,Graph Embedding的相似度计算将高阶信息也纳入其中。

(2) Sequence+Side-information版本

通过人工看case和统计得到的初步结论是基于已有Swing图计算Graph Embedding再召回的结果与原本的召回方式有较高的重复度,这在一定程度上给了我们信心,表明embedding的方式是靠谱的,为了在丰富多样性和提高精准度上有所突破,我们接下来做了三方面的尝试:

(1)通过用户session内的行为序列直接进行embedding建模;

(2)在session内行为构建全网图后,引入类似tf-idf的转移概率连接边,克服哈利波特热点问题,且在此基础上进行概率采样,构建用户行为的"虚拟样本",以扩大后面输入到深度模型里面的宝贝覆盖量及准确度,使多阶扩展信息更加完善;

(3)引入side-information(如一级类目、叶子类目、店铺、品牌、材质、购买力等级等)多维信息,通过shared-embedding 加 pooling的结构嵌入到item语义中。模型结构如图所示:

一天造出10亿个淘宝首页,阿里工程师如何实现?

  • 对于行为序列,短时间内的高密度点击更能够反映用户的真实意图,短期的兴趣偏好也更为集中,对比而言,基于用户点击共现的传统CF算法在数据层面会有更多的噪声。在实践中,准备行为序列数据有两个关键点值得注意:(1)如何选取行为序列的时间窗口,需要结合业务特点来进行仔细的调节;(2)如何过滤因为用户误操作而带来的噪声点,我们的实践经验是根据停留时长和类目不相似度来过滤典型的异常点击
  • 提出并定义了新的转移概率连接图,是为了克服用户真实的session行为中存在的大量节点热点问题,以每个节点为中心,利用其扩散子节点的连接频次及行为共现频次计算转移概率,构建全网的转移概率连接图,并在此基础上进行deep walk的随机采样,构造出千亿级别的多阶虚拟样本,用于后续的深度网络学习
  • 引入宝贝的side-information信息则受到语言模型中sub-word概念的启发,可类比于在word2vector中加入单词的词根、词缀等sub-word信息,认为某些具有同样词根词缀的单词在某些维度上具有相似的语义,具有同店、同品牌的宝贝也有一定的相关性。引入side-information后i2i结果的头部精度得到提高,同店、同品牌的宝贝在排序中更为靠前;同时对于一些没有出现行为的、新鲜上架的宝贝,根据它的side-information对它进行embedding表达,有效解决宝贝的冷启动问题。

(3) S³最终版本

在引入side-information和sequence行为序列之后,模型准确性大幅提升,但仍然面对全网宝贝embedding参数空间太大、训练样本过多的难题(均在千亿量级以上)。为了解决这一问题,我们根据行为序列天然的转移概率重构全网宝贝的weighted directed Graph,再将整个网络切分成多个sub-graph,在每个sub-graph内部进行Graph Embedding训练,不同的sub-graph间并行训练,缩短训练迭代周期,网络结构如下图所示:

一天造出10亿个淘宝首页,阿里工程师如何实现?

在最终计算i2i的召回环节,对embedding结果构建查询索引,基于GPU集群以batch形式进行高效的Nearest Inner Product Search最近邻检索,同时将整套框架落地在搜索工程团队的BE引擎当中,实现用户到trigger到embedding宝贝结果的实时召回。

相比于经典的基于共现的i2i算法,最终版本整体在召回上更加丰富,badcase出现情况较少。全网商品在首图商品池召回的case如下,图中三列分别是原始宝贝、swing召回、graph embedding召回:

一天造出10亿个淘宝首页,阿里工程师如何实现?

一天造出10亿个淘宝首页,阿里工程师如何实现?

一天造出10亿个淘宝首页,阿里工程师如何实现?

下面这幅炫酷图对我们的embedding高维向量有一个更直观的解释,我们随机选取了运动鞋这个一级类目下的宝贝embedding向量降维,不同的颜色代表不同的叶子类目,每一个点代表一个商品降维后的坐标,可以清晰的看出同一个类目下的宝贝embedding向量很"自觉"的cluster在一起,说明这种自觉的本质就是graph embedding的向量是靠谱的。

一天造出10亿个淘宝首页,阿里工程师如何实现?

1.3、在推荐场景中落地及调优

在算法的深度模型训练部分,我们依赖了搜索工程团队的Porsche blink系统,在XTensorflow上进行了模型TF版本的开发,构建全网序列行为图并完成采样,样本级别达到千亿,基于并行的GPU集群训练。整个召回框架中采用subgraph的拆图结构,也是加速迭代效率的关键点,同时在PS的参数大规模上涨的情况下,样本的遍历及样本的训练覆盖率对整个模型的收敛效果也至关重要。

首页个性化推荐框架在在线召回阶段,主要应用了搜索工程团队的Basic Engine在线化召回引擎,我们将Graph Embedding训练完成的模型用近邻检索的方式把数据载入到引擎中,且将原有的offline,online结合的方式全部在线化,增强了推荐系统的灵活性,实时性及召回能力,整体框架如下图所示。

一天造出10亿个淘宝首页,阿里工程师如何实现?

在双11之前,我们在这块的工作迭代调优过程历时近两个月,期间分别尝试了多种不同的网络模型结构,样本选取过滤方式,引入sequential行为信息、转移概率边的全新构建方法、side information等多方面,多角度调优方法,在日常首页个性化(AIO)日常场景中uctr对比swing版本i2i提升明显,同时双11在该场景全面替换线上的最优召回方式。

2. 基于XTF的深度排序模型

2.1、 XTensorflow简介

2017双十一我们承接了手淘首页流量分发最大的几个首页场景,这几个场景的特点是流量大、业务规则限制多、同时业务变动频繁,我们需要一个稳定、能支持快速迭代和实时计算的机器学习平台来支撑我们训练模型以及在线打分。为此,我们参与了工程团队的共建工作基于Porsche blink的分布式Tensorflow训练及在线打分平台,首页算法同学基于该平台开发出了若干Rank模型,在相应的业务场景拿到了不错的效果,我们称该平台为XTensorflow,简称XTF。

一天造出10亿个淘宝首页,阿里工程师如何实现?

在这个深度学习平台上,我们在双十一上线了包括DCN、DeepResNet的深层高阶特征学习模型,以及更加推广及成熟应用了WDL深度模型,相对于WDL模型,更为复杂深度模型的尝试也取得了明显的效果。

2.2、DeepResNet在AIOplus场景的应用

在深度学习的推荐领域,当用户宝贝数据以及相应的参数膨胀到一定规模后,加深网络的深度增强模型的学习泛化能力是众所周知的方式,但网络盲目的加深又会同时引入参数爆炸、梯度消失、甚至过拟合等问题。参考Resnet网络技术在图像领域的获得的成功,其解决的根本问题就是当网络深度不断加深之后,梯度消失越来越明显,效果越来越差。关于这一点,之前我们在WDL的deep侧做过相应的尝试,随着网络导数及隐层结点数的增加,普通NN网络慢慢的训练效果会越来越差,甚至导致效果出现较明显的下降。基于这些实验现象,我们将WDL进行了Deep Resnet的深层扩展,基本原理图如下:

一天造出10亿个淘宝首页,阿里工程师如何实现?

原始的input层包含实值特征及id类特征的embedding向量,接入一个10层的Resnet层,最后通过logloss来定义最终的loss。同时,基于场景双十一用户行为变化迅速,以及AIOplus区块活动素材的多变性(运营会根据BI数据,实时调整素材等),训练了实时的Deep Resnet Model,在预期热及双11当天在场景卡片会场业务上上线拿到效果。

2.3、DCN(Deep & Cross Network)在主会场入口个性化的应用

通过将稀疏特征embedding,配合多层全连接Relu层,DNN能够自动进行特征交叉,学习到高阶非线性特征,但是这种交叉是隐性的,交叉阶数无法显示控制,而且容易"over-generalization"。为了弥补这一点,WDL模型引入了wide侧,显示记忆一些可解释的特征交叉信息以保证模型的精准性。但是wide侧的引入带来了大量的特征工程的工作,同时也只能学习2阶(cross-product)浅层的交叉。DCN引入了cross network,通过网络层数控制特征交叉的阶数,并且它实现高阶特征交叉需要的参数量远远小于DNN;cross layer的定义比较简单:

一天造出10亿个淘宝首页,阿里工程师如何实现?

这个设计跟ResNet比较像,l+1层的映射函数f实际上是在拟合残差

一天造出10亿个淘宝首页,阿里工程师如何实现?

;cross network最终会和deep network进行jointly learning,完整的网络结构如下图:

一天造出10亿个淘宝首页,阿里工程师如何实现?

双十一主会场入口场景展位少召回相对充分对top n的精准度要求很高,因此我们选择DCN模型,借用cross network的高阶特征交叉提升ctr预估精准性,同时由于从入口点进去后主会场承接模块变化频繁,我们必须选择item粒度(而非素材content粒度)来建模,并且对模型泛化能力的要求较高,因此我们用了较深的DNN网络来提升模型的泛化能力。作为主要引流场景之一,我们有充分的数据来学习模型,最终上线的版本中,我们设置了3层cross layer,以及10层Deep Layer(Resnet结构)。为了适应场景的变化我们做了大量的日志清理工作,相对于纯实时样本流,小时级样本流更加方便做复杂的样本清理,因此在调优阶段选择的是incremental的小时级训练,再切换到实时模型的方式。

2.4、Union-DeepModel

Google 提出Wide&Deep model之后,这种基于Deep侧做高维特征提取(泛化),Wide侧进行显示特征交叉(记忆),最后进行Jointly Learning的框架被进行了各种各样的升级。我们整理并实现了里面比较经典的有意思几个模型,包括WDL、PNN、DeepFM、NeuralFM、DCN、DeepResNet等,这些模型均基于TF Estimator框架实现,封装为model_fn,特征处理以及模型训练过程高度可配置。同时,基于这个长期在深度模型上的积累,提出了Union结构的DeepModel,用以适应各种各样业务场景对深度模型的需求。

一天造出10亿个淘宝首页,阿里工程师如何实现?

            扫码关注不迷路

分享每日最新IT资讯和技术干货

猜你喜欢

转载自blog.csdn.net/qq_41534566/article/details/84873637
今日推荐