一、TransAct [2023]

《TransAct: Transformer-based Realtime User Action Model for Recommendation at Pinterest》

  1. 用于编码 user activity 以进行 next action prediction 的序列模型(sequential models)已成为构建互联网规模个性化推荐系统的主流设计选择。传统的序列推荐方法要么利用端到端学习 realtime user actions ,要么以离线批量生成(batch-generated)的方式单独学习 user representations 。本文:

    • (1):介绍了 Pinterest 用于 Homefeed(我们的个性化推荐产品,也是最大的 engagement surface )的 ranking architecture

    • (2):提出了 TransAct,一个从用户 realtime activities 中提取用户短期偏好的序列模型。

    • (3):描述了我们混合式的排序方法,该方法通过 TransActend-to-end sequential modelingbatch-generated user embeddings 相结合。这种混合式方法使我们能够结合直接从 realtime user activity 学习的响应性优势(advantages of responsiveness),以及从较长时间段内学到的 batch user representations 的成本效益。

    我们描述了消融研究的结果、生产化过程中面临的挑战,以及在线 A/B 实验的结果,该实验验证了我们 hybrid ranking model 的有效性。我们进一步展示了 TransAct 在其他 surfaces (如 contextual recommendationssearch )上的有效性。我们的模型已部署到 PinterestHomefeedRelated PinsNotificationsSearch 的生产环境中。

  2. 近年来,在线内容的激增给用户带来了海量信息,使其难以导航。为了解决这个问题,各行各业都采用了推荐系统来帮助用户从海量选择中找到 relevant items,包括商品、图片、视频和音乐。通过提供个性化推荐,企业和组织可以更好地服务用户,并保持他们对平台的互动。因此,推荐系统对业务至关重要,因为它们通过提高 engagement、销售额和收入来驱动 growth

    作为最大的内容分享和社交媒体平台之一,Pinterest 托管了数十亿个具有丰富上下文和视觉信息的 pins ,并为超过 400 million 用户带来灵感。当访问 Pinterest 时,用户会立即看到如 Figure 1 所示的 Homefeed 页面,该页面是灵感的来源,并占据了平台上大部分的 user engagementHomefeed 页面由一个三阶段的推荐系统驱动,该系统根据 user interests and activities 进行检索、排序和内容混排。

    • 在检索阶段,我们根据多种因子(如用户兴趣、用户关注的画板 boards 等)将 Pinterest上创建的数十亿个 pins 过滤到数千个。

    • 然后,我们使用一个 pointwise ranking model ,通过预测 candidate pins 对用户的个性化相关性来对它们进行排序。

    • 最后,使用一个混合层(blending layer)调整排序结果以满足业务需求。

    实时推荐至关重要,因为它能为用户提供快速的、最新的推荐,改善他们的整体体验和满意度。整合实时数据(如 recent user actions )可以实现更准确的推荐,并增加用户发现 relevant items 的可能性。

    更长的 user action sequences 可以改善 user representation,从而提高推荐性能。然而,在 ranking 中使用长序列给基础设施带来了挑战,因为它们需要大量的计算资源,并可能导致 latency 增加。为了解决这一挑战,一些方法在长用户序列中使用了hashingnearest neighbor search《Search-based user interest modeling with lifelong sequential behavior data for click-through rate prediction》)。其他工作将用户在较长时间范围内的 past actions 编码为一个 user embedding《Pinner-Former: Sequence Modeling for User Representation at Pinterest》)以表示长期用户兴趣。user embedding 特征通常作为 batch features 而生成(例如每天生成),这种特征在不同 applications 中提供具有成本效益的且延迟低的服务。现有 sequential recommendation 方法的局限性在于,它们要么只使用realtime user actions ,要么只使用从长期 user action history 中学到的 a batch user representation

    我们介绍了一种新颖的 realtime-batch hybrid ranking 方法,该方法结合了 realtime user action signalsbatch user representations。为了捕获用户的 realtime actions,我们提出了 TransAct ——一个全新的基于 Transformer 的模块,旨在编码 recent user action sequences 并理解用户的即时偏好。对于在较长时间段内发生的 user actions ,我们将它们转换为 a batch user representation《Pinner-Former: Sequence Modeling for User Representation at Pinterest》)。

    通过结合 TransAct 的表达能力与 batch user embeddingshybrid ranking model 能为用户的 recent actions 提供 realtime feedback,同时也能考虑到他们的长期兴趣。realtime componentbatch component 在推荐准确性上互为补充。这带来了 Homefeed 页面整体用户体验的提升。

    本文的主要贡献总结如下:

    • 我们描述了 Pinnability ,即 PinterestHomefeed production ranking systemHomefeed 个性化推荐产品占据了Pinterest 上大部分的 user engagement

    • 我们提出了 TransAct,一个基于 Transformerrealtime user action sequential model,它能有效地从用户 recent actions 中捕获用户的短期兴趣。我们展示了将 TransActdaily-generated user representations 结合成一个 hybrid model,能在 Pinnability 中获得最佳性能。我们通过全面的消融研究证明了这一设计选择。我们的代码实现是公开可用的(https://github.com/pinterest/transformer_user_action)。

    • 我们描述了在 Pinnability 中实现的 serving optimization,以使得将 TransAct 引入 Pinnability 模型时,计算复杂度增加 65 倍成为可行。具体来说,optimizations 工作是为了使我们之前的基于 CPU 的模型能够在 GPUserving

    • 我们描述了在真实世界推荐系统上使用 TransAct 的在线 A/B 实验。我们展示了在线环境中遇到的一些实际问题,如推荐多样性下降和 engagement 衰减,并提出了解决这些问题的方法。

    核心架构就是 Transformer,其实就是 TransformerPinterest 中的应用。

1.1 相关工作

  1. 推荐系统:

    • 协同过滤(Collaborative filtering: CF)(《An Automatic Weighting Scheme for Collaborative Filtering》《Effective Missing Data Prediction for Collaborative Filtering》《Item-based collaborative filtering recommendation algorithms》)基于这样的假设进行推荐:一个用户会喜欢其他相似用户喜欢的 an item。它利用 user behavior history 来计算 useritem 之间的相似度,并根据相似度来推荐 items 。这种方法受限于 user-item matrix 的稀疏性,并且无法处理从未与任何 items 交互过的 users

      另一方面,因子分解机(《Factorization Machines》)能够处理稀疏矩阵。

    • 最近,深度学习已被用于点击率(click-through rate: CTR)预测任务。

      • 例如,谷歌使用 Wide & Deep《Wide & deep learning for recommender systems》)模型进行 app 推荐。wide 组件通过捕获特征间的 interaction 来实现记忆,而 deep 组件通过学习 categorical featuresembedding 并使用一个前馈网络(feed forward network: FFN)来帮助泛化。

      • DeepFM《DeepFM: a factorization-machine based neural network for CTR prediction》)通过自动学习低阶的和高阶的 feature interactions 进行了改进。

      • DCN《Deep & Cross Network for Ad Click Predictions》)及其升级版 DCN v2《DCN V2: Improved Deep & Cross Network and Practical Lessons for Web-Scale Learning to Rank Systems》)都旨在自动建模显式的 feature crosses

      上述推荐系统在捕获用户短期兴趣方面效果不佳,因为它们只使用了用户的 static features 。这些方法也倾向于忽略用户行为历史中的序列关系,导致用户偏好的一个不够好的 representation

  2. 序列推荐:为了解决这个问题,序列推荐在学术界和工业界都得到了广泛的研究。序列推荐系统使用用户的 behavior history 作为输入,并应用推荐算法向用户推荐合适的 items。序列推荐模型能够捕获用户在较长时间段内的长期偏好,类似于传统的推荐方法。此外,它们还具有额外优势,即:能够考虑用户不断变化的兴趣,从而实现更高质量的推荐。

    序列推荐通常被视为 next item prediction 任务,其目标是根据用户过去的 action sequence 预测其 next action。我们受到先前序列推荐方法(《Behavior Sequence Transformer for E-Commerce Recommendation in Alibaba》)在将用户过去行为编码为 a dense representation 方面的启发。

    • 一些早期的序列推荐系统使用机器学习技术,如马尔可夫链(《Fusing similarity models with markov chains for sparse sequential recommendation》)和 session-based KNN《Modeling personalized item frequency information for next-basket recommendation》)来模拟用户行为历史中 interactions 之间的时间依赖关系。这些模型因为仅仅通过结合来自不同 session 的信息而无法完全捕获用户的长期模式而受到批评。

    • 最近,深度学习技术如 RNN 在自然语言处理中显示出巨大成功,并在序列推荐中变得越来越流行。因此,许多基于深度学习的序列模型(《Sequential user-based recurrent neural network recommendations》《Session-based recommendations with recurrent neural networks》《Improved recurrent neural networks for session-based recommendations》《Deep interest evolution network for click-through rate prediction》)使用 RNN 取得了卓越的性能。

    • CNN 广泛用于处理时间序列数据和图像数据。在序列推荐的背景下,基于 CNN 的模型可以有效学习用户最近交互的 a set of items 内的依赖关系,并据此进行推荐(《Personalized top-n sequential recommendation via convolutional sequence embedding》《3D convolutional networks for session-based recommendation with content features》)。

    • 注意力机制起源于神经机器翻译任务,它对 input sentences 中不同部分对 output words 的重要性进行建模。自注意力是一种已知用于权衡input sequence 不同部分重要性的机制。已有更多推荐系统使用注意力(《Deep Interest Network for Click-Through Rate Prediction》)和自注意力(《Behavior Sequence Transformer for E-Commerce Recommendation in Alibaba》《Self-attentive sequential recommendation》《Time interval aware self-attention for sequential recommendation》《BERT4Rec: Sequential recommendation with bidirectional encoder representations from transformer》《Next item recommendation with self-attentive metric learning》)。

    许多先前的工作仅使用公共数据集进行离线评估。然而,在线环境更具挑战性和不可预测性。由于问题表述的差异,我们的方法无法直接与这些工作进行比较。我们的方法类似于 CTR Prediction 任务。

    • Deep Interest Network: DIN 使用注意力机制来建模 CTR prediction 任务中用户过去行为内的依赖关系。

    • 阿里巴巴的 Behavior Sequence Transformer: BSTDIN 的改进版本,与我们的工作密切相关。他们提出使用 Transformer 从用户行为中捕获用户兴趣,强调了行为顺序的重要性。

    然而,我们发现 positional information 并没有增加太多价值。我们发现其他设计,如更好的 early fusionaction type embedding,在处理序列特征时是有效的。

