推荐系统论文阅读(五十六)-Star:一个模型服务多个场景
论文:
论文题目:《One Model to Serve All: Star Topology Adaptive Recommender for Multi-Domain CTR Prediction》
论文地址:https://arxiv.org/pdf/2101.11427v1.pdf
今天我们来看一篇阿里发表在cikm2021上面的文章,主要介绍一个模型怎么运用在多个场景进行ctr预估。
一 、背景
传统的行业推荐系统通常在单个业务场景的数据样本上进行训练,然后为该场景服务。然而,在大型商业平台中,推荐系统通常需要对多个业务场景进行点击率(CTR)预测。不同的场景具有重叠的用户和物品,因此存在共性。由于特定用户组可能不同,并且用户行为可能在特定域内发生变化,因此不同的域也有区别。这些区别导致了不同领域特定的数据分布,这使得单个共享模型很难在所有域都能很好地工作。为了解决这个问题,本文提出了星型拓扑自适应推荐模型(Star),一个模型可以有效地服务于所有域。具体地说,STAR具有星形拓扑,由共享中心参数和特定于域的参数组成。共享参数用于学习所有域的共性,而特定于域的参数捕获域的区别,以便进行更精确的预测。
我们先来看看在淘宝上的几个场景:
这就是两个简单的ads推荐场景,左边的业务是首页推荐场景,主要位于一个小框框中,推荐用户喜欢的物品,店铺,品牌等,右边是猜你喜欢场景,而猜你喜欢都是商品。
一种方式是直接混合训练数据,直接粗暴的去训练一个共享参数的点击率模型,另一种方式是每个业务领域训练一个模型,这样会有以下两个问题:
1,一些场景的训练样本不足,训练会不充分
2,维护太多模型成本过高,每次都要去训练所有场景的模型
为了解决以上两个缺点,该论文提出去学习一个高效的点击率模型,可以同时处理上百个业务领域。模型的输入是(x, y, p),其中x是各个领域共有的特征,如用户行为序列,用户画像,商品特征,上下文特征等。y是label,表示是否点击,p表示业务领域的标识。因为数据来自不同p,所以模型要准确的捕捉不同领域直接的数据分布差。
注意了,这个模型不是多任务模型,在原文中也提到了,这一点。多任务模型是同时去预估多个目标,比如在短视频领域,会同时去预估ctr,观看时长,关注率等指标。是一个模型是优化多个目标。而多域问题是解决不同域的同一个问题,比如预测不同域的点击率。
多任务模型现在大多都跟esmm或者mmoe那套方案一样,共享底层的参数,然后不同的任务有着自己的任务子塔,也就是不同的输出层。而对于多域问题,似乎挺难去充分挖掘不同域之间的关系,多任务里面可以共享底层embedding,多域问题应该怎么去共享信息呢?
如下图所示,star提出了一种星型拓扑结构去解决这个问题:
我们直接在下面开始介绍模型结构吧。
二、模型结构
可以看到,STAR由3个模块组成,如上图右边所示:
1,partitioned normalization (PN)
2,star topology fully-connected neuralnetwork (star topology FCN)
3,the auxiliary network
2.1模型的输入
模型的输入主要是所有的特征,包括用户的画像信息,物品的特征,用户行为序列和上下文特征,除此之外,为了建模不用场景的差异性,还会把不同场景的差异性特征p,主要是场景的id,pid输入到emb层,最后进行pooling和concat操作。
2.2 PN结构
因为不同域的信息不能进行统一的BatchNorm操作,所以PN结构主要是为了不同场景下的样本进行域内bn操作,BN中的参数,在不同域中是不一样的,所以修改如下::
说白了哈,分场景BN。
2.3 Star Topology FCN
这个跟ple的操作很像,我先直接列公式了:
结合下面这张图进行解释:
每个场景都有自己的FC参数,还有一个共有的FC参数,每个场景最终要使用的FC参数都是通过把共有的FC参数跟特有的FC参数进行✖️或者+操作得到的。
这里我说个小tips,如果有公司想试一下star结构,对于这个fc参数相乘的操作可能会觉得有点难,在一个batch中,所有场景下的样本都是混合在一起的,那怎么才能做到每个场景的fc参数跟共有的fc参数相乘呢?其实是这样做的,每个场景的pid就经过一次embedding层,这个embedding向量就是每个场景自己的独特fc参数,通过这种方式,我们在进行fc参数相乘的时候就可以直接用这个emb向量去跟共有的fc参数相乘了,简化了很多操作。
2.4 Auxiliary Network
只让模型自己去学习不同域的差异是一件很困难的事情,那么如何去显式的把域的信息加入到模型中呢?本文提出了Auxiliary Network,即直接把pid embedding,和其他特征的embedding进行concat,然后输入到DNN网络中得到Sa,FCN的输出定义为Sm,然后通过下式得到最终输出,最后用log loss进行模型的学习。
其实主要是一种残差的思想,FCN的输出可能很难能学习到差异,所以就直接在加上原始emb经过dnn的输出作为最终的输出。
最终的输出是:sigmoid(Sa+Sm)