KDD 2024:快手非自回归生成式重排模型NAR4Rec

快手提出非自回归生成式重排模型NAR4Rec,提升推荐效率,已发表于KDD 2024。

原文标题:KDD 2024 | 快手生成式推荐

原文作者:数据派THU

冷月清谈:

快手研发团队提出了一种应用于推荐系统重排阶段的非自回归生成式模型NAR4Rec,该模型已发表于KDD 2024。区别于传统的自回归生成模型,NAR4Rec能够一次性生成整个推荐视频序列,显著降低了线上推理耗时。

重排阶段由于候选序列数量巨大、用户反馈样本稀疏以及线上实时性要求高等挑战,使得高效的序列生成成为关键。NAR4Rec通过匹配模型解决了推荐场景中候选词表可变和样本稀疏的问题。该模型包含候选编码器和位置编码器,通过共享位置embedding提升训练效率。

为解决非自回归模型固有的条件独立假设导致的多峰分布问题,NAR4Rec引入相似度正则项,考虑候选视频与已选视频的相似性,从而避免生成不合理的序列。此外,不同于NLP中常用的最大似然目标,NAR4Rec采用序列不似然损失函数,同时最大化高效序列的似然概率和最小化低效序列的似然概率,更贴合推荐场景的优化目标。

离线实验结果表明,NAR4Rec在Avito和快手数据集上均取得了SOTA的性能,且训练和推理速度显著优于自回归生成模型。线上A/B测试也展现了该模型的有效性,带来了显著收益。

怜星夜思:

1、文章提到推荐场景的序列比文本序列更稀疏,这种稀疏性具体体现在哪些方面?除了文中提到的co-occurrence之外,还有哪些因素导致了这种稀疏性?
2、非自回归模型的并行生成特性使其推理速度更快,但同时也引入了条件独立假设。除了文中提到的相似度正则项,还有哪些方法可以缓解条件独立假设带来的问题?
3、文章提出的序列不似然损失函数似乎更适合推荐场景,那么它相比于传统的最大似然损失函数有什么优势?在其他场景下,比如搜索或者广告,这种损失函数是否也适用?

原文内容

来源:NewBeeNLP‍‍‍‍‍‍

本文约3100字,建议阅读10分钟

本文介绍快手的生成式推荐方案,应用到重排阶段。


本文介绍我们团队在快手生成式推荐上的方案,应用到重排阶段,在多个场景推全,取得了比较显著的收益,文章已经录用到KDD 2024。

  • Non-autoregressive Generative Models for Reranking Recommendation
  • https://arxiv.org/pdf/2402.06871


本文也会针对KDD 2024现场的问题进行解答,有疑问也欢迎大家一起讨论。


重排是推荐链路中的最后一环,直接决定给用户呈现的视频推荐列表。用户对于某个视频的反馈取决于其对应的上下文,比如用户喜欢网球类的运动视频,但是连续给用户推多个和网球比较接近的视频,用户会不再点击后续的视频。所以相比精排、粗排的单点打分,重排会着重考虑视频相互之间的影响和整体收益的最大化。


图1 重排存在的挑战

重排给定精排的 n 个候选,从中选择 m 个视频并给出 m 个视频的展示顺序。重排的候选序列个数为   个,穷举所有候选序列复杂度过高。同时在给定候选下,只有一条序列会曝光给用户,存在样本稀疏问题。相比在推荐系统中常提及的用户针对某个item反馈稀疏的问题,用户对于某个序列的反馈将会更加稀疏。另外,考虑到线上推荐系统海量的实时要求,重排的关键问题则为如何在有限的资源约束和稀疏的训练样本下最大化推荐列表的用户收益 。


现有重排的方法可以大致分为一阶段和两阶段的方法:


  1. 一阶段方法将重排作为检索任务,根据精排模型的分数选择其中top k个视频。这类方法根据每个视频的单点预估分进行微调,再根据微调之后的预估分进行排序。但是这类方法存在逻辑悖论,排序过程后的序列顺序和排序之前的顺序不一致,这使得模型的预估分不再具有参考意义。
  2. 两阶段方法将重排拆解为generator-evaluator框架。Generator负责生成多个合理的序列,evaluator再从其中选择最优的序列。其中的generator可以分为启发式方法和生成式模型。生成式模型通常选择自回归的方式。