1.2 方法论

  1. 在本节中,我们介绍 TransAct,我们的 realtime-batch hybrid ranking model。我们将从 PinterestHomefeed 排序模型 Pinnability 的概述开始。然后,我们描述如何在 Pinnability 中使用 TransActrealtime user action sequence features 进行编码,以完成排序任务。

1.2.1 预备知识: Homefeed Ranking Model

  1. Homefeed 排序中,我们将推荐任务建模为一个 pointwise multi-task prediction 问题,可以定义如下:给定一个用户 u 和一个pin p,我们构建一个函数来预测用户 ucandidate pin p 执行不同操作的概率。不同操作的集合包含 positive actionsnegative actions,例如,clickrepin (该用户将一个已有的 pin 保存到另一个 board 上)和 hide

    我们构建了 Pinnability,即 PinterestHomefeed 排序模型,来解决上述问题。其高层架构是一个 Wide & Deep 模型(《Wide & deep learning for recommender systems》)。Pinnability 模型利用各种类型的输入信号,如 user signalspin signalscontext signals。这些输入可以有不同的格式,包括 categorical featuresnumerical featuresembedding features

    • 我们使用 embedding layerscategorical features 投影为 dense features ,并对 numerical features 进行 batch normalization

    • 然后,我们使用一个 full-rankDCN V2《DCN V2: Improved Deep & Cross Network and Practical Lessons for Web-Scale Learning to Rank Systems》)来应用 feature cross ,以显式地建模 feature interactions

      这里的 full-rank 指的是 DCN V2 中一种不使用低秩近似的、完整参数规模的交叉特征学习方式,它能够更充分地建模特征间的高阶交互。

      DCN V2layer 公式(full-rank 版本)为:

      xl+1=x0(Wlxl+bl)+xl

      其中 Wl,bl 为待学习的参数。

      low-rank 版本使用两个低秩矩阵 Ul,Vl 来逼近 Wl

      xl+1=x0(Ul(Vlxl)+bl)+xl

      .

    • 最后,我们使用带有 a set of output action heads H={h1,h2,,hk} 的全连接层来预测用户在 candidate pin p​ 上的行为。每个 head 映射到一个行为。

    Figure 2 所示,我们的模型是一个 realtime-batch 混合模型,通过 realtime 方法(TransAct)和 batch 方法(PinnerFormer)对用户行为历史特征进行编码,并针对排序任务进行优化(《Rethinking Personalized Ranking at Pinterest: An End-to-End Approach》)。

  2. 每个训练样本是 (x,y),其中 x 代表一组特征,y{0,1}|H|y 中的每个元素对应于 H 中的一个 action headlabelPinnability 的损失函数是一个加权的交叉熵损失,旨在优化 multi-label classification 任务。我们将损失函数表述为:

    L=wu×hH{wh×[yhlogf(x)h+(1yh)(1logf(x)h)]}

    其中:

    • f(x)(0,1)H,且 f(x)hhead h 的输出概率。yh{0,1}head h 上的 ground truth

    • 我们对每个 head 的输出 f(x)h 的交叉熵应用一个权重 whwh 使用 ground truth y 和一个 label weight matrix MR|H|×|H| 计算如下:

      wh=aHMh,a×ya

      label weight matrix M 作为每个 action 对每个 head 的损失项贡献的控制因子。注意,如果 M 是对角矩阵,则上述公式简化为标准的 multi-head 二元交叉熵损失。但凭经验选择的 label weights M 能显著提高性能。

      参考附录部分。

    • 此外,每个训练样本由一个依赖于用户的权重 wu 加权,该权重由用户属性决定,例如用户状态(user state)、性别和位置(location)。我们通过将 user state 权重、用户性别权重、以及用户位置权重相乘来计算 wu

      wu=wstate×wlocation×wgender

      这些权重根据特定的业务需求进行调整。

      user state 用于将用户根据活跃度进行分组。例如:用户每天都有 engagement 的放置在一组、用户一个月才有一次 engagement 的放置在另外一组。

      这进一步带来了超参数调优的复杂性。

    这里引入了非常复杂的 loss 权重,使得离线评估变得更困难。因为不同的 loss 权重会聚焦于不同的 task 、不同的用户组。

