一、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):描述了我们混合式的排序方法,该方法通过 TransAct 将 end-to-end sequential modeling 与 batch-generated user embeddings 相结合。这种混合式方法使我们能够结合直接从 realtime user activity 学习的响应性优势(advantages of responsiveness),以及从较长时间段内学到的 batch user representations 的成本效益。

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

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

    作为最大的内容分享和社交媒体平台之一,Pinterest 托管了数十亿个具有丰富上下文和视觉信息的 pins ,并为超过 400 million 用户带来灵感。当访问 Pinterest 时,用户会立即看到如 Figure 1 所示的 Homefeed 页面,该页面是灵感的来源,并占据了平台上大部分的 user engagement。Homefeed 页面由一个三阶段的推荐系统驱动,该系统根据 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 增加。为了解决这一挑战,一些方法在长用户序列中使用了hashing 和 nearest 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 signals 和 batch 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 embeddings,hybrid ranking model 能为用户的 recent actions 提供 realtime feedback,同时也能考虑到他们的长期兴趣。realtime component 和 batch component 在推荐准确性上互为补充。这带来了 Homefeed 页面整体用户体验的提升。

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

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

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

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

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

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

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 来计算 user 与 item 之间的相似度,并根据相似度来推荐 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 features 的 embedding 并使用一个前馈网络(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: BST 是 DIN 的改进版本,与我们的工作密切相关。他们提出使用 Transformer 从用户行为中捕获用户兴趣,强调了行为顺序的重要性。

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

1.2 方法论

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

1.2.1 预备知识: Homefeed Ranking Model

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

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

    • 我们使用 embedding layers 将 categorical features 投影为 dense features ,并对 numerical features 进行 batch normalization 。

    • 然后,我们使用一个 full-rank 的 DCN 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 V2 的 layer 公式(full-rank 版本)为:

      x→l+1=x→0⊙(Wlx→l+b→l)+x→l

      其中 Wl,b→l 为待学习的参数。

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

      x→l+1=x→0⊙(Ul(Vl⊤x→l)+b→l)+x→l

      .

    • 最后,我们使用带有 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 head 的 label 。Pinnability 的损失函数是一个加权的交叉熵损失,旨在优化 multi-label classification 任务。我们将损失函数表述为:

    L=wu×∑h∈H{−wh×[yhlog⁡f(x→)h+(1−yh)(1−log⁡f(x→)h)]}

    其中:

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

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

      wh=∑a∈HMh,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 将特征填充到长度 100 。 user action sequence feature 按时间戳降序排序,即第一个元素是最近的行为。

    user action sequence 中的所有行为都是 pin-level actions 。对于每个行为,我们使用三个主要特征:行为的 timestamp 、行为类型,以及 pin 的 32-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:对于用户曾经交互过的 pins,pins 的相关性可以通过用户行为历史中对其采取的 action type 来确定。例如,被用户转存到其画板的 pin,相比较于被查看的 pin,通常被认为前者更相关。如果一个pin被用户隐藏,其相关性应该非常低。为了整合这一重要信息,我们使用 trainable embedding tables 将 action types 投影到低维向量。然后,user action type sequence 被投影到一个 user action embedding matrix Wactions∈R|S|×daction,其中 daction 是 action type embedding 的维度。

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

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

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

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

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

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

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

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

  4. Sequence Aggregation Model:准备好用 user action sequence feature U 后,下一个挑战是高效地聚合 user action sequence 中的所有信息,以表示用户的短期偏好。工业界用于序列建模的一些流行模型架构包括 CNN、RNN 以及最近的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。所有在 (trequest−T,trequest) 内发生的行为被掩码,其中 trequest 代表接收 ranking request 的时间戳。需要注意的是,random time window mask 仅在训练期间应用,而在推理时不使用掩 mask。

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

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

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

      因为最近的行为更靠前。

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

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

1.2.4 Model Productionization

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

  2. GPU serving:Pinnability 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 kernels,launching 开销远高于实际计算的开销。我们通过以下优化解决了这个技术挑战:

    • Fuse CUDA kernels:一个有效的方法是尽可能地融合 operations。我们利用标准的深度学习编译器(如,nvFuser),但经常发现许多剩余 operations 需要人工干预。一个例子是我们的 embedding table lookup module ,它由两个计算步骤组成:raw id 到 table index 的 lookup,以及 table index 到 embedding 的 lookup。由于特征数量庞大,这个操作会重复数百次。我们通过利用 cuCollections 支持 GPU 上 raw ids 的 hash 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。为了弥补缓存容量的损失,我们实现了一个同时使用 DRAM 和 SSD 的 hybrid cache。

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

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

1.3 实验

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

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

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

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

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

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

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

  3. 超参数:

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

    • encoded sequence feature 被馈入一个由 2 transformer blocks 组成的 Transformer encoder ,默认 dropout rate 为 0.1。transformer 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 bias 。position bias 是指推荐列表顶部的 items 比较低位置的 items 获得更多关注和互动的趋势。这在评估 ranking model 时可能是一个问题,因为它会扭曲评估结果,使得难以准确评估模型的性能。为了避免 position bias ,我们在很小一部分 Homefeed recommendation sessions 中随机化 pins 的顺序。这是在向用户展示推荐之前通过打乱 recommendations 顺序来实现的。我们收集这些 randomized sessions 的 FVL,并仅使用 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 request 的 pins 进行排序,该得分是Pinnability output heads f(x→) 的线性组合。

    S=∑h∈Huhf(x→)h

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

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

    我们按如下方式计算每个 head h 的 aggregated HIT@3 :

    HIT@3/h=∑u∈U∑c∈Cuβc,h|U|

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

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

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

    在 Pinterest ,non-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 actions 的 PinSage embeddings 的均值池化来编码序列。

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

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

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

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

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

    • 此外,TransAct 在 HIT@3/repin 方面相比 BST 也表现出改进,这归功于其有效的 early fusion 和 output 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 的最后一行,我们展示了去掉除 TransAct 和 PinnerFormer 之外的所有其他 user features 仅导致相对较小的性能下降,证明了我们的 realtime sequence model 与 pre-trained batch model 所结合的效果。

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

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

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

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

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

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

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

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

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

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

  3. Early fusion and sequence length selection:如正文章节所讨论的,early fusion 在 ranking 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 超参数:我们通过调整 TransAct 的 Transformer encoder 的超参数来优化它。如 Figure 5 所示:增加 Transformer 层数与 feed forward 维度会导致更高的延迟,但也带来更好的性能。

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

  5. Transformer output compression:Transformer encoder 产生 O∈Rd×|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 features 的 Pinnability 模型。实验组是带有 TransAct 的 Pinnability 模型。每个实验组 serve 了访问 Homefeed 页面的总用户的 1.5% 。

  2. 评估指标:在 Homefeed 上,最重要的指标之一是 Homefeed repin volume 。repin 是用户发现 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 users 的 engagement 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 时,他们倾向于交互更多相关内容,从而导致他们的行为发生变化(例如,更多 clicks 或 repins)。这些行为变化导致 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 Tasks:TransAct 的能力不仅限于排序任务。它也已成功应用于 contextual recommendation 和 search ranking 场景。

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

    • TransAct 还被应用于 Pinterest 的 Search Ranking 系统和 Notification Ranking。

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

1.5 结论

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

二、附录

2.1 Head Weighting

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

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

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

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

      whide=Mhide,repin∗yrepin=5

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

      wclick=Mclick,repin∗yrepin=0

      .

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

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