CSCNN:新一代京东电商广告排序模型

分享嘉宾:刘鹄 京东 算法工程师
编辑整理:李沛欣
出品平台:DataFunTalk

导读: 随着电商平台对图像信息的大量引入,通过图像分析来进行广告点击率判断就成了新的趋势。本次分享的主题为 CSCNN:新一代京东电商广告排序模型,主要介绍视觉信息在 CTR 排序模型中的应用。一方面,我们将介绍在工业场景下使用 CNN 将图像加入 CTR 模型联合建模的方法;另一方面,我们指出传统用于分类任务的 CNN 并不适合电商场景。将电商场景中丰富的、具有强视觉先验的"商品类目标注"作为 CNN 输入的一部分,将有效降低 CNN 训练的难度,提升排序效果。

模型于 2019 年上线,是京东搜索广告业务中收效较好的一种算法,也入选了今年的 KDD 论文集。在介绍方法的同时,本文还介绍了一些点击率模型整体优化方案,有助于帮大家对这种算法在整体点击率模型框架中所起到的作用有更加深入的理解。

本次分享主要包括以下内容:

  • 背景介绍
  • CTR 模型的优化方向
  • 基于视觉信息的 CTR 广告预测
  • 我们的工作:CSCNN
  • 效果展示

01 背景介绍

京东搜索广告依托于京东和京准通的数字营销平台实现搜索场景下的流量变现,每天帮助数百万的广告主触达数亿的京东用户。

1. 京东 9NAI 平台

京东广告算法团队主要做京东电商平台下全场景的广告流量变现,包括的业务线包括搜索、推荐、站外、线下、品牌,360 营销等等。用到的主要的模型,除了 CTR 模型,还有 CVR、出价、图像、创意模型等,这些都依赖于京东自研的 9NAI 的机器学习平台。该平台拥有离线训练,离线预估,线上 inference、 模型的发版等功能。整个平台的内核基于 TensorFlow 框架搭建,并根据业务进行了性能优化,离线训练的调度则基于 k8s 开发。

2. 电商环境下优化 ECPM 的主要方式

上图是京东搜索广告的直观的展示界面。当用户搜索 Query 为"连衣裙"时,前序模块会召回 n 个广告,都是和连衣裙的 Query 强相关、符合 Query 约束的商品。

ECPM 排序的主要工作是 n 个广告内部顺序的精排。在广告场景下,排序的指标就是平台的营收。

具体来看,作为 CPC 广告,广告主为每次点击支付确定的出价 bid。因此每次展现平台所获得的价值,就等于用户点击广告的概率再乘以这次点击的出价,即 ECPM ( effective cost per mile,千次展示期望收入 )。但是有时需要考虑 Query 下所有展现给用户的商品对平台带来的总价值,即此时需要优化所有展现给用户广告 ECPM 的和。但由于用户 Query 为"连衣裙"时,用户的下拉深度有限,所以该问题是有约束的优化:在用户看到有限深度广告的前提下,极大化用户对平台的总营收。

如果展现给用户广告之间的 CTR 条件独立,可以通过贪婪方式求解优化,即:按 ECPM 从大到小依次展现给用户,这样 Query 下的整体收入最高。

而 ECPM 中的第二项 bid 是由广告主给出的。假如用 ECPM 的序作为训练和预估的指标的话,广告主可能通过调 bid 来 hack 模型系统。为避免这种情况,我们一般在离线时采用 AUC 作为训练和评估指标,通过训练 CTR 排序效果更好的模型,来间接提升线上 ECPM 排序和线上收入。

02 CTR 模型的优化方向

CTR ( Click-Through-Rate ) 即在建模展现这条广告的情况下,用户点击的概率。在搜索的场景下,该概率可以描述成依赖于 4 个不同类型输入的函数:

  • Query:描述用户搜索意图。
  • 用户侧特征:描述用户的兴趣、偏好。
  • 商品侧特征:描述这个商品是否优质。
  • context 特征:描述用户搜索时属于怎样的场景,是上班的时候搜的还是周末搜的,此时是否有活动。

