DICM with AMS 论文精读

论文引用: Ge, Tiezheng , et al. “Image Matters: Visually modeling user behaviors using Advanced Model Server.” (2018).

本文是阿里发表在 CIKM 2018 上的文章,主要思路是将用户历史有过行为 (文章实际使用了点击行为) 的图片来对用户视觉兴趣进行建模,在广告 CTR 预估时就能够估计用户对广告图片的喜好,从而提升 CTR 预估的准确率。由于用户在商品页面行为历史通常较为丰富,因此训练样本中会包含大量的图片特征,这些特征使用传统的 PS 架构无法有效训练,因此文章提出了 AMS (Advanced Model Server) 架构,能够平衡存储和通信开销,使得天级更新模型成为可能。这篇文章主要的贡献也是在工程实现方面。

背景和动机

广告 CTR 预估是广告系统中至关重要的环节,传统的 (非多模态) 预估模型,主要是使用一些 ID 和交叉统计之类的特征,但是由于 ID 没有语义,我们无法判断两个 ID 是不是有相关性,因此这些模型对于出现频次少或者新出现的 ID 无法充分训练,即存在冷启动的问题。

解决冷启动问题通常会想到引入内容特征,而在电商领域,图片就是能够描述广告/商品的最直观且最受用户关注的内容特征。用户在购买商品的时候,通常会点击、浏览商品的图片,结合商品的描述、评论等其他信息来决定是否购买,因此用户曾经点击过的图片能够在很大程度上表征用户的兴趣。而用户是否点击广告,图片、标题等信息是影响最大的因素。因此,文章就考虑使用用户点击过的图片来建立用户的兴趣模型,再与广告的图片进行匹配,从而估计用户在视觉层面是否对该广告有兴趣;将这方面的估计与传统的基于 ID 等特征的估计相结合,来提升 CTR 估计的性能。基于这个思路,文章提出了 DICM (Deep Image CTR Model)。

使用用户图片历史来建立用户视觉偏好主要的问题就是数据传输和存储,如果使用传统的 PS 架构,图片数据是保存在 KV Store 里(也就是参数服务器),谁用谁来查一下,而图片的数量和数据量都是相对较大的,因此这种方式十分消耗资源,并且这种方式也难以针对 CTR 预估任务对预训练的图片特征进行进一步的组合和压缩,即图片数据不是目标相关的。文章针对这个问题,提出了一种扩展 PS 架构,称为 AMS 架构。下面就详细的介绍这两方面的工作。

AMS 架构

如上所述,文章在实现 DICM 模型时,实际上是基于 AMS 架构的。AMS 架构整体如图 1 右图所示:

AMS 将节点分为 WorkerServer 组:

  • Server 组:保存图片原始特征数据(考虑到端到端训练和推理的时延,这里取的是预训练模型的低阶隐层输出),并且负责将图片原始特征数据映射到任务空间的高阶表达,实际上就是学一个 Tower 模型,这个 Tower 模型是所有 Server 共享的。使用这个图片 EmbedTower,可以将图片原始特征数据极大的压缩(文章使用 $4096\times 256\times 64\times 12$ 的 Tower,可以将数据量减少 340 多倍),Worker 查询的时候传输数据量就大大减少了。
  • Worker 组:从 Server 组查询样本的各维特征(包括 ID embedding 和图片的高阶 embedding 等),将特征组合后进行推理;训练时还要将损失梯度传回 Server,用来更新图片 EmbedTower

这样分与传统 PS 架构最大的差别就在于,Server 组内的节点也是有通信的,也是需要更新模型的了 (更详细的比较可以参考文献 [1],说的很清楚)。好处是,当图片的数据量非常大的时候:

  1. 每个图片原始特征只保存在单个 Server 上,节约了存储;
  2. 每个图片的 embedding 只需要计算一次,而且可以通过预计算,缓存以后供多个 Worker 查询;
  3. 压缩后的图片 embedding 数据量小,减小了数据传输消耗;

文章号称在他们的场景下能节省 31 倍的存储开销和 340 倍的传输开销,而推理的时延仅仅增加了 3 毫秒。不过大家在各自具体场景中可能需要权衡一下性价比。

DICM 模型

从图 1 左图来看,DICM 模型整体就是一个简单的 Embedding + MLP 架构。其中,最关键的部分实际上就是用户视觉偏好抽取的部分(后面简称为 VisualPrefExtractor),也就是图片 EmbedTower 和基于用户图片历史和当前广告图片生成兴趣特征向量的部分。

EmbedTower 前面简单介绍过了,这里需要说明的是,文章在保存图片原始特征的时候,并不是使用原始的像素值,而是经过预训练的 VGG16 第 14 层的 FC-4096 作为原始特征(如图 2 所示)。虽然 VGG16 的训练目标是图像分类的任务,但是这种任务学到的语义特征有比较好的泛化性能,而且由于是逐层处理,取靠前的参数实际上使用的是图像的一些基础元素的特征,这些特征再进一步通过广告 CTR 预估任务进行训练,这样就能够得到有用的高阶特征。文章也尝试了使用其他层的输出作为图片的原始特征:太靠近输出会损失性能;而越靠近输入端,参数越多,并且边际效益递减,因此这也只是一种权衡。另外,淘宝主要是买商品,使用 ImageNet 的预训练模型可能比较契合,我们在视频场景下就会发现,VGG16 对于人物的识别权重很低,因此可能又不太适用。

而为了抽取用户的视觉偏好,我们需要从用户图片历史序列中抽取出有效的特征。在用户行为非常丰富的场景,比如淘宝,用户的兴趣是多元化的,用户是不是点击某件 T-恤的广告,主要取决他历史上对衣服款式的喜好,而受他买零食、饮料、矿泉水的影响较小,因此需要引入注意力机制来针对不同的广告从用户图片历史中抽取出不同的特征表达。

文章使用的注意力机制还是比较简单的,如图 3 右图所示,就是将广告图片特征和用户每条历史图片特征拼接后,经过一个 $64\times 16\times 1$ 的 Tower,用来计算每条历史图片的权重,然后再加权对所有历史图片特征计算 sum pooling,得到用户视觉偏好表达。这里的广告图片特征和用户历史图片特征都是经过 EmbedTower 映射后的高阶表达。为了增强记忆能力,文章还使用了 ID 行为列表来做相似的处理,将得到的 embedding 与图像偏好的 embedding 拼接,即实现了 MultiQueryAttentivePooling,两者互为补充,效果得到进一步提升。

这种方式很容易扩展,比如可以简单的添加 TextPrefExtractorAudioPrefExtractor 等其他多模态的偏好模型,而且由于这些多模态数据不与其他特征进行交叉,因此训练与推理都是相对独立的。VisualPrefExtractor 也可以作为子模型嵌入到双塔结构里做召回,或者嵌入其他复杂排序模型,如 DIN 等,作为特征抽取器。

根据这篇文章的说明,该模型至少在当时是承接了淘宝的主流量,因此在多模态方面还是十分值得借鉴的。

参考文献

[1] 一图胜千言: 解读阿里的Deep Image CTR Model. https://zhuanlan.zhihu.com/p/57056588.

[2] Karen Simonyan and Andrew Zisserman. Very deep convolutional networks for large-scale image recognition. arXiv preprint arXiv:1409.1556 (2014).