1.2.2 Realtime User Action Sequence Features

  1. 用户过去的 action history 自然是一个可变长度特征——不同的用户在平台上有不同数量的 past actions

    虽然更长的 user action sequence 通常意味着更准确的 user interest representation,但在实践中,包含所有用户行为是不可行的。因为获取 user action features 和执行 ranking model inference 所需的时间也会大幅增长,这反过来会损害用户体验和系统效率。考虑到基础设施成本和延迟要求,我们选择在每个用户的序列中包含最近的 100 个行为。对于行为少于 100 的用户,我们使用 0 将特征填充到长度 100user action sequence feature 按时间戳降序排序,即第一个元素是最近的行为。

    user action sequence 中的所有行为都是 pin-level actions 。对于每个行为,我们使用三个主要特征:行为的 timestamp 、行为类型,以及 pin32-dimensional PinSage embedding《Graph Convolutional Neural Networks for Web-Scale Recommender Systems》)。PinSage 是一个紧凑的 embedding,编码了 pin 的内容信息。

1.2.3 TransAct

  1. 与静态特征不同,realtime user action sequence 特征 S(u)=[a1,a2,,an] 使用一个专门的子模块 TransAct 来处理。TransAct 从用户的历史行为中提取 sequential patterns ,并预测 (u,p) relevance scores

    注意:这里的 action pin embedding 是预训练好的,而不是 training from ID 而来的。

  2. Feature encoding:对于用户曾经交互过的 pinspins 的相关性可以通过用户行为历史中对其采取的 action type 来确定。例如,被用户转存到其画板的 pin,相比较于被查看的 pin,通常被认为前者更相关。如果一个pin被用户隐藏,其相关性应该非常低。为了整合这一重要信息,我们使用 trainable embedding tablesaction types 投影到低维向量。然后,user action type sequence 被投影到一个 user action embedding matrix WactionsR|S|×daction,其中 dactionaction type embedding 的维度。

    如前所述, user action sequencepin的内容由 PinSage embedding 来表示。因此, user action sequence 中所有pin的内容构成一个矩阵 WpinsR|S|×dpinsagefinal encoded user action sequence feature 为:

    CONCAT(Wactions,Wpins)R|S|×(dpinsage+daction)

    这里没有使用 positional encoding。从原理上讲,不加位置编码的 Transformer 确实无法感知顺序,这是该架构的设计缺陷。但在 Pinterest的具体应用场景中,实验证明顺序信息对预测目标几乎没有帮助,因此可以安全地省略。

  3. Early fusion:直接在排序模型中使用 user action sequence features 的一个独特优势是,我们可以显式地建模 candidate pinuser’s engaged pins 之间的交互。推荐任务中的早期融合(early fusion )是指在推荐模型的早期阶段合并 user and item features。通过实验,我们发现早期融合是提高排序性能的重要因素。我们评估了两种早期融合方法:

    • append:将 candidate pinPinSage embedding 追加到 user action sequence 中,作为序列的最后一个条目,类似于BST。使用零向量作为 candidate pin 的虚拟操作类型。

    • concat:对于 user action sequence 中的每个行为,将 candidate pinPinSage embedding 与用户行为特征拼接起来。

      对于 concat,这意味着 candidate pinPinSage embedding 需要拷贝 |S| 份。

    根据离线实验结果,我们选择 concat 作为我们的早期融合方法。得到的带有早期融合的序列特征是一个二维矩阵 UR|S|×d,其中 d=(daction+2dPinSage)

  4. Sequence Aggregation Model:准备好用 user action sequence feature U 后,下一个挑战是高效地聚合 user action sequence 中的所有信息,以表示用户的短期偏好。工业界用于序列建模的一些流行模型架构包括 CNNRNN 以及最近的Transformer 等。我们尝试了不同的序列聚合架构,并选择了基于 Transformer 的架构。我们采用了标准的 Transformer encoder,包含 2 encoder layers 和一个 head 。前馈网络的 hidden dimension 记为 dhidden。这里没有使用 positional encoding,因为我们的离线实验表明 position 信息无效。

  5. Random Time Window Mask:对用户所有近期行为进行训练可能会导致“兔子洞”效应(rabbit hole effect),即模型推荐的内容与用户近期互动的内容过于相似。这损害了用户 Homefeed 的多样性,这对长期用户留存是有害的。为了解决这个问题,我们使用 user action sequence 的时间戳为 Transformer encoder 构建一个 time window mask 。该 mask 在应用 self-attention 机制之前,过滤掉 input sequence 中的某些位置。在每个前向传播过程中,从 0 ~ 24 hours 之间均匀采样一个随机的 time window T。所有在 (trequestT,trequest) 内发生的行为被掩码,其中 trequest 代表接收 ranking request 的时间戳。需要注意的是,random time window mask 仅在训练期间应用,而在推理时不使用掩 mask

    即,将最近 1 天之内的最近 T 时刻内的 actions 屏蔽掉。但是这个 T 如何选择,以及效果如何?论文并未详细说明。

  6. Transformer Output CompressionTransformer encoder 的输出是一个矩阵 O=(o0:o|S|1)R|S|×d。我们只取前 K(o0:oK1),将它们与 max pooling vector MAXPOOL(O)Rd 拼接,然后展平为一个向量 zR(K+1)d

    • K 个输出列捕获用户最近的兴趣。

      因为最近的行为更靠前。

    • MAXPOOL(O) 表示用户在 S(u) 上的长期偏好。

    由于输出足够紧凑,可以很容易地使用 DCN v2feature crossing layer 集成到 Pinnability 框架中。