1.特征工程与提取数据

特征工程主要包括以下几点:

多模态信息建模:

  • 人工特征:一般在构建 CTR 模型的初期,会花很多精力做人工特征,比如说 ID 类的或者是实数的特征。通过构建有区分性的特征来优化模型的效果。
  • 文本特征:描述细粒度 Query 中的用户意图。
  • 用户侧特征:对用户和商品之间关系的建模。比如说对用户序列进行建模,或者是对用户和商品之间的交互关系做图表示建模。
  • 图像特征:它和前面的信息源的模态不同,但在多媒体的场景下,图像一般是和文字一起构建完整的商品信息展现给用户,所以这部分的建模也很有必要。

特征的交叉: FM 、FFM、DCN 等替代繁重手工特征交叉的方法。

解决过拟合问题: 解决特征长尾稀疏时,embedding 的过拟合问题。

**2. ** 对 CTR 模型做目标函数刻画

度量学习问题: 之前给出的搜索场景不是很适合做 pointwise 的模型,主要的原因在于在搜索的场景下,候选集很有限。比如说搜连衣裙的时候, n 个商品都是连衣裙,并不需要区分用户点击连衣裙商品和鞋子商品的概率的高低,因为它没有可比性。所以在搜索场景下,做得更多的是在小候选集下的优化过程,此时需要做一些 Query 下的 AUC 的训练和预估。

Selection bias 问题: 主要描述的是在电商场景下会出现一些训练集和测试集不一致的情况。测试集指的就是线上预估的集合,因为在线上召回几百个商品,要对这几百个商品进行排序的情况下,因为实际上一页展现的商品有限,可能最终展现给用户只有头部的这几个有 label 的商品。所以在离线评估的时候,只能评估这几个商品的使用情况,但是在线上 Serving 的时候需要对整体进行排序,就要解决 Selection bias 的问题。

长期回报问题: 在上一页 PPT 中给出了一些简单的假设,是当上下的商品没有耦合关系的情况下,可以做贪婪 CTR 模型。如果有耦合关系,可能就要对搜索词下的整个用户对电商平台产生的回报,即加和的 Reward ( 长期回报 ) 建模。

3. 结合系统架构的工作

Online Learning: 线上系统中数据分布式是时变的。工程上的传统方式是做定期重启的全量训练。但由于数据量大,训练很慢,依然会导致训练和预估存在时间/分布的 gap。online-learning 是一种很有用的方向,通过流式的数据预处理和训练,使模型紧跟线上分布,解决时变带来的 gap。

**线上分布式 serving:**由于单机内存的限制,线上模型的体积会受到约束。我们通过分布式和模型并行支持 TB 型的模型的加载,同时保证模型各部分参数版本一致性。放开了线上内存的限制,增加模型的表达能力。

线上 gpu serving: 放开线上计算复杂度的限制,有助于使用更深的更复杂的模型结构来增加模型的表达能力。

所以说从整体上来看,本研究所探讨的使用视觉信息提升排序模型效果的工作,主要还是集中在第一部分——特征和数据建模中多模态的建模。通过优化这些图像的特征建模,能够得到商品侧更好的展现效果,进而提升用户对于商品的点击率。

03 基于视觉信息的 CTR 广告预测

1. 视觉信息在商品展现中给人呈现的印象

具体 Intuition 可以从这张图中看出来:在整个搜索版面中,每个商品都是图文结合的。商品主图的版面很大,有很强的视觉冲击力,而且主图中会包含很多细节信息,比如说材质、纹理、款式等,这些信息是难以通过 title、ID 类特征或者是一些属性信息体现出来的,只能通过图像来提取这些细节信息进行建模。而且在训练的过程中,只对这些 ID 类特征进行辨别,可能还会遇到一些稀疏或者冷启动的问题。假如使用 CNN 来提取图像特征的话,更有可能来避免这些事情来提升模型的泛化性。

2. 使用图像建模的瓶颈

