Actions Speak Louder than Words Meta史诗级的端到端推荐大模型落地

news2024/9/27 4:41:50

发现好久之前整理的推荐系统被遗忘在了草稿箱,让它出来见见世面。。。后续空了持续更新

文章目录

  • 1.Background
  • 2.Related works
    • 2.1 典型推荐模型
      • 2.1.1 DIN
      • 2.1.2 DIEN
      • 2.1.3 SIM
      • 2.1.4 MMoE
      • 2.1.5 其他
    • 2.2. 生成式推荐
  • 3.Method
    • 3.1 统一特征空间
    • 3.2 重塑召回排序模型
      • 3.2.1 召回任务
      • 3.2.2 排序任务
    • 3.3 模型架构升级——HSTU
      • 其他工程优化

1.Background

大模型生成用于推荐场景有如下几个难点:

  • 特征缺乏显式结构。存在sparse和dense特征,其中sparse特征指的是一些离散特征,这部分离散特征通过onehot方式映射成embedding输入到模型。dense模型是连续特征,比如ctr、交叉的连续特征等。
  • 推荐系统使用不断变化十亿级词汇表。具体来说两方面:a. 词表大 b.词表一直在变比如新增了一个用户id,推荐场景会有入场退场机制,但是语义的生成大模型处理的都是token如何处理新增特征表示(直接加入的话,训练阶段可能没有见过或者导致欠拟)
  • 计算成本是实现大规模顺序模型的主要瓶颈。这块主要指的是训练方式和推理速度。GPT-3 在 1-2 个月的时间内使用数千个 GPU 对总共 300B个token 进行了训练。推荐模型一般要处理十亿的日常活跃用户,他们每天会浏览数十亿条帖子、图片和视频。用户序列的长度可能高达 1 0 5 10^5 105。因此,推荐系统每天需要处理的 token 数量比语言模型在 1-2 个月内处理的 token 多几个数量级。

2.Related works

2.1 典型推荐模型

2.1.1 DIN

v U ( A ) = f ( v A , e 1 , e 2 , . . . , e H ) = ∑ j = 1 H a t t e n t i o n ( e j , v A ) = ∑ j = 1 H w j e j \mathbf v_U(A) = f(\mathbf v_A,\mathbf e_1, \mathbf e_2, ..., \mathbf e_H ) = \sum_{j=1}^H attention(\mathbf e_j,\mathbf v_A) = \sum_{j=1}^H \mathbf w_j \mathbf e_j vU(A)=f(vA,e1,e2,...,eH)=j=1Hattention(ej,vA)=j=1Hwjej

{ e 1 , e 2 , . . . , e H } \{\mathbf e_1, \mathbf e_2, ..., \mathbf e_H\} {e1,e2,...,eH}是用户历史行为的一组Embedding,长度为H H
在这里插入图片描述

一点理解:
Attention的作用主要是有多个兴趣点,在对本次进行排序的时候,主要关注的是target类似的兴趣还好的情况。

2.1.2 DIEN

DIN通过attention能够动态刻画用户的兴趣,不过DIN没有考虑用户序列之间的相关性,用户序列之间的顺序也没有考虑。也就是如果用户购买序列为“鞋子->袜子->水杯->键盘->风扇”和用户序列是“鞋子->水杯->袜子>风扇->键盘”通过attention得到的用户表征完全一样,实际上这两个序列是不同的.

  • 兴趣提取层
    用GRU建模用户序列的这种前后依赖的关系,用隐状态表示用户当前时刻的兴趣。同时引入辅助loss,通过下一个时刻的行为对当前行为进行监督,保证隐状态的有效性。
    引入辅助loss可以有效缓解长序列梯度传播问题,引入用户非点击序列作为负样本,限制用户隐状态包含用户兴趣,模型用到的用户行为序列数据,长度可能非常大,容易导致GRU面临梯度消失问题;而且对各个时刻隐状态进行监督,可以提高提取到的兴趣表征效果,从而有利于下一个阶段兴趣演化层对兴趣的学习
  • 兴趣进化层
    通过基于attention的GRU方式,把attention分数当做更新门的作用,对GRU的隐状态进行更新。减弱不想管历史行为隐藏状态的更新,因此可以对隐状态的更新更细化。使兴趣演化过程聚焦在相关兴趣上,相关性越高,对隐状态的更新越大,从而对最终兴趣表征影响越大。