1.2.4 Model Productionization

  1. Model Retrainingretraining 对推荐系统很重要,因为它允许系统持续适应随时间变化的用户行为和偏好。如果没有 retraining ,推荐系统的性能会随着用户行为和偏好的变化而下降,导致推荐不太准确。当我们在排序中使用 realtime features 时,这一点尤其如此。模型对时间更敏感,需要更频繁地 retrain。否则,模型可能会在几天内变得过时,导致预测不太准确。我们每周从头开始重训练 Pinnability 两次。我们发现,这种 retraining 频率对于确保一致的 engagement rate 并同时保持可管理的训练成本至关重要。我们将在实验章节深入探讨 retraining 的重要性。

  2. GPU servingPinnability with TransAct 在浮点操作(floating point operations )方面,与其前身相比,计算复杂度高出 65 倍。如果在模型推理方面没有任何突破,我们的模型 serving cost 和延迟将增加同样的规模。GPU model inference 使我们能够以 neutral latency and cost来服务 Pinnability with TransAct

    GPU 上服务 Pinnability 的主要挑战是 CUDA kernel launch 开销。在 GPU 上启动 operations 的成本非常高,但这通常被较长的 GPU 计算时间所掩盖。然而,这对于 Pinnability GPU model serving 在两个方在存在问题。

    • 首先,Pinnability 和一般的推荐模型处理数百个特征,这意味着有大量的 CUDA kernels

    • 其次,online serving 期间的 batch size 很小,因此每个 CUDA kernel 需要的计算很少。

    对于大量的 small CUDA kernelslaunching 开销远高于实际计算的开销。我们通过以下优化解决了这个技术挑战:

    • Fuse CUDA kernels:一个有效的方法是尽可能地融合 operations。我们利用标准的深度学习编译器(如,nvFuser),但经常发现许多剩余 operations 需要人工干预。一个例子是我们的 embedding table lookup module ,它由两个计算步骤组成:raw idtable indexlookup,以及 table indexembeddinglookup。由于特征数量庞大,这个操作会重复数百次。我们通过利用 cuCollections 支持 GPUraw idshash tables,并实现一个自定义的 consolidated embedding lookup module,将多个特征的 lookup 合并为一次 lookup,从而显著减少了 operations 数量。结果,我们将与 sparse features 相关的数百个 operations 减少到了一个。

    • Combine memory copies:对于每次 inference,数百个特征作为单独的张量从 CPU memory 拷贝到 GPU memory。调度数百个 tensor copies 的开销成为瓶颈。为了减少 tensor copy 操作的数量,我们将多个张量合并成一个 continuous buffer,然后再从 CPU 传输到 GPU。这种方法将单独传输数百个 tensors 的调度开销减少到只传输一个 tensor

    • Form larger batches:对于 CPU-based inference,较小的 batch 更受欢迎,以增加并行度并减少延迟。然而,对于 GPU-based inference ,较大的 batch 效率更高。这导致我们重新评估了我们的分布式系统设置。最初,我们使用了一种 scatter-gather 架构,将请求拆分成 small batches,并在多个叶节点上并行运行以获得更好的延迟。然而,这种设置不适用于 GPU-based inference。相反,我们直接使用原始请求中的 larger batches。为了弥补缓存容量的损失,我们实现了一个同时使用 DRAMSSDhybrid cache

    • Utilize CUDA graphs:我们依赖 CUDA Graphs 来完全消除剩余的 small operations 开销。CUDA Graphmodel inference 过程捕获为 operations 的一个静态图,而不是单独调度每个 operations ,从而使得 computation 能够作为一个单一单元执行,没有任何 kernel launching 开销。

  3. Realtime Feature Processing:当用户执行一个 action 时,一个基于 Flinkrealtime feature processing application 会消费 user action Kafka streams(这个 streams 由前端事件所生成)。它验证每个 action record,检测并合并重复项,并管理来自多个数据源的任何时间差异(time discrepancies)。然后,该应用程序物化(materializes)这些特征并将它们存储在 Rockstore 中。在 serving 时,每个 Homefeed logging/serving request 都会触发 processorsequence features 转换为模型可以使用的格式。