**工程实现较为困难:**此前用到的一些点击率预估模型都是比较简单的 MLP 的模型,他们其实训练和 serving 都是非常快的。但是加上 CNN 之后,训练会出现性能瓶颈,导致模型更新周期更长;serving 也会出现非常严重的性能瓶颈,可能会直接影响线上服务的时迟。

建模效果收益有限:

在使用图像特征之前,我们已经提了很多的商品侧的特征,传统建模方式不能完全保证从图像中来获取到的是增量细节信息。假如只提取到一些和已有属性或者类目重复的信息,那么引入 CNN 直接建模图像的意义就很小了。

和传统图像的任务不同,例如检测分割或者是分类问题的监督信号非常强,但点击率预估是一个监督信号很弱的场景。用户点或者没点二分类场景中,本身就是包含了一定的 random noise。在这种监督信号不强、有噪的情况下,训练好 CNN 是困难的。

3. 问题的解决

下面我们主要针对这两点做了一些已有方法的调研。

  • 固定提取 embedding 图像:不做二阶段的训练,从而规避前述问题。但是固定的 CNN 提取出来的特征,无法保证和已有的属性、类目信息不产生交叠,因此 CNN 提供的增量信息有限。
  • 端到端的 CNN 和 CTR 模型联合的训练:绝大多数工作还都是在做离线的评估,很少有做工业级数据的线上 serving。所有工作都直接将传统用于图像分类的 CNN 直接拼入 CTR 模型中,并没有做任何结构的改进以适配当下问题 ( 后续会说明传统 CNN 解决 CTR 问题的不足 )。
  • pre-training:使用图像分类/只基于图像的 CTR 问题,做 pre-training。以期获得二阶段更好的效果。

04 我们的工作:CSCNN

接下来介绍的是在 KDD 2020 上发表的:专门用于视觉感知的电子商务中的点击率预测场景下的类别特定的神经网络。



研究实验数据集来自 JD.com 中的广告展现、点击日志,前 32 天的 100 亿样本训练,第 33 天的 50 万条样本测试。我们也在 JD.com 上数亿活跃用户的在线场景中做了 AB 测试,结果表明本方法可以显著提升线上效果。目前本方法已经在 JD.com 最大的广告位上达成了全量。

1. 研究的出发点:CTR 模型建模本身存在的问题

传统使用 CNN 引入图像信息的模式,属于 Late Fusion。这种方法从 CNN 提取出 embedding,再和已有的特征一起参与 CTR 的模型建模,本身就存在一些问题。

  • 信息浪费:在建模图像之前,模型通过类目等 id 类特征就已经知道这个商品是连衣裙了。而这些视觉先验现在还没有加到 CNN 的建模中来,即这部分的信息被浪费了。假如知道这些先验,CNN 的任务就会更简单些。换句话说,CNN 的任务应该是:在知道该商品为连衣裙类目的情况下,提取出连衣裙相关的特征、捕获连衣裙的细节。假如能把已有的视觉先验加到 CNN 的输入中,CNN 的训练和 serving 效果都会更好。
  • 包含与类目无关的信息:如果把这些有视觉先验的信息提前告诉 CNN,它就有可能避免提取到一些与类目无关的信息。对于连衣裙图片,可能背景中有一些和类目相关性不高的物品。我们可以根据类别先验,避免将背景噪声耦合进来。

综上,我们整体的方向就是通过已有的图像之外的视觉先验,帮助 CNN 的学习。****

2. SENet 作为特征再校准模块的作用

前期的调研中,我们发现 SENET 的思想和我们有些类似。做图像的同学都比较清楚,SENET 是被插在每个卷积操作的 Feature map 之后,有点类似于 Self-attention 的小模块。首先把它的空间的尺度给压掉,得到 c 维的向量,再做 c 维向量内部的交互,得到 c 维的 scale 乘到 c 维的 feature map 上。

