
▐ 信息流场景面临的复杂挑战
复杂信息流可能包含不同类型、展示样式丰富的供给:文字、图片、视频、货架等,需要用一个统一的模型给不同类型的内容做排序。我们将业务需求总结为四大类:流量控制、多样性、组间排序以及定坑插入。纷繁复杂的业务需求可以拆解为这四个问题或者他们的组合。传统推荐系统往往需要构建pipeline,分步应对上述挑战。pipeline缺少统筹优化,时常会出现需求逻辑冲突与相互覆盖,无法获得联合最优解。
重排模型在淘宝不断发展,经历了3版迭代:V1版基于context特征增强的DNN-based判别式模型(贪心排序)[1]、V2版基于seq2seq结构的pointer-network生成式模型(贪心排序)[2]、V3版基于generator+evaluator架构的模型(生成式模型+判别式模型有机融合,考虑序列整体最优,非贪心排序)。这3版重排模型在淘宝不同的业务场景均拿到了明显的业务效果。今天我们聚焦于信息流场景,介绍如何利用V3版重排模型,突破pipeline的推荐范式,将四大类业务需求融入模型,给出end2end联合最优解。在淘宝信息流场景上,新模型实现了相关性与业务指标双增长,最终全量上线。
▐ GE架构介绍


在全文中,一些表述比如:“商品/item”都可以理解为一个意思,表示推荐的一个独立载体;“序列/列表/排列”表示推荐系统中一页返回的多个商品构成的有序的推荐结果。
给定一个包含M个候选商品的集合,一个用户
,还有一个商品序列奖励函数
,由偏好权重w加权求和而得,重排的目标是要找到最优的序列
,使得生成的序列能够最大化获得的reward:
其中生成的每个序列长度为N,并且。在本文中,我们假设奖励函数
为线性:
其中U表示效用函数,是我们关心的效用函数个数。因为w表示每个效用函数的相对重要性,它也被称为偏好权重。
通过一套人为设定的w计算而得,然后重排模型用参数表示,经过训练得到近似的指定w下的
到
的映射。





用户-商品的交互行为可以用向量表示,其中交互行为向量
中的每一个元素可以是:曝光、点击、购买、视频观看时长等等,取决于特定的应用场景。而用户-商品序列的交互行为可以被表示为矩阵
。注意,我们没有所有M个候选商品的交互行为,因为只有其中的N个候选商品会在最终的推荐列表中,其余的商品用户不会看到。




一个效用函数是到一个实数的映射,即:
。其中实数
分别表示对应的embedding维度。


▐ Encoder
在把候选商品集合输入给encoder之前,首先需要进行特征增强和embedding lookup的操作。一个商品的增强特征来源于候选集合,比如商品的历史点击率在整个候选集合中的排名。这是一个非常有效且简单的方式,告诉模型每个商品与它所在的候选集合之间的关系。然后ID特征会被转成实值embedding以方便数值计算。
Encoder是DeepSet的结构,因为它对输入商品的顺序不敏感,其结构图如下所示。DeepSet对于复杂的应用场景可能是更合适的encoder结构,因为要想找到一个好的混合了文本、图片、视频的初始输入序列是不容易的,差的初始输入序可能会伤害重排模型的效果。使用DeepSet不需要指定一个初始输入序,因为已经包含了重排模型为了生成一个好的序列需要知道的所有信息。DeepSet定理描述了序不敏感函数,推导出了深度模型中排列不变性的充要条件,其模型结构入下图所示:
▐ Decoder

对计算出的attention概率分布会采用Masking机制,主要有两点原因。首先,一个在前序步骤中已经被选出的商品不应该再被选择了,所以已被选出的商品的attention值需要被mask成0。其次,业务规则可能会要求模型在结果列表中的一些特定位置放一些特定的商品。因为一个顾客可能是通过点击一个trigger商品来到当前推荐场景的,所以需要把trigger商品强制放在推荐列表的最前面,以便提供更多关于trigger商品的信息给用户。在这种情况下,除了trigger的所有商品的attention值应该被mask成0。
同时,generator使用一个采样机制选择商品是至关重要的,因为这会让generator在相似的state尝试不同的action,最终能够帮助generator找到更优的序列生成策略。最简单的选择是Thompson Sampling,会依据每个商品mask后的attention值成比例地选择商品。一个更好的选择可能是Random Network Distillation,倾向于选择一个在之前相似的state下很少被选择的商品。
Evaluator
▐ 模型介绍