1.3 实验

  1. 在本节中,我们将展示 TransAct 的广泛离线和在线 A/B 实验结果。我们使用 Pinterest 的内部训练数据将 TransAct 与基线模型进行比较。

  2. 数据集:我们从三周的 Pinterest Homefeed view log (FVL) 中构建离线训练数据集。模型在前两周的 FVL 上进行训练,并在第三周进行评估。

    • 训练数据根据 user statelabels 进行采样。例如,我们根据 label actions 的统计分布和重要性为其设计采样比率。

      注意,离线的评估数据集是从 FVL 中随机采样以代表真实世界流量的真实分布。这跟训练数据集不同。

    • 此外,由于用户只与他们 Homefeed 页面上显示的一小部分 pins 进行交互,大多数训练样本是负样本。为了平衡高度偏斜的数据集并提高模型准确性,我们对负样本进行降采样,并在正负样本之间设置固定比率。

    我们的训练数据集包含 3 billion 个训练实例,涉及 177 million users720 million pins

    在本文中,我们使用 Pinterest 数据集进行所有实验。我们不使用公共数据集,因为它们缺乏 TransAct 所需的必要 realtime user action sequence metadata features,例如 item embeddingsaction types 。此外,它们与我们提出的 realtime-batch hybrid model 不兼容,后者同时需要 realtime and batch user features 。它们也无法在线 A/B 实验中进行测试。

  3. 超参数:

    • realtime user sequence 长度为 |S|=100action embedding 维度 daction=32

    • encoded sequence feature 被馈入一个由 2 transformer blocks 组成的 Transformer encoder ,默认 dropout rate0.1transformer encoder layer 中的前馈网络维度为 dhidden=32,未使用 positional encoding

    • 实现使用 PyTorch

    • 我们使用带有学习率调度器的 Adam optimizer 。学习率从带有 5000 步的 warm-up phase 开始,逐渐增加到 0.0048 ,最后通过余弦退火降低。

    • batch size = 12000