举个例子,我有 c 个 Feature map ( 特征图 ),通过内部的交互来决定哪个特征图应该加强,哪个应该减弱。这是一种类似 self-attention ( 自注意力机制 ) 的 Feature map recalibration ( 特征图再校准 ) 的问题。在点击率预估的问题中,recalibration 就有点像做特征选择。可以认为这 c 个特征图是表示图像不同方面的信息,通过自注意力机制的方式去进行选择。但是有没有可能把这些类目的信息或者是从其他地方得到的视觉先验加进来,做一些基于视觉先验的特征选择呢?答案是肯定的。

3. 类目特定的卷积神经网络:CSCNN

Category Specific CNN ( 类目特定的卷积神经网络 ),具体的操作方式和 SENET 稍微有点类似。

还是以连衣裙特征提取任务为例,当给定类目是连衣裙时,可以把连衣裙的 embedding 加到 channel-wise attention ( 通道域注意力机制 ),以及 spatial-wise attention ( 空间域注意力机制 ) 的过程中。这种方式相当于为输入的 feature map 提取和 category 有关的 channel 和 spatial feature ( 空间特征 )。或者说是在卷积的每一层之后,通过引入 category 的信息做 category specific 的 feature recalibration。进而实现 category specific 的图像特征的抽取和图像特征选择。

这种逐层引入 category ( 类目特征 ) 的视觉先验到 CNN 里面的方法,可以认为是在 CNN 逐层提取越来越抽象信息的过程中,不停地加入类目相关的特征选择。最终 CNN 提取出来的视觉信息就是一种类目相关的信息,或者说是把很大的图像信息抽取问题特化成小类目下的图像特征抽取问题,进而简化 CNN 的学习任务。

具体来讲,上面是具体的 channel-wise attention ( 通道域注意力机制 ) 的实现方式。和 SENET 很类似的部分是在这里——通过 Feature map 来做一些 average pooling ( 平均池化 ) 和 max pooling ( 最大池化 ),得到 C 维的向量。而后又拼上 category embedding,从而相当于在前半部分得到全局的图像特征表示。经过全连接,得到类目特定的通道域侧的加权系数。平均池化和最大池化这两路加起来,经过 sigmoid 函数来得到通道加权系数,加权后得到 channel 的 refined-feature map ( 提纯特征图 )。类似地还做了 category-specific Spatial Attention module ( 类别特定的空间域注意力机制模型 ),它的方式就是把 channel 的这一维 average pooling 或者 max pooling 掉,再拼上同样大小的 category embedding,经过卷积的方式,提取到 spatial 的加权系数,最后得到 spatial 的 refined CNN Feature Map。通过这两种不同的模块,我们在卷积的过程中,在每个 feature map 后,都做了类目先验相关的特征抽取 ( 特征选择 ) 以提升 CNN 的学习效果。

3. 用 9NAI 进行的工程实现

再介绍一下为了解决前面说到的一些工程实现的问题,和对应的加速方法。

这张图是模型系统的简化图。从右下角开始看,特征通过线上 feature dump 下来。由于线上预估时实际上没有用到图像,所以这部分特征里也是没有图像的。

经过对相同商品 ID 及其图像特征的离线拼接,特征中就同时包含了图像特征、类别特征等三部分的特征,融到一起得到了一个端到端的带 CNN 的 CTR 预估训练模型。

端到端训练之后,会产生这样一个问题:CNN 部分线上 serving 缓慢。我们采用了一种空间换时间的加速方式。具体是我们先对全站商品的 CNN embedding 进行离线预估,形成词表,把这个词表和模型的其他部分一起加载到线上的系统中,线上就可以直接通过商品的 ID 来查到商品的 embedding。

之所以这样做,是因为统计发现广告主更换商品主图的频次很低。每天更新模型,每天使用最新的 CNN 产出线上用的 Lookup Table ( 查找表 ),对这种低频变化的主图是稳定可靠的。在线上通过 20G 的查找表,我们在 CPU 的机器上实现了 20 毫秒以内的 tp99 ( 99% 以内网络需求的最低延时 )。

4. 离线训练加速

加入 CNN 之后,原来可能一天能训练好的模型需要数天时间才能训练好,CNN 在这部分的离线计算瓶颈比较大。

