召回模型中流行度偏差的现象主要有两种:流行度分部差异、长尾分布差异。本工作主要探索如何改善召回阶段中的双塔模型来缓解流行度偏差。目前已有缓解流行度偏差的方法主要有两大类:逆倾向评分(IPS)和因果图推断。但是,我们认为不能盲目抑制流行度偏差,而应探索如何更好将其利用。所以,本次工作从缓解流行度偏差的角度调整为合理利用流行度偏差的角度。此工作已被SIGIR-2022接收。
背景
推荐链路大概率会面临流行度偏差问题,即少量的热门商品占据了大部分的曝光,如图1柱状图所示,在有好货场景中,Top 10%的商品占据了63%的曝光量。在排序阶段去缓解马太效应,破除信息茧房,往往对效率的负面影响较大;而召回阶段作为整条召回链路的基底,在处理流行度偏差上的优势在于:召回阶段一般由多路组成,额外增加一路无偏探索更为平滑,后链路顶多不认该路的召回结果而减少透出,对效率指标的负面影响一定程度能降至最低。因此,该工作主要探索如何改善召回阶段中的双塔模型来缓解流行度偏差。
图1:流行度偏差展示。Item Group通过曝光频率的排名进行分组。直方图表示每个组的曝光量在总曝光量的占比;绿线表示每个组正样本的平均分值(流行度分布差异);红线表示每个组的Hitrate(长尾分布差异)。
我们将流行度偏差的产生归因于两个:
- 由于日志中包含了大量的热门商品正样本,目前的训练范式,如pointwise和pair-wise损失,鼓励模型推荐更多的热门品以达到更低的损失,将流行度信息注入ID表征中,如item id(例如,在训练模型时,即使商品特征仅用不含流行度特征的ID类信息,马太效应同样存在,证明ID embedding会在训练的时候记住流行度信息),从而往这个方向更新参数。如图1绿线所示,即使都为正样本,高曝品的打分均值也高于长尾品。我们将该现象定义为流行度分布差异,即在商品ID表征中所包含的流行度存在差异。
- 由于长尾商品日志的稀疏性,使得这类商品的表征学习不够充分,模型(过拟合于热门品)难以准确的预估它们,如图1红线所示,我们将此现象定义为长尾分布差异。
目前,已有缓解流行度偏差的方法主要有两大类,逆倾向评分(IPS)【1】和因果图推断【2】。但是,我们认为不能盲目的抑制流行度偏差,而应探索如何更好将其利用。原因是:相比于长尾商品,热门商品的质量往往更好或者符合当前趋势,因此值得更多的推荐。而用户发生点击收到两个因素的影响,一种是从众心理,一种是真实兴趣。因此,盲目地去除流行度偏差将忽略交互日志提供的重要信息,抑制优质品的透出,影响从众心理带来的点击。综上,本次工作从缓解流行度偏差的角度调整为合理利用流行度偏差的角度。
方法
图2:推荐过程的因果图表示,U-用户;I-商品;P-流行度;C-点击概率。
如图2a因果图所示,当前的训练范式会使得流行度信息不仅会影响用户的点击,还会被注入商品id表征中,从而加剧流行度偏差。因此,我们设计模型如图2b红线所示,从商品属性表征中解耦出原始的内容表示和流行度表示。具体来说,我们设计了可以联合训练有偏模型和无偏模型的解耦域适应网络,其难点在于如何提取无偏且学习充分的商品表示。针对流行度分布差异,我们设计了特征解耦模块(FDM)从商品属性embedding分离出属性表示和流行度表示;针对长尾分布差异,我们额外引入未曝光商品(大多数为长尾商品)来实现热门商品和长尾商品分布粒度上的对齐,进一步的,利用I2I范式,我们基于用户行为序列,设计商品相似度损失函数促使越相似的商品有越相似的商品向量表示,实现实例粒度上的对齐。接下来,我们将具体介绍我们的模型结构。
图3:网络结构图。分别表示目标商品,未曝光商品,用户行为序列商品。在训练阶段,FDM用来学习分离商品属性表示和商品流行度表示。此外,我们在商品塔额外引入未曝光样本和用户历史行为序列来缓解长尾分布差异。可以训练一个模型通过无偏的商品属性表示,和一个有偏的模型通过融合了真实流行度表示的的有偏商品表示。
Embedding Layer
整体模型为双塔结构:用户塔通过用户信息和历史行为序列生成用户向量表示;商品塔通过商品信息和流行度信息生成商品向量表示。其中用户信息包含性别、年龄、省份等;商品信息包含商品id,类目,品牌等;流行度信息包含曝光频率,点击频率,购买频率等。通过编码层将其转化为编码向量:
本次工作的重点在于如何改造商品塔来提取符合预期的商品向量表示。
特征解耦模块(FDM)
为了抑制流行度分布差异,我们设计了FDM模块从中分离出商品属性表示和商品流行度表示,如图3所示,一个由MLP组成的属性编码器用来捕获商品属性表示,一个由MLP组成的流行度编码器用来捕获商品流行度表示,可以用公式形式化的定义为:
其中,。由于商品的流行度表示不会影响到内容本身,我们认为和是正交的,因此,为了鼓励FDM朝着预期的方向优化,我们加入了两个约束:
其中,表示L2正则化,表示真实的商品流行度表示,通过生成,代表batch size。约束分离的与真实流行度表示尽可能相似,约束和正交,鼓励FDM对商品的不同角度(内容和流行度)独立进行编码。
正则化缓解长尾分布差异
域对齐 虽然FDM已经提取了解耦出流行度表示的商品属性表示,但是由于长尾的数据稀疏性,我们认为流行度偏差仍然存在。相比于训练充足的热门商品,长尾商品并不能获得足够的学习。借鉴域适应的思想,我们额外引入了埋点中的未曝光商品(大部分是长尾商品),采用常见的最大均值差异(MMD),来实现长尾和热门商品的分布对齐。
其中,表示核函数,表示希尔伯特空间。需要注意的地方有两点,一个该损失的目标样本商品属性表示是停止梯度的,防止对齐任务对主任务造成影响;另一个是为了保证分布对齐不会产生负迁移,会额外对未曝光样本引入基于精排分的知识蒸馏。直观来讲,该损失函数促使热门商品属性向量中心与长尾商品属性向量中心相互靠近,从而实现分布对齐。
实例对齐 由于日志中长尾偏移的存在,所学习到的商品向量空间并不能很好的反映商品间的隐藏相似性关系。例如,在商品空间中,一个热门商品可能远离与它同类目的长尾商品,却与不同类目的热门商品靠近。我们认为有效共现次数越多的商品对应该有更相似的商品向量表示。为了让模型捕获这种结构化信息,我们在商品塔额外引入了用户点击行为序列。基于对比学习,约束同一个用户点击的商品向量表示将会更接近。具体的,当作正样本,batch内的其他目标商品当作负样本,因此,商品相似度损失可以被定义为:
其中,,为温度系数,表示当前用户的行为序列,表示对应商品的曝光频率。存在两个问题:1)用户的兴趣是多峰的,这意味着用户的行为序列有着丰富的类目,如果盲目的将目标正样本与历史行为序列的所有样本进行聚拢会导致模型的崩塌。2)由于流行度偏差的存在,热门商品的曝光频率远远大于长尾商品。因此,如果忽略流行因子的存在,将会再次引入流行度偏差,因为很多无效的热门商品对的存在。综上分析,我们引入了由两部分组成的权重,类似于DIN,用于保存序列中与目标商品相似的商品,用于抑制热门商品的影响。值得注意的是,权重的梯度是停止的。该损失函数使得相似商品的向量互相靠近,并拉开与无关负样本的距离。基于域对齐和实例对齐,用于抑制长尾分布差异的正则化被定义为:。
联合训练及在线服务
联合训练 在模型获得无偏的商品属性向量,我们可以采取内积的形式训练无偏的召回模型。但正如我们所说,热门商品总体品质优于长尾商品,值得更多的推荐。为了更好的利用流行度信息,我们利用商品的真实流行度向量表示来提取有偏的流行度商品向量,可以被定义为:。基于和,模型用batch sample softmax进行召回任务的优化:
因为中已经解耦出流行度信息,有偏模型的训练只会去拟合流行度偏差,而不会去放大它。综上,的损失函数为:
在线服务 线上服务时我们使用BE提供的向量检索进行召回,为了同时考虑无偏分数(用户真实兴趣)和有偏分数(用户从众心理),线上的用户向量和商品向量的生成方式为:
其中,,表示流行度偏移权重,和的内积就可以看作是有偏模型和无偏模型分数的加权求和:。
实验部分
离线实验
指标说明:我们定义了一个模型召回结果的集中度衡量指标来衡量召回结果中热门商品的占比:
其中,表示召回的商品集合,表示热门商品集合。下表是离线指标对比,可以看出在长尾商品的指标和集中度都有所改善。
方法 | Hitrate@300 | Hitrate@300 | Hitrate@300 | C-Ratio |
Base | 0.3022 | 0.2378 | 0.2915 | 0.8801 |
CDAN w/o | 0.3224 | 0.2803 | 0.3085 | 0.7869 |
CDAN w/o | 0.3187 | 0.2769 | 0.3033 | 0.7748 |
CDAN w/o | 0.3195 | 0.2677 | 0.2964 | 0.7541 |
CDAN w/o | 0.3180 | 0.2639 | 0.2885 | 0.7600 |
CDAN | 0.3072 | 0.2984 | 0.3021 | 0.6075 |
CDAN | 0.3284 | 0.2893 | 0.3179 | 0.7361 |
线上实验
将原有的Base双塔替换为模型,线上指标如下表所示:
方法 | pCTR | 人均点击 | 人均浏览 | Top1K曝光占比 | Top10K曝光占比 | 曝光商品占总商品池比例 |
CDAN | +0.28% | +0.15% | +0.21% | -7.40% | -5.70% | +2.22% |
CDAN | 0.76% | +1.10% | +0.63% | −3.80% | −3.58% | +1.33% |
分析A/B结果可以发现,虽然无偏召回模型(仅利用无偏商品属性表示)可以使得集中度大幅度下降,且能提高长尾商品的曝光概率,但是在效率上几乎没有收益,这说明了盲目的去除流行度偏差会丢失掉流行度所带来的效率增益;而有偏的召回模型(仅利用有偏的流行度商品向量)在效率和集中度上都有所改善,说明可以利用流行度信息同时满足用户的从众性和真实兴趣。
向量可视化
图4 商品向量的T-sne可视化,红点为热门商品,蓝点为长尾商品,黄点为热门商品解耦出的流行度表示,绿点为长尾商品解耦出的流行度表示。
从图4a可以发现,由于流行度偏差的存在,Base模型所提取的商品向量表示存在着分布差异,这会导致过拟合于热门商品的模型难以精准评估长尾商品的好坏;从图4b可以看出,提取的无偏属性向量和解耦流行度向量符合预期,即属性向量不存在分布差异,而流行度向量具有区分度,且和属性向量有着明显的分界线。
图5 每种颜色代表一个类目
为了验证的有效性,我们对进行了消融研究并进行了向量可视化,可以发现基于实例对齐的可以促使同一个类目的商品向量聚类的更紧凑。
流行度偏移权重分析
图6 流行度偏移权重,柱状图代表C-Ratio,折线代表Hitrate@300
我们考量了流行度便宜权重对于离线指标的影响,表示有偏召回模型,表示无偏召回模型,中间的取值为两者的加权求和,可以发现随着的增大,召回结果的集中度逐渐下降,长尾商品的Hitrate逐渐提高,这证明通过对的调整,可以让模型有方向的去拟合用户的从众性和真实兴趣。
总结
虽然分发侧总是存在着流行度偏差,但不可否认的是该偏差体现了用户的反馈,一味的去抑制流行度偏差使得整体模型是无偏的并不能带来最好的收益。因此,我们认为模型应该去利用流行度偏差,但不能毫无扩张的去放大它。正如本文所说,用户的反馈是从众性和真实兴趣的体现,但是在此工作中只在商品测进行探索,并没有去建模用户侧每个用户从众性和真实兴趣的个性化倾向,在后期工作中,我们将会去探索如何分开去建模用户的这两种倾向。