1.3.1 离线实验

  1. 评估指标:离线评估数据与训练数据不同,是从 FVL 中随机采样以代表真实世界流量的真实分布。通过这种采样策略,离线评估数据能够代表整体人群,减少评估结果的方差。

    除了 sampling bias ,我们还在离线评估数据中消除了 position biasposition bias 是指推荐列表顶部的 items 比较低位置的 items 获得更多关注和互动的趋势。这在评估 ranking model 时可能是一个问题,因为它会扭曲评估结果,使得难以准确评估模型的性能。为了避免 position bias ,我们在很小一部分 Homefeed recommendation sessions 中随机化 pins 的顺序。这是在向用户展示推荐之前通过打乱 recommendations 顺序来实现的。我们收集这些 randomized sessionsFVL,并仅使用 randomized data 进行离线评估。

    我们的模型以 HIT@3 进行评估。一个 chunk c=[p1,p2,,pn] 指的是同时推荐给用户的一组 pins。排序模型的每个输入实例都与一个 user id uid、一个 Pin ID pid 和一个 chunk ID cid 相关联。evaluation output(uid,cid) 分组,使其包含来自同一 ranking request 的模型输出。我们通过最终排序得分 S 对来自同一 ranking requestpins 进行排序,该得分是Pinnability output heads f(x) 的线性组合。

    S=hHuhf(x)h

    uh 是可调的超参数,用于控制不同用户行为(如 clickrepinhide 等)在最终排序中的相对重要性。论文并未给出该值怎么设置。

    然后,我们在每个 chunk 中取排名前 Kpins,并计算所有 headshit@K,记为 βc,h,其定义为:排名前 Kpins 中,head h 的标签为 1 的数量。例如,如果一个 chunkS 排序之后为 c=[p1,p2,p3,,pn] ,并且用户 repinsp1p4,那么当 K=3 时,repinhit@Kβc,repin=1

    我们按如下方式计算每个 head haggregated HIT@3

    HIT@3/h=uUcCuβc,h|U|

    其中:U 为所有用户的集合;Cu 为用户 uchunks 集合。

    这个指标太复杂了,而且还有一堆超参数,与业务强耦合。这使得评估结果不太置信,因为换一组超参数(例如 uh )那么评估结果可能就不一样了。

    需要注意的是,对于表示 positive engagement 的行为,如 repinclick,较高的 HIT@K 分数意味着更好的模型性能。相反,对于表示 negative engagement 的行为,如 hide,较低的 HIT@K/hide 分数是可取的。

    Pinterestnon-core user 被定义为在过去 28 天内没有主动将pin保存到画板的用户。non-core user 通常活跃度较低,因此由于他们有限的 historical engagement ,提高他们的 recommendation relevance 是一个挑战。这也被称为推荐中的冷启动用户问题。尽管存在挑战,但保留 non-core users 很重要,因为他们在维护多样化和蓬勃发展的社区、促进平台长期增长方面发挥着至关重要的作用。

    所有报告的结果均具有统计显著性(除非另有说明, p-value<0.05)。

  2. 结果:我们将 TransAct 与现有的序列推荐方法进行比较。

    • 第一个基线是将 sequence features 作为其 wide features 一部分的 WDL 模型。由于 sequence features 的规模, feature cross layer 中的参数数量会呈二次方增长,使得训练和 online serving 都不可行。因此,我们使用 user actionsPinSage embeddings 的均值池化来编码序列。

    • 第二个基线是阿里巴巴的 sequence transformer Transformer: BST 模型。我们在这里训练了 2BST 模型变体:一个只使用用户序列中的 positive actions ,另一个使用所有行为。

    我们选择不将我们的结果与 DIN 进行比较,因为 BST 已经证明了其优于 DIN。此外,我们没有与 BERT4Rec 等变体进行比较,因为问题表述不同,直接比较不可行。

    模型比较的结果呈现在 Table 1 中。

    • 很明显,BSTTransAct 优于 WDL 模型,证明了使用专门的序列模型通过 real-time user action sequence feature 有效捕获短期用户偏好的必要性。

    • BST 在仅仅编码 positive actions 时表现良好,然而,它难以区分 negative actions 。相比之下,TransAct 优于 BST ,特别是在 hide prediction 方面,因为它能够通过编码 action types 来区分不同的行为。

    • 此外,TransActHIT@3/repin 方面相比 BST 也表现出改进,这归功于其有效的 early fusionoutput compression 设计。

    • 所有组的一个共同趋势是,non-core users 的性能优于 all users,这是由于 realtime user action features 对于平台上 engagement history 有限的用户至关重要,因为 realtime user action features 为模型学习 non-core users 的偏好提供了唯一的信息来源。