用户行为阿里这里使用了用户过去两周即14天的点击商品与商品类目序列
在这里插入图片描述负样本是对应正样本(展现点击)对应的t时刻有展未点的作为负样本
参考:推荐系统(十二)阿里深度兴趣网络(二):DIEN模型(Deep Interest Evolution Network)

一点理解:
实际上阿里早在DIN版本中就尝试过了用RNN来对用户行为序列建模,但并没有什么效果。用户行为序列还和文本序列不太一样,文本序列有明确的语法制约,比如【我是好人】就是一句有明确含义的话,打乱下顺序【人我是好】就明显不具有含义了。但是用户行为序列,比如点击行为序列【牛仔裤–>哈伦裤–>阔腿裤】和【哈伦裤–>牛仔裤–>阔腿裤】顺序改变下,其实是没什么影响的,也就是说用户行为序列对于『顺序』实际上不是很敏感的,这里再去硬套RNN似乎有些牵强附会。

2.1.3 SIM

MIMN模型能够基于memory network对长达 1000 长度的行为序列数据进行训练和在线 serving 的整体解决方案。然而在处理更大规模的序列数据时,容易被数据的噪声干扰、效果很不理想。
长序列进行建模,引入超长的用户行为数据。提出了一个两阶段搜索范式来建模用户的超长行为序列。SIM 包含两级检索模块 General Search Unit (GSU) 和 Exact Search Unit (ESU)。在第一阶段,我们利用 General Search Unit (GSU) 从原始用户行为中搜索 Top-K 相关的用户子序列行为。这个搜索时间远低于原始行为遍历时间,同时 K 也比原始用户行为小几个数量级。在第二阶段,ESU 利用 GSU 产出的和广告相关的用户序列数据来捕捉用户跟广告更精准的兴趣表达,利用一个 multi-head attention 结构来捕捉用户在广告上的动态的用户兴趣。在这里插入图片描述
参考:阿里定向广告新一代主模型:基于搜索的超长用户行为建模范式

2.1.4 MMoE

