首先来介绍一下本文涉及的场景—— “有好货”场景。它的位置是在淘宝首页的四宫格,分为一跳精选页和二跳承接页。承接页主要有两种形式,一种是图文的承接页,另一种是短视频的承接页。这个场景的目标主要是为用户提供满意的好货,带动 GMV 的增长,从而进一步撬动达人的供给。
接下来进入本文的重点,流行度偏差。流行度偏差是什么?为什么会产生流行度偏差?
流行度偏差有很多别名,比如马太效应、信息茧房,直观来讲它是高爆品的狂欢,越热门的商品,越容易曝光。这会导致优质的长尾商品或者达人创作的新商品没有曝光的机会。其危害主要有两点,第一点是用户的个性化不足,第二点是达人创作的新商品得不到足够的曝光,使得达人参与感降低,因此我们希望缓解流行度偏差。
从上图右边的蓝色柱状图可以看出,曝光 top10% 的商品在某一天中占据了 63% 的曝光,这证明在有好货的场景下马太效应是非常严重的。
接下来我们去归因为什么会产生流行度偏差。首先,需要阐明我们为什么会在召回截断做缓解流行度偏差的工作。排序模型拟合的是商品的 CTR,它的训练样本包含正样本和负样本,CTR 越高的商品越容易获得曝光。但是在召回阶段,我们通常会采用双塔模型,它的负样本通常会通过两种方式产生,第一种是全局随机负采样,第二种是 batch 内负采样,batch 内负采样是将同一个 batch 取正样本的其它曝光日志当作负样本,所以它在一定程度上可以缓解马太效应。但是,通过实验我们发现,全局负采样实际的线上效率型效果会更好。不过,推荐系统中的全局随机负采样可能导致流行度偏差,因为它只为模型提供了正反馈。这种偏差可能归因于流行度分布差异和先验知识干扰,即用户倾向于点击更受欢迎的物品。因此,模型可能会优先推荐热门物品,而不考虑它们的相关性。
我们也分析了流行度分布差异,如上图右边绿线所示,通过将商品按照曝光频率分组并计算每组的正样本平均分,发现即使所有样本都是正样本,平均分数也随曝光频率的下降而下降。推荐系统模型训练时存在流行度分布差异和长尾分布差异。模型会倾向于把流行度信息注入到商品的 ID 特征中,导致流行度分布差异。高爆品获得的训练次数远大于长尾商品,使得模型过拟合于高爆品,长尾商品难以得到充足训练和合理向量表示。如上图右边的 TSN 图所示,蓝点表示高曝商品的商品向量,而红点表示长尾商品的商品向量,显示出分布上的显著差异。而且如上图右边的红线所示,hit ratio 也会随着曝光数的降低而降低。所以,我们把流行度偏差的产生归因于流行度分布差异和长尾分布差异。
当前业界的解决方案主要包括两种,分别是逆倾向评分(IPS)和因果推断。
通俗来讲就是将主任务损失函数中高曝光概率商品的权重调低以避免过度关注于高曝光概率商品,从而可以更平均地关注整个正样本分布。但是,这种方法需要提前预测曝光概率,这种预测是不稳定的,容易失效或者波动较大。
我们需要构建一张因果图,i 代表商品特征,u 代表用户特征,c 代表点击概率,这张图就表示给模型输入用户特征和商品特征,预测点击率。如果我们把流行度偏差也考虑到这个模型中,用 z 来代表,它不仅会影响点击率,还会影响商品的特征表示 i,因果推断的方法是尝试去阻断 z 对 i 的影响。
比较简单的方法是利用商品的一些统计特征单独得到一个 bias 塔,此时模型会输出两个分,一个是真实的点击率,另一个是商品的流行度分,在线上预测的时候会将商品的流行度分去掉,实现对流行度偏差的解耦。
第二种方法是将用户点击归因为两类,一类是从众兴趣,一类是真实兴趣,分别构建样本联合训练。相当于得到两个模型,一个模型去得到用户的从众兴趣分,一个模型去得到用户的真实兴趣分。因果推断其实也存在问题,它解决了流行度分布差异,但不能解决长尾商品缺乏训练数据的问题。当前的解决方案倾向于消除流行度偏见,但这对于需要“马太效应”来生存的推荐系统可能并不总是有益的。所以,我们建议不要完全去除推荐系统中的流行度偏差,因为流行的项目通常更优质,用户也有从众心理和真实兴趣两种心理,完全去除流行度偏差会影响用户从众兴趣的满足。应该合理利用流行度偏差,不加剧偏差。
我们这一次探索的工作就是如何合理地利用流行度偏差,要想合理地利用流行度偏差,需要解决一个难点:“如何提取无偏且学习充分的商品表示?”针对流行度分布差异,我们需要从商品 ID 中解耦出真实内容向量和流行度向量。针对长尾分布差异,我们借鉴了域适应的范式将整体分布对齐,借鉴了对比学习的范式将实例分布对齐。
先来介绍 base 模型的基本结构,base 模型其实就是一个经典的双塔模型。接下来详细介绍下我们是如何解决前面提到的两个问题的(流行度分布差异和长尾分布差异)。
特征解耦模块是本文针对推荐系统中的流行度偏差问题提出的一种解决方案。该模块通过将物品向量表示中的流行度信息与属性信息分离开来,从而减轻流行度对物品向量表示的影响。具体地,该模块包括流行度编码器和属性编码器,通过多层感知器的组合学习得到每个物品的属性和流行度向量表示。这个模块的输入是物品的属性特征,例如物品 ID、物品类目、品牌等,如上图模型结构中的右边部分所示。这里会有两个约束,包括正交正则化和流行度相似度正则化,旨在将流行度信息与物品属性信息分离。其中,通过流行度相似度正则化,模块被鼓励将嵌入物品属性的流行度信息与真实流行度信息对齐,而通过正交正则化,模块被鼓励在编码中保留不同的信息,从而实现分离流行度信息和物品属性信息的目标。
我们还需要一个学习真实流行度的模块,如上图模型结构中的左边部分所示,它的输入主要就是商品的统计特征,然后经过一个 MLP 得到真实的流行度表示。
接下来,我们想要解决长尾分布差异的问题。
我们借鉴了迁移学习的思想,实现热门商品和长尾商品的分布对齐。我们在原来的双塔模型中,引入了一个未曝光商品,使用了 MMD 的损失函数(如上图左上所示),这个损失函数希望热门商品域和长尾商品域的簇中心尽可能靠近,如上图右上示意图所示。由于这种域对齐是无监督的,可能会产生负迁移,我们做了如下优化:曝光样本在域对齐损失上的梯度被停止,防止影响到任务损失;对于未曝光样本,引入精排分进行知识蒸馏。
我们还借鉴了实例对齐的思想,希望可以学习得到更好的商品向量表示,主要思想就是有效共现次数越多的商品,向量表示越相似。这里的难点是如何去构造 pAIr。在用户有过往行为的商品序列中,天然存在这样的 pair。以一个用户举例,一条样本包含了一个用户的行为序列和目标商品,那么目标商品和用户行为序列中的每个商品就能构成共现的 pair。我们在经典的对比学习的损失函数的基础上还考虑了用户的兴趣多样性和商品频率,具体的损失函数公式可见上图中左下部分。
我们可以看一个直观的示意图,如上图中右下所示,灰色的点是目标商品,橙色的点是用户的行为序列,蓝色的点是我们随机负采样得到的负样本。我们希望借鉴对比学习的方法去约束用户行为序列中每个商品都和目标商品靠近。
以上模块有效地得到了商品的无偏内容表示和解耦的流行度表示,我们应该怎样去应用呢?我们利用了无偏模型和有偏模型联合训练的方式,无偏商品向量可以基于解耦模块及正则化提取,为了能够利用流行度信息,我们还引入了流行度特征,有偏模型只会继承流行度偏差,不会加剧偏差。线上服务部分,如上图右边所示,我们将无偏的商品表示和有偏的商品表示通过参数 α 融合起来得到线上的商品表示,这样即可通过用户向量来召回商品,这个 α 是调节召回关注流行度信息的程度。
上图中展示了这个模型离线及线上的效果。在离线实验中,我们引入了 C-Ratio 的指标,来衡量召回结果中有多少商品是高曝光商品。通过离线实验我们可以看出各个模块都有一定程度的贡献。无偏模型在线上效率指标方面并没有收益,说明流行度信息是有用的,我们还是需要使用有偏模型去利用流行度信息。
最后,我们对模型结果做了可视化的展示。我们发现新的模型结构的确可以将高爆商品和长尾商品的分布记性对齐,解耦出来的流行度表示向量和商品无偏的内容表示几乎是没有交集的,并且同类目的商品能有更紧密的联系,通过对 α 的调整,可以让模型有方向地去拟合用户的从众兴趣和真实兴趣。
今天的分享论文标题是《Co-training Disentangled Domain Adaptation.NETwork for Leveraging Popularity Bias in Recommenders》。
A1:离线生成的,针对一条样本,我们可以拿到目标正样本及对应的类目,然后离线地随机采样出若干个和目标正样本相同类目的商品,挂载到训练样本中。
A2:引入的未曝光样本是没有标签的,是通过无监督的方式来进行分布对齐,可能会存在负迁移的情况,我们用了两个技巧来解决这个问题:曝光样本在域对齐损失上的梯度被停止,防止影响到任务损失;对于未曝光样本,可以引入精排分进行知识蒸馏。
A3:离线对样本用精排模型打一遍分,作为特征来使用,性能还好。
A4:不是,这样大概率还是一个高爆品,我们使用的是全局同类目下随机采样的结果。