1.3.2 消融研究

  1. Hybrid ranking model:首先,我们通过检查 TransAct(realtime component)Pinnerformer(batch component) 的各自影响,研究 realtime-batch hybrid design 的效果。Table 2 显示了从包含所有 user features 的模型中移除每个组件后,离线性能的相对下降。

    • TransAct 捕获用户的即时兴趣,这对用户的 overall engagement 贡献最大;而 PinnerFormer (PF) 从用户的历史行为中提取用户的长期偏好。

    • 我们观察到,TransAct 是模型中最重要的 user understanding feature,但我们仍然从 PinnerFormer 捕获的 large-scale training 和长期兴趣中看到价值,这表明 longer-term batch user understanding 可以补充用于推荐的 realtime engagement sequence

    • Table 2 的最后一行,我们展示了去掉除 TransActPinnerFormer 之外的所有其他 user features 仅导致相对较小的性能下降,证明了我们的 realtime sequence modelpre-trained batch model 所结合的效果。

  2. Base sequence encoder architecture:我们对处理 realtime user sequence features 的不同序列模型进行了离线评估。我们使用不同的架构来编码来自用户 realtime actionsPinSage embedding sequence

    • Average Pooling:使用 PinSage embedding sequence 的平均值来表示用户的短期兴趣。

    • CNN:使用具有 256 个输出通道的 1-d CNN 来编码序列。Kernel size = 1, stride = 1

    • RNN:使用 2 RNN layershidden size = 256,来编码 PinSage embedding sequence

    • LSTM:使用 LSTM,这是一种更复杂的 RNN 版本,通过使用 memory cellsgating 更好地捕获长期依赖关系。我们使用 2 LSTM layershidden size = 256

    • 原始 Transformer:接使用 Transformer encoder模块来编码 PinSage embedding sequence 。我们使用 2 transformer encoder layershidden size = 32

    baseline 组是不含 realtime user sequence featurePinnability 模型。从 Table 3 中,我们了解到:

    • 使用 realtime user sequence features,即使使用简单的平均池化方法,也能改善 engagement

    • 令人惊讶的是,更复杂的架构如 RNNCNNLSTM 并不总是比平均池化表现更好。

    • 然而,最佳性能是通过使用原始 Transformer 实现的,因为它显著降低了 HIT@3/hide 并提高了 HIT@3/repin

  3. Early fusion and sequence length selection:如正文章节所讨论的,early fusionranking model 中起着至关重要的作用。通过引入 early fusion ,模型不仅可以考虑用户行为历史中不同 items 之间的依赖关系,还可以显式地学习 ranking candidate pin 与用户过去互动过的每个pin之间的关系。

    更长的 user action sequence 自然比短序列更具表达力。为了学习 input sequence 长度对模型性能的影响,我们在不同的 user sequence input 长度上评估了模型。

    Figure 4 的分析表明:

    • 序列长度与性能之间存在正相关关系。性能提升的速度相对于序列长度是次线性(sub-linear)的。

    • 使用 concatenation 作为 early fusion 方法被证明优于使用 appending

    因此,最佳 engagement gain 可以通过使用最大可用序列长度、并采用 concatenation 作为 early fusion 方法来实现。

  4. Transformer 超参数:我们通过调整 TransActTransformer encoder 的超参数来优化它。如 Figure 5 所示:增加 Transformer 层数与 feed forward 维度会导致更高的延迟,但也带来更好的性能。

    虽然使用 transformer layers = 4feed forward dimension = 384 获得了最佳性能,但这是以延迟增加 30% 为代价的,这无法满足延迟要求。为了平衡性能和用户体验,我们选择了 transformer layers = 2feed forward dimension = 32

  5. Transformer output compressionTransformer encoder 产生 ORd×|S|,其中每一列对应一个 input user action。然而,直接将 O 馈入 DCN v2 layers 进行 feature crossing 会导致时间复杂度过高,这与 input size 成二次方关系。

    为了解决这个问题,我们探索了几种压缩 Transformer output 的方法。Table 4 显示,结合前 K 列并对整个序列应用最大池化可以获得最高的 HIT@3/repin。前 K 列代表最近互动过的 pins ,而最大池化是整个序列的 aggregated representation。尽管使用所有列略微提高了 HIT@3/hide,但前 K 列和 max pooling 的组合在性能和延迟之间提供了良好的平衡。

    我们对 TransAct 使用 K=10

1.3.3 在线实验

  1. 与离线评估相比,推荐任务中在线实验的一个优势是它们可以在 live user data 上运行,允许在更真实和动态的环境中测试模型。对于在线实验,我们 serve 了在 2-week offline training dataset 上训练的排序模型。我们将对照组设置为没有 realtime user sequence featuresPinnability 模型。实验组是带有 TransActPinnability 模型。每个实验组 serve 了访问 Homefeed 页面的总用户的 1.5%

  2. 评估指标:在 Homefeed 上,最重要的指标之一是 Homefeed repin volumerepin 是用户发现 recommended pins relevant 的最强指标,并且通常与用户在 Pinterest 上花费的时间正相关。根据经验,我们发现离线 HIT@3/repin 通常与 Homefeed online repin volume 非常一致。

    另一个重要指标是 Homefeed hide volume,它衡量用户从其推荐中选择 hide or remove 所推荐的 items 的比例。

    • hide rates 表明系统推荐的是用户认为不相关的 items,这可能导致糟糕的用户体验。

    • 相反,低 hide rates 表明系统推荐的是用户认为相关且有吸引力的 items ,这可以带来更好的用户体验。

  3. Online engagement:我们观察到在排序中引入 TransAct 后,在线指标有显著提升。Table 5 显示:

    • 我们将 Homefeed repin volume 提高了 11%

      值得注意的是,non-core usersengagement gains 更高,因为他们没有完善的 user action history 。而 realtime features 可以在短时间内捕获到他们的兴趣。使用 TransAct 之后,Homefeed 页面能够快速响应并及时调整排序结果。

    • 我们看到 hide volume 下降,并且在 Pinterest 上花费的总时间增加。

  4. Model retrain:在 TransAct group 中观察到一个挑战:特定用户的 engagement metrics 随时间衰减。如 Figure 6 所示,我们将 TransAct 相对于基线的 Homefeed repin volume 增益进行比较,两组模型要么都固定,要么都重训练。我们观察到:

    • 如果TransAct 不进行重训练,尽管在实验的第一天有显著更高的 engagement,但在两周的时间里,它逐渐下降到较低水平。

    • 然而,当 TransAct 在新数据上重训练时,与不重训练模型相比,engagement 有显著提升。

    这表明使用实时特征的 TransAct 对用户行为的变化高度敏感,需要频繁重训练。因此,使用 TransAct 时,期望有较高的重训练频率。在生产环境中,我们将重训练频率设置为每周两次,并且这个重训练频率已被证明能保持 engagement rate 稳定。

  5. Random time window masking:观察到的另一个挑战是推荐多样性(diversity)的下降。多样性衡量了推荐给用户的 items 的广度和多样性。现有文献发现:多样性与 increasing user visiting frequency 相关。然而,多样性并不总是可取的,因为它可能导致相关性( relevance )下降。因此,在推荐的多样性和相关性之间找到正确的平衡至关重要。

    Pinterest ,我们有一个 28k-node 的分层的 interest taxonomy,对所有 Pins 进行分类。top-level interests 是粗粒度的。top-level interests 的一些例子是艺术(art)、美妆(beauty)和运动(sport)。这里,我们将展示多样性衡量为每个用户查看的 unique top-level interests 数量的总和。我们观察到,将 TransAct 引入 Homefeed ranking 后,impression diversity 下降了 2%3% 。解释是,通过添加 user action sequence feature,排序模型学会了优化用户的短期兴趣。而由于主要关注短期兴趣,推荐的多样性下降了。

    我们通过在正文章节中提到的 Transformer 中使用 random time window mask 来缓解多样性下降。这种 random masking 鼓励模型聚焦于除用户最近互动的 items 之外的内容。通过这种设计,多样性指标的回撤被控制在仅 -1%,而没有影响像 repin volume 这样的相关性指标。

    我们也尝试了在 Transformer encoder layer 中使用更高的 dropout rate,以及在 user action sequence input中随机掩码固定百分比的 actions。然而,这些方法都没有产生比使用 random time window masking 更好的结果。它们以牺牲 engagement 为代价增加了 diversity

