长尾物品(Tail Items)在推荐系统中是非常常见的,长尾的存在导致了样本的不均衡,对于热门头部物品(Head Items)的样本量多,模型学习这部分的效果越好,而长尾物品的样本量少,导致模型对该部分Item的理解不够充分,效果自然也就较差。
那么,针对长尾物品的推荐,有哪些较好的解决方法呢?本文从几个角度来聊一下这个问题。长尾问题,可以看成是推荐系统倾向于推荐热门商品,而忽略了非热门物品,即推荐系统如何解决纠偏问题?
Bias/Debias思路
在实践中,做推荐系统的很多朋友思考的问题是如何对数据进行挖掘?大多数论文致力于开发机器学习模型来更好地拟合用户行为数据。然而,用户行为数据是观察性的,而不是实验性的。这里面带来了非常多的偏差,典型的有:选择偏差、位置偏差、曝光偏差和流行度偏差等。如果不考虑固有的偏差,盲目地对数据进行拟合,会导致很多严重的问题,如线下评价与在线指标的不一致,损害用户对推荐服务的满意度和信任度等。下面我们聊一下与长尾问题相关的两个偏差。
01
曝光偏差
曝光偏差的发生是因为用户只接触到特定项目的一部分,因此未观察到的交互并不总是代表消极偏好。特殊地,用户和商品之间未被观察到的交互可以归因于两大原因:
1)商品与用户兴趣不匹配;
2)用户不知道该商品。
因此,在解释未观察到的相互作用时会产生歧义。无法区分真正的消极互动(如暴露但不感兴趣)和潜在的积极互动(如未暴露)将导致严重的Bias。
解决方法:
目前处理该问题的策略主要还是使用inverse propersity score。为了解决这个问题,类似于外显反馈数据中的选择偏差处理,Yang等人建议用隐式反馈数据倾向的倒数来加权每个观测值。intuition是把经常观察到的交互降权,而对少的样本进行升权。
为了解决曝光偏差的问题,传统的策略就是将所有被观测的交互作为负例并且明确它们的交互。confidence weight可以被分为三类:
1.Heuristic:典型的例子是加权的矩阵分解以及动态MF,未观测到的交互被赋予较低的权重。还有很多工作则基于用户的活跃度指定置信度等,但是赋予准确的置信权重是非常有挑战的,所以这块依然处理的不是非常好。
2.Sampling:另一种解决曝光bias的方式就是采样,经常采用的采样策略有均匀的负采样,对于流行的负样本过采样,但是这些策略却较难捕捉到真实的负样本。
3.Exposure-based model:另外一个策略是开发基于曝光的模型,这样可以知道一个商品被曝光到某个用户的可能性等。
02
流行度偏差
热门商品的推荐频率甚至超过了它们的受欢迎程度。长尾现象在推荐数据中很常见:在大多数情况下,一小部分受欢迎的商品占了大多数用户交互的比例。当对这些长尾数据进行训练时,该模型通常会给热门项目的评分高于其理想值,而只是简单地将不受欢迎的商品预测为负值。因此,推荐热门商品的频率甚至比数据集中显示的原始受欢迎程度还要高。
忽略流行度经常会带来非常多的问题:
(1) 降低个性化的程度影响,影响用户的体验;
(2) 降低了推荐系统的公平性, 流行的商品却不一定是高质量的, 对流行商品的推荐会降低其它商品的曝光,这是不公平的;
(3) Popular Bias会增加流行商品的曝光率, 使得流行的商品越加流行,使模型训练更加不平衡;
另外一个不平衡的问题的原因是由于推荐结果的不公平带来的。基于诸如种族、性别、年龄、教育程度或财富等属性,不同的用户群体通常在数据中不平等地表示。在对这些不平衡数据进行训练时,模型很可能学习这些表示性过高的群体,在排名结果中对其进行强化,并可能导致系统性歧视,降低弱势群体的可见度(例如,代表少数群体不足、种族或性别陈规定型观念)。
解决方法:
解决流行度偏差的方案有四类:
1.正则
合适的正则可以将模型推向平衡的推荐列表。
CTR预估场景下,构造的模型越复杂参数越多,越容易过拟合。实际场景中,存在着大量的长尾数据,这些数据的存在一方面在训练过程中增加了复杂度,另一方面在结果上产生了过拟合。直接去掉这些长尾数据是一种简单的处理方式,但也丢掉了很多信息。因此,DIN文章中给出了自适应正则化调整的方式(Adaptive正则化方法),对高频减小正则,对低频增大正则。
2. 对抗训练
基本思路在推荐G以及引入的adversary D进行min-max博弈,这样D可以给出提升推荐锡惠的信号。通过G和D之间的对抗学习,D学习流行项和利基项之间的隐式关联,G学习捕捉更多与用户历史相关的niche商品,从而为用户推荐更多长尾商品。
3. Causal graph
因果图是反事实推理的有力工具。Zheng等人利用因果推理解决流行偏差。他们假设用户对商品的点击行为取决于兴趣和流行程度,并构建了一个特定的因果图。为了解决用户兴趣和流行偏差的问题,作者考虑了两种嵌入方法:兴趣嵌入以捕获用户对商品的真实兴趣,以及流行度嵌入来捕获由流行度引起的伪兴趣。在多任务学习的框架下,可以利用特定原因的数据对这些嵌入进行训练。最后,兴趣嵌入将被用于最终推荐,在这里,受欢迎度偏差已经被消除。
4. 其它方法
通过引入其它side information来降低流行度的偏差, propensity score也可以被用来做popularity的bias。通过降低流行项对模型训练的影响,可以减轻流行偏差。
迁移学习思路
由于大多数现有推荐系统中的的长尾模型只关注尾部,而没有考虑与头部们的联系—头部包含丰富的用户反馈信息和与尾部相关的可转移上下文信息。为了改进长尾问题,谷歌进行了将知识从头部转移到尾部的研究,提出了一个新的对偶迁移学习框架,它可以从模型层和物品层协同学习知识迁移,利用了头部中丰富的用户反馈以及头尾部之间的语义联系。
01
对偶迁移学习方法
(1)橙色部分学习通用的元迁移器;
(2)绿色部分学习Item之间的语义关系;
02
模型结构
模型探究使用少量训练样本学习的模型与相同物品使用足够训练样本学习的模型之间的联系。
Base-Learner: 通过双塔模型得到的user embedding和item embedding,然后使用内积的方式得出预测的Score。
Meta-Learner:通过基学习器得到few-shot模型和many-shot模型之后,利用元学习器映射两个模型的参数,从而捕捉元级知识。
KDD Cup 冠军思路
在KDD Cup2020中,美团技术团队给出了基于时间加权和图的解决方案,大概思路如下:
针对选择性偏差和流行度偏差两方面挑战,学习用户的每个历史点击商品和候选商品的关系,可以理解为u2i2i的建模。这种建模方法更有助于学习多种i2i关系,并且可以容易地将i2i图中的一跳关系拓展到多跳关系,多种i2i关系可以探索更多无偏数据来增大商品候选集和训练集,达到了缓解选择性偏差的目的。
同时,考虑到流行商品引起的流行度偏差,我们在构图过程中对边权引入流行度惩罚,使得多跳游走时更有机会探索到低流行度的商品,同时在建模过程以及后处理过程中我们也引入了流行度惩罚,缓解了流行度偏差。
点击共现边通过用户的历史商品点击序列所构建,边的权重通过以下的公式得到,其在两个商品间的用户历史点击共现频数的基础上,考虑了每次点击共现的时间间隔因子,并加入了用户活跃度惩罚以及商品流行度惩罚。
时间间隔因子考虑到了两个商品间的共现时间越短则这两个商品有更大的相似度;用户活跃度惩罚考虑了活跃用户与不活跃用户的公平性,通过用户历史商品点击次数来惩罚活跃用户;商品流行度惩罚考虑了商品的历史点击频数,对流行商品进行惩罚,缓解了流行度偏差。
参考资料