在线上部署自回归生成模型存在着诸多挑战:


  • 推理过程耗时高,时间复杂度与序列长度成正比。
  • 训练过程是teacher forcing的形式,但是在推理过程中模型根据前一个timestep生成的视频再进行后续的生成,会存在误差累积的现象。
  • 自回归生成模型只考虑了前序视频的影响,没有考虑后续视频的影响。


因此我们提出了非自回归生成模型,该模型可以在一次推理过程中生成整个推荐视频序列,大大减小了线上模型的推理时间。


图2 自回归生成模型 vs 非自回归生成模型

匹配模型


首先,我们需要解决的问题是如何使得生成模型在推荐场景的训练可以收敛。


  1. 相比文本序列而言,推荐的序列更为稀疏。以n-gram为单位,文本序列存在较多co-occurence,但是在推荐场景,相同序列很少出现在不同的用户推荐结果中。
  2. 在训练过程中每条样本的候选结果并不一致,存在可变词表的问题。


之前的方法Seq2Slate更多通过判别式模型来生成候选,第一次挑选ctr概率最高的item,之后再选择和现有item放在一起ctr概率最高的item,该方法并不直接预估每个item出现的概率。此外,由于在训练数据中大量的排列组合并不存在,所以该模型也会面临比较大的泛化问题。


针对以上问题,借鉴NLP中weight tying的思想,我们设计了匹配模型来解决可变词表问题。具体而言,该匹配模型分为候选编码器和位置编码器两个部分,候选编码器用于有效编码候选表示,位置编码器用于捕获位置特定的信息。我们将不同样本的位置embedding共享,从而提升模型在稀疏样本下的训练效率。


候选视频i经过候选视频编码器之后得到对应的表示   ,每个位置j的embedding随机初始化,之后经过位置编码器之后得到对应的表示   。候选视频 i 和位置 j 两两之间计算内积,最后得到一个   的分布矩阵,其中   具体为位置 j 为第 i 个候选视频的概率。



对比解码方法


自回归生成模型将序列的概率分解为一系列条件概率的连乘:



非自回归生成模型则去掉了生成序列之间的依赖关系,这引入了不同位置的选择之间条件独立的假设:



图3 条件独立假设示例


该假设会导致多峰分布问题。具体而言,图3左图为实际分布,其中有两个合理序列"no problem"和"of course"。在条件独立假设下,右图和左图的边缘分布完全一致,在第一个位置"no"和"of"的概率都是50%,在第二个位置"problem"和"course"的概率也是50%。但是右图出现了"no course"和"of problem"这样不合理的序列。这是条件独立假设所带来的多峰分布问题,会将不同合理序列的部分拼接在一起,从而导致生成的序列不合理。


在每个位置选择候选时,我们考虑每个候选视频在位置   的出现概率   ,同时考虑其与此前已经选择的视频之间的embedding相似度最大值作为正则项   ,该指标用于近似每个候选视频在已经选择的视频条件下的转移概率:



其中   。


不似然损失函数


重排的目标是最大化序列整体的用户收益:



而序列生成的目标是最大似然序列:



线上的曝光序列同时存在用户反馈较好的样本,同时也存在用户反馈不佳的样本,所以最大似然曝光序列与重排的目标之间存在一定差异。相比NLP来说,NLP中用于训练的语料往往符合常见的用语习惯,所以NLP生成的目标是最大化序列的似然函数。然而在推荐中没有最优组合的ground truth,所以该优化目标不适用。因此我们提出了序列不似然损失函数,在最大化似然函数效率高的序列同时最小似然效率低的序列。


给定候选 X 和负向曝光序列 Y ,序列不似然损失函数为:



当   越小时,   将会更小。


实验


首先是在数据集上的离线实验,由于现有推荐场景并没有针对序列生成定义的指标(类似nlp的ppl之类的),ndcg也更多是单点排序的label,更适用于搜索场景而不是推荐场景。另外,Avito的候选数量和生成数量都是5,所以我们在avito指标上采用了现有paper常用的auc和ndcg作为评估。同时,我们也给出了不同方法中generator对应的训练速度和推理速度,对比其他baseline方法,我们的方法在多个指标上都实现了SOTA。且由于我们的非自回归特性,我们的训练和推理速度相比自回归生成模型快很多,和单点排序模型相当。