1.4 讨论

  1. Feedback Loop:我们的在线实验中发现的一个有趣现象是,TransAct 的真正潜力未被完全捕获。我们观察到,当该模型作为全流量的 production Homefeed ranking model 部署时,性能有更大的提升。这是由于 positive feedback loop 的影响:当用户体验到基于 TransAct 构建的响应更快的 Homefeed 时,他们倾向于交互更多相关内容,从而导致他们的行为发生变化(例如,更多 clicksrepins)。这些行为变化导致 realtime user sequence feature 的转变,然后这些特征被用来生成新的训练数据。使用这些更新后的数据重新训练 Homefeed ranking model 会产生正向的复合效应(positive compounding effect),导致更高的 engagement rate 和更强的 feedback loop。这种现象类似于文献 《Hidden Technical Debt in Machine Learning Systems》中的 "direct feedback loops",指的是模型直接影响其自身未来训练数据的选择,并且如果它们随着时间的推移逐渐发生,则更难检测。

  2. TransAct in Other TasksTransAct 的能力不仅限于排序任务。它也已成功应用于 contextual recommendationsearch ranking 场景。

    • TransAct 被用于 Related Pins Ranking,这是一个 contextual recommendation model,用于:基于给定一个 query pin 的条件下,提供 personalized recommendations of pins

    • TransAct 还被应用于 PinterestSearch Ranking 系统和 Notification Ranking

    Table 6 展示了 TransAct 在各种用例中的有效性及其在更多真实世界应用中推动 engagement 的潜力。

1.5 结论

  1. 在本文中,我们提出了 TransAct ,一个基于 Transformerrealtime user action model,通过编码用户的 realtime actions 来有效捕获用户的短期兴趣。我们新颖的 hybrid ranking model 融合了 realtimebatch 两种用户行为编码方式的优势,并已成功部署在 PinterestHomefeed recommendation system 中。我们的离线实验结果表明,TransAct 显著优于 SOTA 的推荐系统基线。此外,我们还讨论并解决了在线实验期间面临的挑战,如高 serving 复杂度、多样性下降、以及 engagement 衰减。TransAct 的能力和有效性使其适用于其他任务,如 contextual recommendationssearch ranking

二、附录

2.1 Head Weighting

  1. 我们在这里说明 head weighting 如何帮助 multi-task prediction task。考虑一个使用 3 actions 的模型示例:repins, clicks, and hideslabel weight matrix 设置为 Table 7

    hide 是一个强烈的 negative action ,而 repinclick 都是 positive engagement ,尽管 repin 被认为是比 click 更强的 positive signal。我们手动设置 M 的值,以控制 cross-entropy loss 上的权重。在这里,我们给出一些如何实现这一点的例子。

    • 对于一个 pin,如果一个用户只隐藏了它 (yhide=1),并且没有 repinclickyrepin=yclick=0)。那么我们希望通过将 Mrepin,hideMclick,hide 设置为较大的值,来更严厉地惩罚模型预测 repinclick

      wrepin=Mrepin,hideyhide=100wclick=Mclick,hideyhide=100
    • 对于一个 pin,如果一个用户只 repin 了它(yrepin=1),但没有 hideclickyhide=yclick=0)。我们希望惩罚模型如果它预测 hide

      whide=Mhide,repinyrepin=5

      但我们不需要惩罚模型如果它预测 click,因为用户可以同时 repinclick 同一个 Pin

      wclick=Mclick,repinyrepin=0

      .

  2. Positional Encoding:我们尝试了几种 positional encoding 方法:从头学习 positional encoding 、正弦 positional encoding ,以及 《Behavior Sequence Transformer for E-Commerce Recommendation in Alibaba》中提出的线性投影 positional encodingTable 8 显示 positional encoding 没有增加太多价值。

  3. Model EfficiencyTable 9 显示了我们模型效率的更详细信息,包括 flopsmodel forward latency per batchbatch size = 256 )和 serving 成本。serving 成本与 forward latency 并非线性相关,因为它还与 server 配置有关,如 time out limitbatch size 等。GPU serving optimization 对于保持低延迟和低 serving 成本非常重要。