paper:Modeling Task Relationships in Multi-task Learning with Multi-gate Mixture-of-Experts
在这里插入图片描述
Shared-Bottom Multi-task Model
如上图a所示,shared-bottom网络(表示为函数f位于底部,多个任务共用这一层。往上,K个子任务分别对应一个tower network(表示为h),每个子任务的输出 y k = h k ( f ( x ) ) y_k=h_k(f(x)) ykhk(f(x))
Mixture-of-Experts(MoE / OMoE)
MoE模型可以形式化表示为 y = ∑ i = 1 n g i ( x ) f i ( x ) y=\sum^n_{i=1} g_i(x)f_i(x) yi=1ngi(x)fi(x),其中 ∑ i = 1 n g i ( x ) = 1 \sum^n_{i=1} g_i(x)=1 i=1ngi(x)=1,且 f i f_i fi i = 1 , . . . , n i=1,... , n i1,...,n是n个expert network(expert network可认为是一个神经网络)。
g是组合experts结果的gating network,具体来说g产生n个experts上的概率分布,最终的输出是所有experts的带权加和。显然,MoE可看做基于多个独立模型的集成方法。这里注意MoE并不对应上图中的b部分。
后面有些文章将MoE作为一个基本的组成单元,将多个MoE结构堆叠在一个大网络中。比如一个MoE层可以接受上一层MoE层的输出作为输入,其输出作为下一层的输入使用。

Multi-gate Mixture-of-Experts(MMoE)
MMoE目的就是相对于shared-bottom结构不明显增加模型参数的要求下捕捉任务的不同。其核心思想是将shared-bottom网络中的函数f替换成MoE层,如上图c所示,形式化表达为:
y k = h k ( f k ( x ) ) , f ( x ) = ∑ i = 1 n g k ( x ) i f i ( x ) y_k=h^k(f^k(x)),f(x)=\sum ^n _{i=1}g^k(x)_if_i(x) yk=hk(fk(x)),f(x)=i=1ngk(x)ifi(x)
其中 g k ( x ) = s o f t m a x ( W g k x ) g^k(x)=softmax(W_{gk}x) gk(x)softmax(Wgkx),输入就是input feature,输出是所有experts上的权重。
一方面,因为gating networks通常是轻量级的,而且expert networks是所有任务共用,所以相对于论文中提到的一些baseline方法在计算量和参数量上具有优势。

另一方面,相对于所有任务公共一个门控网络(One-gate MoE model,如上图b),这里MMoE(上图c)中每个任务使用单独的gating networks。每个任务的gating networks通过最终输出权重不同实现对experts的选择性利用。不同任务的gating networks可以学习到不同的组合experts的模式,因此模型考虑到了捕捉到任务的相关性和区别。

参考:多任务学习模型MMoE详解 Multi-gate Mixture-of-Experts 与代码实现

2.1.5 其他

  • 一些传统用户行为序列建模:用户行为序列建模。
  • senet、ppnet 这种 gateing网络

其他经典模型:序列建模简史(DIN/DIEN/DSIN/BST/MIMN/SIM/ETA/SDIM/TWIN)

2.2. 生成式推荐

  • GRU4Rec 、 RecSys:在这两种情况下,正样本(被点击的商品或用户至少花了一定时间观看的视频)序列作为输入。我们进一步观察到,在经典的工业规模两阶段推荐系统设置中,包括检索和排序。GRU4Rec主要做的是检索任务。
    详情:推荐中的序列化建模:Session-based neural recommendation
    在这里插入图片描述
    在这里插入图片描述
  • SASRec: 第一个在推荐中将transformer应用于推荐自回归。类似于GRU4Rec,他们将评论或评分视为正样本,将Amazon Reviews 3和MovieLens 4等经典数据集转换正样本序列。position embedding是可学习矩阵,这就存在长度过长的学习不充分。
  • BERT4Rec 、S3Rec
    上述的几种方式基本方法都类似: 最后预测下一个目标推荐的结果,跟生成模型类似,预测下一个token,包括loss也比较像,都是候选Item的softmax encropy或者pair-wise loss。

3.Method

针对第一节background中的三个问题,下面分别围绕这3个方面展开介绍Solution:“统一的特征空间”、“重塑召排问题”、“新Encoder架构HSTU、性能加速优化”。然后具体分析实验部分(Evaluation)并做总结(Conclusion)。

前奏:任务定义
给定按照时间顺序排列的tokens序列 x 0 , x 1 , … , x n − 1 ( x i ∈ X ) x_0, x_1,…, x_{n−1} (x_i∈X) x0,x1xn1(xiX),对应的时间序列为 t 0 , t 1 , … , t n − 1 t_0, t_1,…, t_{n−1} t0,t1tn1,以及其他的元数据 a i ∈ X a_i∈X aiX(例如:主时间序列里的元数据包括用户的行为类型,如曝光/点击/点赞/浏览图片等)。序列直推式任务(a sequential transduction task) 是在给定掩码序列 m 0 , m 1 , … , m n − 1 m_0, m_1,…, m_{n−1} m0,m1mn1的条件下,将此输入序列映射到输出标记 y 0 , y 1 , … , y n − 1 ( y i ∈ X ∪ ∅ ) y_0, y_1,…, y_{n−1} (y_i∈X∪{∅}) y0,y1yn1(yiX),其中 y i = ∅ y_i =∅ yi=表示 y i y_i yi未定义。
其中 Φ i ∈ X c ( X c ⊆ X ) Φ_i∈X_c (X_c \subseteq X) ΦiXc(XcX)表示系统向用户提供的内容。 掩码序列主要为了标记各个 y i y_i yi的含义, m i ∈ { 0 , 1 } m_i ∈ \{ 0, 1\} mi{0,1} m i = 1 m_i=1 mi=1 y i y_i yi有定义(比如是交互的正样本item), m i = 0 m_i=0 mi=0则未定义(比如是某个属性/用户行为类型,不代表正样本item)。
在这里插入图片描述

整体模型图:
在这里插入图片描述

3.1 统一特征空间

现代推荐系统通常在海量稀疏类别型特征(sparse)和稠密型数值特征(dense)上训练。

  • 类别型(稀疏)特征:如用户喜欢的item、品类、用户使用的语言、用户加入的社群、发起请求的城市等。首先,选择跨度最长的序列作为主时间序列,通过合并用户交互的item特征来实现。如上图右侧中间部分,main time series通常由交互的item构成,包括交互itemID、时间戳、行为类型等。辅助aux time series通常是随着时间缓慢变化的特征构成,如用户的人口统计学信息或已关注的作者等,会对aux时间序列做压缩,只保留每个连续片段的最早记录,然后将结果合并到主时间序列中,比如:图中aux time series 1 左侧3个连续行为保留第一个插入main series的最左端,这种方法不会显著增加整体序列的长度。

  • 数值型(稠密)特征:如user-item topic的历史统计点击率特征。与分类特征相比,这些特征的变化频率要高得多,可能会随着每个(用户,物品)交互而发生变化。因此,从计算和存储的角度来看,将这些特征完全序列化是不可行的。然而,一个重要的洞察是,这类聚合统计特征,可以被大规模长序列建模所替代,通过直推式序列架构(sequential transduction architecture)以及目标感知(target-aware)的建模方式,也能捕捉和编码好用户兴趣,并且随着序列长度和计算量的增加,这种信息捕捉得会越好,因此本方法中丢弃要显式数值统计类特征

这也是典型的两个门派,长序列DNN端到端建模 VS 手动特征工程。海量样本/高频消费场景+长序列建模架构,是有可能更泛化地捕捉用户兴趣,发挥特征工程的作用;反之,在规模不足的场景下,这类特征工程仍然是有必要的。现实中能达到前者要求的大厂不多。

为了统一海量的异构特征,作者将用户所有的正负反馈(正负样例,是否点击)行为组织成序列,这个序列中既包括itemid、userid、也包括稀疏特征、交互行为类型等,摒弃了数值型特征,构造成生成式建模所需要的统一输入格式。
问题: itemid、userid、交互行为怎么表示的?

3.2 重塑召回排序模型

关键问题:如何用生成式框架来重新定义召回和排序任务?Reformulating ranking and retrieval as sequential transduction tasks

归纳式学习是从已有数据中归纳出模式来,应用于新的数据和任务,是我们比较常见的机器学习模式,如传统监督学习。
直推式学习由当前学习的知识直接推广到给定的数据上,即:首先观察全部数据,包括了训练和测试数据,我们从观测到的训练数据集上进行学习,然后在测试集上做预测。即便如此,我们不知道测试数据集上的标签,我们可以在训练时利用数据集上的模式和额外信息。
总结:归纳式学习强调输入和输出之间的映射关系的预测;而直推式学习强调从数据中发现隐含的模式和结构。
ref: 如何理解 inductive learning 与 transductive learning?

3.2.1 召回任务

为每个用户学习概率分布 p ( x i + 1 ∣ u i ) p(x_i+1|u_i) p(xi1∣ui),其中 x i + 1 ∈ X c x_i+1 ∈ X_c xi1Xc u i u_i ui是在时间步i的用户表征向量(可以理解为整个行为序列表征),学习在给定用户表征下,全库物料的概率分布,学习目标是选择 m a x x ∈ X c max_{x \in X_c} maxxXc p ( x ∣ u i ) p(x|u_i) p(xui)来最大化某个特定的reward。但和标准的自回归有一定差异:

  • 首先,下一个token x i + 1 {x_{i+1}} xi1不一定是 x i x_i xi y i y_i yi的监督信号,因为 x i + 1 x_{i+1} xi1有可能是负样本(比如曝光未点击);
  • 其次,下一个token还不一定是物料,也有可能代表元特征,比如人口属性特征 x i + 1 ∈ X c x_{i+1} \in X_c xi1Xc

上述情况会通过掩码序列来标识,此时 m i = 0 m_i=0 mi0
这个召回Loss的设计文中没有细讲。基于个人理解,召回任务采取的是类似自回归建模,
decoder-only,next-token prediction,对于非item token或者非正样本(如曝光),会通过
mi=0来做mask,不进行回归预测,但输入层面会做self-attention来提取信息,只是算自回归loss的时候不参与而已
。此外,在做next-token prediction预测全库概率分布时,肯定也需要进行负采样优化(softmax预测候选的所有item成本太高了),和标准的双塔召回应该也是类似的。差异就是输入序列的构造上引入了全部的行为反馈数据,达到特征层面充分交叉,预测层面通过mask实现正样本的next-token prediction。
整个用户行为序列加工后的表征可以作为user embedding,最后使用的时候也可以是向量召回形式。这个部分论文实在是讲的太少,理解不对的地方多多指教。也期待作者后续更新arxiv。

3.2.2 排序任务

精排通常需要target-aware的建模,即:将待预测的item和用户历史行为等做交叉,且要在深度模型底层更早地做交叉,而不能到深度模型输出侧才做交叉,那样效果大打折扣。在标准的自回归设定下,交叉只能在encoder输出后接softmax层进行,无法在encoder内部底层提早做交叉,效果上大打折扣。为了解决这样的问题,一种思路是对encoder的输入序列做改造,来实现底层交叉的目的。

作者通过在序列上交错插入item和action来实现(We address this problem by interleaving items and actions in the main time series.)。也就是前文提到的将action当做是一种新模态,实现历史各种行为和target的充分交叉。

因此暂时先不考虑类别型元特征,构造好的序列形如 x 0 , a 0 , x 1 , a 1 , . . . x n − 1 , a a − 1 x_0, a_0, x_1, a_1, ... x_{n-1}, a_{a-1} x0,a0,x1,a1,...xn1,aa1,在action位置上对应的mask m i = 0 m_i=0 mi=0。在实际建模中,每个content物料位置通过encoder编码好的表征会接多个任务塔来实现多目标训练和预测。

这个地方仍然没有讲清楚ranking的loss是怎么设计的,仍然按照个人的理解,ranking任务在content物料位置接多任务tower来实现训练和预测,且特定任务的tower参数应该是所有content位置共享的,另外这里我的理解所有content位置不管是正负样例都是会进行多目标预测。个人认为排序中自回归目标不是必须的,但作为辅助目标是可以的。

线上要进行推理的时候,将待预估的候选item和信息插到历史行为序列(怎么插文中没提,比如插到末尾)中进行交叉和预测。历史用户行为序列计算实际上在所有候选items间是可以共享的,因此通过合理组织和“折叠对齐”候选items,是可以实现1次推理,全部候选items的预估(形式上是单次推理,实际上仍然是多次打分,复用了大部分算力)。这点非常香,能节省大量算力和资源。类Transformers架构的精排或重排模型,是有可能实现这一效果的,足够颠覆现有的预估范式。这个方法近期我们在做item维度下子粒度创意预估时有切身感受,通过折叠子候选集来实现算力复用,节省大量算力。

召排的GRs是否有部分共享,还是只是基础架构一样,仍然是2个分开的模型?文中也没有讲这块,但从最终的实验模型上看,两个模型是分开训练的(对于ranking, l = 3 l=3 l3 n = 2048 n=2048 n2048 d = 512 d=512 d512;对于检索, l = 6 l=6 l6 n = 512 n=512 n512 d = 256 d=256 d256)。从技术实现上,自回归部分是能共享的,排序额外的多目标损失则是多出来的一块。

3.3 模型架构升级——HSTU

新encoder定位:A High Performance Self-Attention Encoder for Generative Recommendations,作者设计了新一代的encoder架构,称为HSTU(Hierarchical Sequential Transduction Unit) (HSTU)

这里主要解决文章开头说的难点部分:推荐系统使用不断变化十亿级词汇表,在这个背景下如何提高效果。 这里借鉴了很多传统的推荐模型方法,比如:DIN、MoEs、SENet

在这里插入图片描述
类似Transformers,HSTU堆叠多个层,层与层之间通过残差连接。每个层包含三个主要的子层:pointwise投影层,pointwise空间聚合层和pointwise转换层。
poinwise投影层 U ( X ) , V ( X ) , Q ( X ) , K ( X ) = S p l i t ( ϕ 1 ( f 1 ( X ) ) ) U(X), V(X), Q(X), K(X)=Split(\phi_1(f_1(X))) U(X),V(X),Q(X),K(X)=Split(ϕ1(f1(X))) f 1 ( x ) f_1(x) f1(x)是单层MLP, ϕ 1 \phi_1 ϕ1是激活函数,采用SiLU,对输入序列做了个非线性变换。
pointwise空间聚合层 A ( X ) V ( X ) = ϕ 2 ( Q ( X ) K ( X ) + r a b p , t ) V ( X ) A(X)V(X) = \phi_2(Q(X)K(X)+rab^{p,t})V(X) A(X)V(X)=ϕ2(Q(X)K(X)+rabp,t)V(X)。整体类似传统的QKV self-attention。 r a b p , t rab^{p,t} rabp,t是attention bias,引入了位置 p p p和时间 t t t信息,执行attention操作。
pointwise转换层 Y ( X ) = f 2 ( N o r m ( A ( X ) V ( X ) ) ⨀ U ( X ) ) Y(X) = f_2(Norm(A(X)V(X)) \bigodot U(X) ) Y(X)=f2(Norm(A(X)V(X))U(X)) f 2 f_2 f2也是单层MLP,类似传统的feedforward MLP。
HSTU相比于Transformer,在推荐系统领域的改进点体现在上面3个层:

  • poinwise投影层:在传统Q,K,V基础上,多了一个 U ( X ) U(X) U(X),压缩该用户长期历史行为信息,可以理解为底层的用户长期行为序列表征,在后续层中,会基于序列信息+target进行信息筛选和增强。
  • pointwise空间聚合层:HSTU采用了一种新的pointwise聚合注意力机制,而不是Transformers中的softmax注意力机制。这个处理和DIN[5]是类似的。即把序列维度的聚合权重 ∑ i w i = 1 \sum_iw_i=1 iwi=1的约束放松了,也就是抛弃了softmax normalization的操作,能够更好地保留用户兴趣的强度,能够保留用户对激活item的强度信息。比如1个用户的历史行为中包含了90%的衣服,10%的电子产品。对于目标为衣服的item,显然行为序列中为衣服的item信息要尽可能多的保留,如果采用softmax做normalization,那么这一强度信息就会失真, 导致在预测多目标时预估不准确(如item时长)。如果不采用softmax,那么用户交互了“多少件衣服item”这一先验的重要信息能够保留。如果仅仅只需要预估相对排序,那么normalization后的序信息是可以保留的。但除了序,我们还要预估准“值”,那么softmax的操作就需要舍弃了。除此之外,作者通过生成数据来模拟流式环境,发现softmax激活不适合这种非稳态动态词表的场景。使不使用softmax对性能的影响巨大。如下图所示。这个洞察还是很有启发的,和DIN思路如出一辙。只不过“pointwise聚合”叫法感觉容易让人摸不着头脑。另外,我们还能发现attention bias(rab)的作用也是比较大的。
  • pointwise转换层:HSTU具备替代传统多层深度模型的能力,能起到特征抽取、特征交叉和表征转换的作用。
    • 特征抽取:很多稀疏特征会作为输入,过各层网络后得到attentive pooled embedding。
    • 特征交叉:传统DNN通过FM等结构实现,HSTU采用基于attention得到的pooled特征来直接和其他特征交互,即上述的 N o r m ( A ( X ) V ( X ) ) ⨀ U ( X ) Norm(A(X)V(X)) \bigodot U(X) Norm(A(X)V(X))U(X)。这个设计的动机来源于多层MLP在近似点积上实际上存在困难 12,比如Rendle在Recsys2020上挑战经典的神经协同过滤方法NCF。如果U(X)上再套层SiLU,那么就很像SwiGLU的变体了。个人理解此处的
      更好地保留了原始输入的信息,经过attention计算后的pooled信息本身蕴含了和target的高阶交叉特征,再补充和底层原始信息之间的特征交叉。
    • 表征转换:传统DNN通常基于MoE来动态路由选取多样异构的输入信息。一种想法是为每个用户专门定制子网络来进行条件计算,在HSTU中,element-wise点积可以在标准化因子上实现类似MoEs的门控操作。个人理解相当于
      可以类比MoE中的门控操作,对底层
      做信息筛选。实际上也有点像SENet/PPNet等特征重要度学习方法。

其他工程优化

本文方法特点:

  • Ignorance of features other than user-interacted items. 只保留与用户交互的Item信息。我的理解就是描述Item的离散特征或者Sparse特征。

下一时刻如果item没有被点怎么办?
生成的结果是什么?
为什么Q K V U都会用到SiLU激活?MoEs、SENet?

论文中cross attention的实现,感觉挺有意思的。如果在CTR推荐场景落地论文的架构,有可能是把曝光和点击行为,都放到一条序列中,把item的time diff、类目等属性信息以类似position embedding的方式相加引入进来,把行为类型也放到了序列中,序列形式类似于:item1,action(曝光未点击),item2,action(点击),item3,action(点击)。。。后面是一个next item prediction的loss,精排模型会mask掉序列中的用户画像和action部分,而在item位置后接一个小网络进行多任务action目标的预测。召回模型则只对序列中的item进行预测,不过会把像曝光未点击这类item mask掉。
线上推理阶段,可以把上百个精排候选集放到序列中,一次推理即可得到所有打分结果,而且随着候选集数目的上升,相比传统架构的优势也越来越明显。推测应该是decode-only架构,用了causal mask的方式,序列中每个item在做attention的时候,只能看到自己和之前的item,看不到后面的item。模型能力比历史行为和target item拼一起直接做 self attention要低,比历史行为做完self attention之后再做target attention要高。复杂度确实可以控制到 O ( ( n + b m ) 2 d ) O((n+b_m)^2d) O((n+bm)2d)的水平。
论文虽然抛弃了人工构造的统计特征,但仍然是基于ID体系进行学习的,并没有多模态信息的引入。目前一些研究表明,多模态信息在一些情况下是可以打平ID体系的,不知道后面结合模型复杂度和数据量的提升,是否会有一些质的飞跃,这个还是比较期待的。
线上推理阶段,可以把上百个精排候选集放到序列中,一次推理即可得到所有打分结果,而且随着候选集数目的上升,相比传统架构的优势也越来越明显。

后续落地的一些思考:

  • 效果空间:取决于当前基线的特征交叉和用户建模技术水位,基线太强会影响提升的效果,那么落地这个工作可能就会不太划算。
  • 工程优化:离线训练和在线推理都有挺多需要优化的地方,否则很难控制计算成本和迭代效率。
  • 信息对齐:基线可能特征很多,数据来源也很多,需要尽量把基线特征用的上游数据源都梳理清楚,保证两套系统在输入信息量上是可比的。另外新架构很难把基线模型的交叉特征和统计特征加进来,给打平效果也带来了不小的困难。

DLRM 通常使用相对较小的序列长度,例如BST中的20、DIN中的1,000和TransAct中的100。对比之下,这些序列长度与本文中的模型长度8,192相比要小1-3 个数量级


  1. Neural collaborative filtering vs. matrix factorization revisited. In Fourteenth ACM Conference on Recommender Systems ↩︎

  2. Revisiting neural retrieval on accelerators ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2168770.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL 面试题及答案

MySQL 面试题及答案: 一、基础问题 什么是数据库索引?有哪些类型? 答:数据库索引是一种数据结构,用于提高数据库查询的效率。它就像一本书的目录,可以快速定位到特定的数据行。 类型主要有: …

C++实现二叉树的创建删除,dfslfs,求叶子结点个数,求叶子结点个数,求树的高度

C实现二叉树的创建删除,dfs/lfs,求叶子结点个数,求树的高度 基本算法: 用链栈建立二叉树,通过递归实现深度优先的三种遍历,用队列实现广度优先层次遍历。借助递归思想求解叶子结点个数和树的深度。 tree.h定义基本的…

sysbench 命令:跨平台的基准测试工具

一、命令简介 sysbench 是一个跨平台的基准测试工具,用于评估系统性能,包括 CPU、内存、文件 I/O、数据库等性能。 ‍ 比较同类测试工具 bench.sh 在上文 bench.sh:Linux 服务器基准测试中介绍了 bench.sh 一键测试脚本,它对…

CAT1 RTU软硬件设计开源资料分析(TCP协议+Modbus协议+GNSS定位版本 )

01 CAT1 RTU方案简介: 远程终端单元( Remote Terminal Unit,RTU),一种针对通信距离较长和工业现场环境恶劣而设计的具有模块化结构的、特殊的计算机测控单元,它将末端检测仪表和执行机构与远程控制中心相连接。 奇迹TCP RTUGNS…

【MySQL】数据库--索引

索引 1.索引 在数据中索引最核心的作用就是:加速查找 1.1 索引原理 索引的底层是基于BTree的数据存储结构 如图所示: 很明显,如果有了索引结构的查询效率比表中逐行查询的速度要快很多且数据越大越明显。 数据库的索引是基于上述BTree的…

C--结构体和位段的使用方法

各位看官如果您觉得这篇文章对您有帮助的话 欢迎您分享给更多人哦 感谢大家的点赞收藏评论,感谢您的支持!!! 一:结构体 首先结构体我们有一个非常重要的规则 非常重要: 我们允许在初始化时自动将字符串字面…

Jmeter关联,断言,参数化

一、关联 常用的关联有三种 1.边界提取器 2.JSON提取器 3.正则表达式提取器 接下来就详细讲述一下这三种的用法 这里提供两个接口方便练习 登录接口 接口名称:登录 接口提交方式:POST 接口的url地址:https://admin-api.macrozheng.com/a…

部署Tomcat服务

一、部署过程 1. 节点规划 节点IP 主机名 节点 192.168.20.20 tomcat Tomcat 2. 基础环境配置 2.1. 修改主机名 [rootlocalhost ~]# hostnamectl set-hostname tamcat [rootlocalhost ~]# bash 2.2. 关闭防火墙 [roottamcat ~]# systemctl stop firewalld [roott…

嵌入式单片机底层原理详解

前言 此笔记面向有C语言基础、学习过数字电路、对单片机有一定了解且尚在学习阶段的群体编写,笔记中会介绍单片机的结构、工作原理,以及一些C语言编程技巧,对于还停留在复制模板、copy代码阶段的读者会有比较大的帮助,待学习完成后可以独立完成几乎所有单片机的驱动开发。 …

macOS安装MySQL教程, 2024年9月26日更新, 亲测有效, 附有百度网盘下载链接

下载: https://dev.mysql.com/downloads/mysql/ 选第一个 DMG版本的. 这一步可能需要登录一下, 比较麻烦, 一会儿我传到百度网盘, 文末发百度网盘的链接. 点击下载按钮, 会弹出下载提示. 开始下载了, 很慢. 复制链接地址, 使用迅雷下载. 稍微快点. 我传到了百度网盘: 通过网…

Java List类

欢迎来到Cefler的博客😁 🕌博客主页:折纸花满衣 🏠个人专栏:Java 目录 👉🏻List1. 接口与实现2. 特性3. 常用方法4. 示例代码5. 遍历6. 线程安全 👉🏻List Java的 List …

【含文档】基于Springboot+微信小程序 的高校社团管理小程序(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…

菱形继承、菱形虚拟继承、菱形继承中多态问题、菱形虚拟继承中多态问题

菱形继承以及菱形继承中的多态问题 一、对象模型(一)菱形继承 & 菱形虚拟继承(一)菱形继承中多态 & 菱形虚拟继承中多态 二、总结 本文主要叙述菱形继承、菱形虚拟继承、菱形继承中多态、菱形虚拟继承中多态,这…

JavaWeb 13.HTTP协议

和自己的情绪共处,永远保持乐观 —— 24.9.26 一、HTTP简介 HTTP 超文本传输协议 (HTTP-Hyper Text transfer protocol),是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出&a…

STL之vector篇(下)(手撕底层代码,从零实现vector的常用指令,深度剖析并优化其核心代码)

文章目录 1.基本结构与初始化1.1 空构造函数的实现与测试1.2 带大小和默认值的构造函数1.3 使用迭代器范围初始化的构造函数(建议先看完后面的reserve和push_back)1.4 拷贝构造函数1.5 赋值操作符的实现(深拷贝)1.6 析构函数1.7 begin 与 end 迭代器 2. …

jQuery——层次选择器

1、层次选择器:查找子元素,后代元素,兄弟元素的选择器。 ancestor descendant:在给定的祖先元素下匹配所有的后代元素 parent > child:在给定的父元素下匹配所有的子元素 prev next:匹配所有紧接在…

每日一练:二叉树的右视图

199. 二叉树的右视图 - 力扣(LeetCode) 一、题目要求 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,null,5,null,4] 输出: [1,3,…

超详细的 pytest教程 之前后置方法和 fixture 机制

前言 这一篇文章专门给大家讲解pytest中关于用例执行的前后置步骤处理,pytest中用例执行的前后置处理既可以通过测试夹具(fixtrue)来实现,也可以通过xunit 风格的前后置方法来实现。接下来我们一起看看如何具体使用。 一、xunit 风格的前后置方法 1、函数用例的前…

基于STM32的智能家庭安全监控系统

目录 引言项目背景环境准备 硬件准备软件安装与配置系统设计 系统架构关键技术代码示例 传感器数据采集摄像头监控与数据处理实时报警功能实现应用场景结论 1. 引言 智能家庭安全监控系统使用嵌入式设备,如STM32微控制器,来实时监控家庭环境。通过集成…

[教程]如何在iPhone上启用中国移动/联通/电信RCS消息

目前 苹果已经在 iOS 18 中带来 RCS 富媒体消息的支持,该消息基于网络传递,用户可以通过 RCS 免费将消息发送到其他 iPhone 或 Android 设备。在苹果面向测试版用户推出的 iOS 18.1 Beta 版中,中国网络运营商包括中国移动、中国联通、中国电信…