图4 在Avito数据集上NAR4Rec与现有方法的比较 图5 在快手离线数据集上NAR4Rec与现有方法的比较

在快手离线数据集上,每条样本由60个候选和6个最终展示的item构成,所以我们针对该场景构造了label,如果出现在最后的item中,label为1,否则为0。最后根据二分类的概率预估值排序,计算recall@6和recall@10。


此外,我们在论文中也给出了对比解码方法和序列不似然损失函数的消融实验。


最后是我们在线上ab实验的效果,我们的方法在线上取得了显著了收益。

图6 线上a/b test实验结果

以下是在会场上碰到的问题:


Q: NAR4Rec如何处理序列长度不一致的情况?


由于我们线上设定是固定的长度,所以我们并没有考虑到序列变长的问题。postion embedding设置为固定的长度,在不同的样本之间是共享的,这部分参数也是可以训练的。如果想处理变长的情况,可以设置预测序列生成长度的任务,这方面在nlp上有比较多的相关工作。


Q: NAR4Rec中交换序列label两个item的位置,对于最后的预估会有变化吗?


由于每个位置的item是不一样的,交换两个item的位置,最后的概率矩阵会有所不同,这时候计算得到的loss也就不一样了。值得一提的是,我们并没有在候选编码器(position encoder)中加入候选的顺序信息(position embedding),如果只是交换item的输入顺序,那对最后的预估是没有影响的。


Q: Contrastive decoding仅仅生成一条序列,而不是生成多条序列吗?

是的,在我们的公式里面,contrastive decoding每次都是贪心选取最大值,当然这也可以兼容beam search的框架生成多条可能的候选序列。也可以是top-k sampling的方式加入一些采样的随机性。在线上的generator-evaluator框架中,我们的模型作为其中一路序列生成来源。

Q: 如何区别正向和负向序列?

我们通过后验的互动label(整个序列的label是序列中每个item的单点label加和)来定义正负序列,大于某个阈值则为正向序列,小于某个阈值则为负向序列。


编辑:黄继彦



关于我们

数据派THU作为数据科学类公众号,背靠清华大学大数据研究中心,分享前沿数据科学与大数据技术创新研究动态、持续传播数据科学知识,努力建设数据人才聚集平台、打造中国大数据最强集团军。



新浪微博:@数据派THU

微信视频号:数据派THU

今日头条:数据派THU

我觉得除了co-occurrence,用户行为的多样性和不可预测性也是导致推荐场景序列稀疏的重要原因。每个用户的兴趣和偏好都不同,即使是同一用户在不同时间段的行为也可能存在很大差异,这使得推荐系统很难捕捉到稳定的序列模式。

从数据角度来看,推荐系统的数据通常是隐式反馈,比如点击、观看时长等,这些数据远不如文本数据那样丰富和直接。这就导致了数据本身的稀疏性,从而影响了序列的学习。

我觉得在搜索场景下,序列不似然损失函数可能不太适用。因为搜索的目标是找到与用户query最相关的结果,而不是推荐一个用户可能感兴趣的序列。

可以考虑引入一些全局信息来指导每个位置的生成,比如用户历史行为、当前session信息等,这样可以弥补条件独立假设带来的局部性限制。

序列不似然损失函数的优势在于它考虑了负样本的影响,而传统的最大似然损失函数只关注正样本。在推荐场景中,负样本的信息同样重要,它可以帮助模型学习到哪些序列是不受欢迎的,从而避免生成类似的序列。

我觉得物品的长尾效应也应该是一个重要的因素。爆款商品的出现频率高,而大部分商品的曝光和点击都很少,这使得序列中出现相同item的概率降低,加剧了序列的稀疏性。

或许可以尝试迭代式的生成方式,先用非自回归模型生成一个初始序列,然后根据这个初始序列再进行微调,这样可以逐步 refinement 生成的序列,使其更合理。

我觉得可以借鉴一些其他的非自回归模型的思路,比如Transformer-XL中的相对位置编码,或者BERT中的掩码语言模型,这些方法都可以捕捉到序列中更长距离的依赖关系。

在广告场景下,序列不似然损失函数或许可以尝试。因为广告的目标是最大化点击率或转化率,这与推荐的目标有一定的相似性。不过具体效果还需要实验验证。