具体进行离线加速的方式包括两部分:

  • 按照商品的主图进行聚合。 我们将至多 25 个对应同商品的不同的请求聚合 ( 他们可能是来自不同用户的,但是他们看到或者点击了相同的商品 )。这批聚合了的请求在训练的过程中由于图像是相同的,所以 CNN 这部分只用 forward 和 backward 一次。这种方式在不影响离线训练效果的情况下,能极大提升离线训练效率。
  • 单机 4 卡的同步更新。 做这件事情的主要意义是可以节省 CNN 梯度回传的次数,4GPU 只回传一次梯度,节省了 PS 框架下 server 传输成本,进而提升离线训练速度。最终在百亿规模的训练集上我们可以在 24 小时内完成离线训练。

05 实际效果

接下来介绍整个算法以及工程架构在线上和公开数据集上的实际效果。

1. 算法模型在公共数据集中的效果

在公开数据集的实验用了比较简单的 CTR 模型,来检验图像特征提取的这部分究竟起到多大的作用。这里没有看它和 CTR 模型的耦合,基本只关注图像。以亚马逊的数据集为训练集,每个子类里边都有几十类的商品,采用 AUC 评估指标,主要的对比方法分成以下几种:

  • 不依赖于图像的方法;
  • 依赖图像的方法;
  • 在图像之外加入类别信息的视觉先验的方法。

和我们最接近的方法是 SCA,它是在 image caption ( 图像描述 ) 方向的工作,在卷积的后几层加入空间域和通道域的注意力机制。

对比之后发现,加入图像信息相比不加图像有非常大的 AUC 提升。通过 Fintune ( 迁移学习 ) 的方法也比非 Fintune 的方法好,主要的考虑是来自于非迁移学习的方法可能提取出来的特征可能和已有的特征是有关系的,所以做迁移学习效果更好一些。

这三种方法就是加入类别信息的方法。虽然已有工作也加入了类别、视觉先验,但是他们都采用了 late fusion 的方式:CNN 并不知道这些类别的先验,CNN 提取了特征之后,再和这些类别、视觉先验进行耦合建模。

后两种方法都将类别先验加到了 CNN 里。SCA 虽然是在图像描述中取得很好的效果,但是由于它无法很好地加到每一层的卷积后,对于简化 CNN 学习效果并没有我们好。我们在所有的指标上都大幅领先了 state-of-the-art。

我们进一步回答了 category specific 模块对所有的 CNN 架构、注意力机制的普适性。无论是 CNN-F 还是 inception,SE 还是一些 spatial attention 的模块,加入了我们的 category specific 机制都可以得到一致的效果提升。

2. 算法模型在工业数据集中的效果

工业数据相比于公开数据有很大的不同,主要有两大特点:

  • 数据量非常大: 150 亿的数据,3000 多类别数,还包含各种各样已有的人工提取的特征。
  • 工业数据的特点: 长尾、稀疏。

这里我画了几个特征的例子。比如 Query 这个特征,有 90% 的 Query 出现的次数不足 10 次。在这种非常稀疏的场景下,特征泛化性差,过拟合和冷启问题严重。

我们的建模基础——CTR model 是三层的 DCN 的模型,提取图像信息的网络采用了 Res18 的网络。我们在它的基础上进一步增加了 category specific 模块。

研究发现,在基础的模型下,加入这种固定的 CNN embedding 已经有了一些提升效果,但并不是很大。在加入了 Fintune 迁移学习之后,得到了进一步的提升。再加入 CBAM 的模块,以类似 self-attention 的方式来决定哪些特征应该加强或者减弱,整个模型效果又得到一点点提升。但主要的提升还是来自于最后的 CSCNN,通过加入类目特定的视觉先验来帮助 CNN 的学习。目前 CSCNN 已经在京东搜索广告上全量,每天服务数亿用户和数百万广告主。

今天的分享就到这里,谢谢大家。


本文地址:https://www.6aiq.com/article/1599175201402
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出