evaluator的模型结构如上图所示。在经过与generator一样的特征处理后,会被5个聚焦于商品序列不同方面的模型channel处理,5个channel的输出结果会被concat起来,然后通过一个MLP转变成最终的预测分。
▐ 业务规则与模型的融合
我们将现实业务中纷繁复杂的任务总结为四大类,包括:定坑插入、流量控制、多样性、分组排序,然后我们基于generator-evaluator框架的重排模型能够无缝地融合这些目标。
流量控制
流量控制确保来自特定群组的内容能够得到更多的曝光机会。可以从多个角度理解。比如:从公平性的角度,这些内容是受保护的少数内容;从平台生态视角来看,新创作的内容会被优先分发;从一个业务场景的功能定位的角度来看,推广上新内容的业务场景可能会更加强调新的内容而不是旧的内容。流量控制可以通过调整占比以及曝光位置两个因素实现:
其中上标f表示流量控制,p表示一页的结果,b表示训练的一个batch,表示曝光占比的阈值。我们复用一些符号,i既表示位于位置i的商品,又表示一个商品在结果列表中的位置下标。
是包含所有属于分组g的商品的集合,
表示一页的大小,也就是一页的坑位数,
是指示函数,
表示第i个商品的曝光位置,
表示曝光位置的阈值。
简单来说,这个算法是一个“抓大放小”的思想,如果整体没问题,没必要纠正其中个例的问题,如果整体有问题,那就需要对其中每一个不满足要求的个例都进行纠正与惩罚,才能逐渐达到整体满足要求的目的。
多样性





组间排序

定坑插入
定坑插入是一个非常严格的任务,意味着一个给定的商品必须被放在结果列表中的某个特定位置。比如用户可能会通过点击一个trigger商品来到一个推荐场景,需要强制把那个trigger商品放在推荐列表中非常靠前的位置,为了提供给用户更多关于trigger商品的信息。乍一看似乎很简单,因为我们总是可以在推荐结果列表生成以后再把trigger商品放在列表的顶部。然而,我们认为如果重排模型想要做好类似多样性和流量控制的任务,那让重排模型感知到trigger商品是很重要的。比如,在最后单独将trigger商品放在一个已经生成好的推荐结果列表的前面可能会导致头两个商品的商家重复,这会打破多样性的要求。对这种任务添加一个reward函数不会很有效,因为仅靠一个reward函数不能提供一个强保证。取而代之,正如在上文generator中介绍的,我们采用masking机制来实现定坑插入逻辑。

在generator训练之前,会首先使用纯正的监督学习方式充分训练evaluator。目前对于evaluator,我们使用经典的交叉熵损失函数训练得到一个分类模型:











其中是generator生成的重排后的商品序列,
是线上日志记录下来的曝光序列,这两个序列的reward差值
作为advantage函数。在这个loss中,我们假设每个动作对advantage值的贡献相等。
不需要显式地指定label,在我们重排的场景下,就是不需要显式地指定模型应该输出怎样的重排序。因为我们根本不知道最优的重排序是什么,或者是有可能存在较多种优秀的重排序,没法知道哪个更好。这种情况下,我们就不需要去让模型模仿监督信号,而是要直接面向reward也就是最终效果进行优化,只要是能够获得更高reward的行为,就是更好的行为,有可能找到比贪心排序更好的组合更优的排序结果。正所谓“不管黑猫白猫,抓到老鼠就是好猫”,只面向最终结果,只要结果是好,不强求一定要模仿怎样的行为。
由于这个reward R是环境给予的反馈,在我们的实践中就是evaluator给予的反馈,它跟generator的模型参数是没关系的,因此我们调整generator的模型参数,去最大化这个最终获得的总reward R,是不需要对reward R算gradient的。也就意味着,如果假设reward是一个函数产生的,就算产生reward的这个函数是不可导的也没关系,因为我们不需要对产生reward的这个函数进行求导,就算它是一个黑盒,我们不知道它的计算式子也没关系,只要我们拿到它最终的值就可以了。因此这个reward函数可以任意复杂,既可以是模型预估分,也可以是根据业务规则计算出来的分数,方便融入各种业务要求,因此非常适用于我们这个业务规则约束较多的场景。

我们在淘宝信息流场景实践了EG架构的重排。generator模型的输入是混排后分数最高的20个候选item,这20个item中会包含不同类型的供给,它们会作为一个集合送进generator模型(也就是actor)打分,然后generator生成一个长度为10的重排后的序列。 训练结束后,我们只将训练好的序列生成器generator上线,evaluator不上线。
evaluator是判别式模型,给每个序列打一个分,希望用户反馈更多的序列的evaluator分数比用户反馈更少的序列的evaluator分数要高,因此evaluator离线评估看的是auc指标。在我们的实验中,evaluator的auc大概为0.75左右。
generator的离线评估指标是better percentage,含义是所有请求的样本中,generator生成的重排序获得的evaluator score,比线上真实曝光序的evaluator score更高的比例。在我们的实践中,generator的better percentage通常能达到70%+左右,也就是说如果evaluator的评判打分是靠谱的,那么大概有70%的请求,generator能够生成出比之前的线上曝光序更好的序列。
该重排模型成功上线并取得了显著的线上效果。


我们是大淘宝技术-私域用户算法团队,负责淘宝商家私域产品(店铺、详情、关注)相关的算法,我们通过对海量数据的分析和学习,帮助亿万用户在商家私域高效地逛和买,辅助数千万商家运营客户。同时我们也是一支注重技术创新,乐于分享的团队,不少成果已经整理发表在了AAAI、SIGIR、WWW、KDD等国际顶会上。这里有海量的数据、充足的计算资源、丰富的应用场景等着你来挑战!想进一步了解我们,可以通过邮件tieyi.lq@taobao.com联系我们!
¤ 拓展阅读 ¤
本文分享自微信公众号 - 大淘宝技术(AlibabaMTT)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。