当前位置: 首页 > news >正文

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

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

文章目录

  • 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 ↩︎

相关文章:

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

发现好久之前整理的推荐系统被遗忘在了草稿箱,让它出来见见世面。。。后续空了持续更新 文章目录 1.Background2.Related works2.1 典型推荐模型2.1.1 DIN2.1.2 DIEN2.1.3 SIM2.1.4 MMoE2.1.5 其他 2.2. 生成式推荐 3.Method3.1 统一特征空间3.2 重塑召回排序模型3.…...

金智维KRPA之Excel自动化

Excel自动化操作概述 Excel自动化主要用于帮助各种类型的企业用户实现Excel数据处理自动化,Excel自动化是可以从单元格、列、行或范围中读取数据,向其他电子表格或工作簿写入数据等活动。 通过相关命令,还可以对数据进行排序、进行格式…...

哪款宠物空气净化器能有效去除浮毛?希喂、352实测分享

你是否曾经站在家电卖场里,面对琳琅满目的宠物空气净化器产品而感到无所适从?或者在浏览网上商城时,被海量的参数和功能描述搞得头晕眼花?别担心,你不是一个人。在这个科技飞速发展的时代,选择一台既能满足…...

2024.9.28更换启辰R30汽车火花塞

2024.9.28周六汽车跑了11万公里,实在加速肉,起步顿挫,油耗在8个,决定更换火花塞。第一个火花塞要拆掉进气歧管。第二和第三个可以直接换。打开第二个火花塞一看电极都被打成深坑,针电极都被打凸。我有两个旧的火花塞&a…...

2024上海网站建设公司哪家比较好TOP3

判断一家网建公司的好坏,第一是看公司背景,包括成立时间,工商注册信息等,第二可以去看看建站公司做的案例,例如,网站开发、设计、引流等等的以往案例,了解清楚具体的业务流程。 一、公司背景 …...

TDesign组件库+vue3+ts 如何视觉上合并相同内容的table列?(自定义合并table列)

背景 当table的某一列的某些内容相同时&#xff0c;需要在视觉上合并这一部分的内容为同个单元格 如上图所示&#xff0c;比如需要合并当申请人为同个字段的列。 解决代码 <t-table:data"filteredData":columns"columns":rowspan-and-colspan"…...

BACnet协议-(基于ISO 8802-3 UDP)(2)

1、模拟设备的工具界面如下&#xff1a; 2、使用yet another bacnet explorer 用作服务&#xff0c;用于发现设备&#xff0c;界面如下&#xff1a; 3、通过wireshark 抓包如下&#xff1a; &#xff08;1&#xff09;、整体包如下&#xff1a; &#xff08;2&#xff09;、m…...

android 根据公历日期准确节气计算年月日时天干地支 四柱八字

1 年柱 判断当前日期是否超过本年的立春 未超过年份-1 已超过按当前年份计算 2月柱 当前日期是否超过当月的第一个节气 未超过-1 超过当前月份计算 节气对日柱时柱没影响。 获取某年某月第一个节气的准确日期 private int sTerm(int y, int n) {int[] sTermInfo…...

VMware虚拟机连接公网,和WindTerm

一、项目名称 vmware虚拟机连接公网和windterm 二、项目背景 需求1&#xff1a;windows物理机&#xff0c;安装了vmware虚拟机&#xff0c;需要访问公网资源&#xff0c;比如云服务商的yum仓库&#xff0c;国内镜像加速站的容器镜像&#xff0c;http/https资源。 需求2&#xf…...

游戏盾SDK真的能无视攻击吗

游戏盾SDK真的能无视攻击吗&#xff1f;在当今的互联网环境中&#xff0c;游戏行业蓬勃发展&#xff0c;但同时也面临着日益严峻的安全挑战。DDoS攻击、CC攻击、外挂作弊等恶意行为频发&#xff0c;不仅威胁着游戏的稳定性和公平性&#xff0c;也严重影响了玩家的游戏体验。为了…...

【QT】亲测有效:“生成的目标文件包含了过多的段,超出了编译器或链接器允许的最大数量”错误的解决方案

在使用dlib开发人脸对齐功能时&#xff0c;出现了”生成的目标文件包含了过多的段&#xff0c;超出了编译器或链接器允许的最大数量的错误“。 主要功能代码如下&#xff1a; #include <QApplication> #include <QImage> #include <QDebug>#include <dlib…...

什么是 Apache Ingress

Apache Ingress 主要用于管理来自外部的 HTTP 和 HTTPS 流量&#xff0c;并将其路由到合适的 Kubernetes 服务。 容器化与 Kubernetes 是现代云原生应用程序的基础。Kubernetes 的主要职责是管理容器集群&#xff0c;确保它们的高可用性和可扩展性&#xff0c;同时还提供自动化…...

SpringBoot助力墙绘艺术市场创新

3 系统分析 当用户确定开发一款程序时&#xff0c;是需要遵循下面的顺序进行工作&#xff0c;概括为&#xff1a;系统分析–>系统设计–>系统开发–>系统测试&#xff0c;无论这个过程是否有变更或者迭代&#xff0c;都是按照这样的顺序开展工作的。系统分析就是分析系…...

Antlr的使用

概念 ANTLR&#xff08;ANother Tool for Language Recognition&#xff09;是一个强大的解析器生成工具&#xff0c;用于读取、处理、执行或翻译结构化文本或二进制文件。ANTLR通过定义文法&#xff08;grammar&#xff09;来识别、构建和访问语言中的元素。 ANTLR为包括Jav…...

HealChat心理大语言模型 丨OPENAIGC开发者大赛高校组AI创作力奖

在第二届拯救者杯OPENAIGC开发者大赛中&#xff0c;涌现出一批技术突出、创意卓越的作品。为了让这些优秀项目被更多人看到&#xff0c;我们特意开设了优秀作品报道专栏&#xff0c;旨在展示其独特之处和开发者的精彩故事。 无论您是技术专家还是爱好者&#xff0c;希望能带给…...

PyQt5整合爬虫制作图片爬取器-幽络源

前言 本篇教程适合对Python爬虫和Python软件制作感兴趣的小伙伴阅读&#xff0c;看完本篇教程&#xff0c;你将能更深入了解PyQt5与实际功能的整合方式。 1.设计界面 首先在pycharm中创建一个新目录&#xff0c;这里我建立的目录名为爬图片&#xff0c;然后按如图打开Qt设计…...

DC00023基于jsp+MySQL新生报到管理系统

1、项目功能演示 DC00023基于jsp新生报到管理系统java webMySQL新生管理系统 2、项目功能描述 基于jspMySQL新生报到管理系统项目分为学生、辅导员、财务处和系统管理员四个角色。 2.1 学生功能 1、系统登录 2、校园新闻、报到流程、学校简介、在线留言、校园风光、入校须知…...

AdaptIoT——制造业中使用因果关系的自我标签系统

0.概述 论文地址&#xff1a;https://arxiv.org/abs/2404.05976 在许多制造应用中&#xff0c;机器学习&#xff08;ML&#xff09;已被证明可以提高生产率。针对制造业应用提出了一些软件和工业物联网&#xff08;IIoT&#xff09;系统&#xff0c;以接收这些 ML 应用。最近&…...

代码随想录算法训练营Day15

654.最大二叉树 力扣题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 前序递归、循环不变量 class Solution {public TreeNode constructMaximumBinaryTree(int[] nums) {return findmax(nums,0,nums.length);}public TreeNode findmax(int[] nums,int lefti…...

Thinkphp/Laravel旅游景区预约系统的设计与实现

目录 技术栈和环境说明具体实现截图设计思路关键技术课题的重点和难点&#xff1a;框架介绍数据访问方式PHP核心代码部分展示代码目录结构解析系统测试详细视频演示源码获取 技术栈和环境说明 采用PHP语言开发&#xff0c;开发环境为phpstudy 开发工具notepad并使用MYSQL数据库…...

SpringCloud学习记录|day1

学习材料 2024最新SpringCloud微服务开发与实战&#xff0c;java黑马商城项目微服务实战开发&#xff08;涵盖MybatisPlus、Docker、MQ、ES、Redis高级等&#xff09; 学redis讲到微服务就停了&#xff0c;nginx也是。 所以嘛&#xff0c;我终于来到微服务了。 复习MyBatisP…...

Elasticsearch讲解

1.Elasticsearch基本知识 1.基本认识和安装 Elasticsearch是由elastic公司开发的一套搜索引擎技术&#xff0c;它是elastic技术栈中的一部分。完整的技术栈包括&#xff1a; Elasticsearch&#xff1a;用于数据存储、计算和搜索 Logstash/Beats&#xff1a;用于数据收集 Kib…...

Linux嵌入式有发展吗,以及对uboot,kernel,rootfs的领悟

工作多年后&#xff0c;对uboot&#xff0c;kernel&#xff0c;rootfs的领悟&#xff0c;总结 上大学时&#xff0c;51单片机&#xff0c;正点原子的stm32&#xff0c;linux arm开发。对uboot&#xff0c;kernel&#xff0c;rootfs的理解云里雾里&#xff0c;感觉自己很懂了 其…...

基于Springboot+Vue的公寓管理系统(含源码+数据库)

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

多功能声学气膜馆:承载梦想与希望的舞台—轻空间

在9月29日上午&#xff0c;苏州大学应用技术学院的2024级新生开学典礼暨开学第一课在轻空间建造的多功能声学气膜馆内盛大举行。这一盛典不仅见证了2849名新生的入学&#xff0c;也展示了气膜馆的独特魅力与优越功能。 卓越的声学表现 声学气膜馆采用高性能材料&#xff0c;确保…...

【线程】线程池

线程池通过一个线程安全的阻塞任务队列加上一个或一个以上的线程实现&#xff0c;线程池中的线程可以从阻塞队列中获取任务进行任务处理&#xff0c;当线程都处于繁忙状态时可以将任务加入阻塞队列中&#xff0c;等到其它的线程空闲后进行处理。 线程池作用&#xff1a; 1.降…...

输出 / 目录下所有目录文件的大小并排序

使用 du -sh /* 输出 / 目录下所有的目录总大小&#xff0c;看下效果&#xff1a; [rootlocalhost ~]# du -sh /* 0 /bin 110M /boot 0 /dev 32M /etc 12K /home 0 /lib 0 /lib64 0 /media 0 /mnt 0 /opt du: cannot access ‘/proc/2731/task/2731/fd/4’: No such file or …...

【hot100-java】【编辑距离】

多维dp篇 class Solution {public int minDistance(String word1, String word2) {char [] sword1.toCharArray();char [] tword2.toCharArray();int ns.length;int mt.length;int [][] fnew int[n1][m1];for (int j1;j<m;j){f[0][j]j;}for(int i0;i<n;i){f[i1][0]i1;for…...

随手记:牛回速归

上周-国庆前&#xff1a;牛回速归 国庆&#xff1a;小心被套住 国庆后&#xff1a;一片迷茫 总结&#xff1a;要是上周到国庆前的基本都能捞到&#xff0c;后面情况不好说 后续持续更新...

UI设计师面试整理-设计过程和方法论

在UI设计师面试中,清晰地阐述你的设计过程和方法论是至关重要的。这不仅可以展示你的专业技能和设计思维,也能让面试官看到你是如何解决实际设计问题的。以下是一个全面的UI设计过程和常用方法论的概述,你可以根据你的经验进行相应调整。 1. 设计过程 a. 研究与发现阶段(Re…...

哪个网站可以做1040/排名优化公司口碑哪家好

转载于:https://blog.51cto.com/williamliuwen/1686493...

高端网站建设webbj/网页友情链接

React的路由其实就是一个React组件&#xff0c;路由要通过Route组件定义。例子&#xff1a; import * as React from "react"; import {IndexRedirect ,Route} from react-router;import Home from ../components/home; import ImgUpload from ../components/uploadI…...

响应式外贸网站建设/沈阳seo合作

作者&#xff1a;桂。 时间&#xff1a;2017-03-27 20:26:17 链接&#xff1a;http://www.cnblogs.com/xingshansi/p/6628785.html 声明&#xff1a;欢迎被转载&#xff0c;不过记得注明出处哦~ 【读书笔记06】 前言 看到西蒙.赫金的《自适应滤波器原理》第四版第四章&#xf…...

施工企业财务经理年终总结/网站排名优化培训课程

全网最全最新最细的MYSQL5.7下载安装图文教程 一、MYSQL两种安装包格式 MySQL安装文件分为两种&#xff0c;一种是msi格式的&#xff0c;一种是zip格式的。zip格式相当于绿色版&#xff0c;不需要安装&#xff0c;只需解压缩之后就可以使用了&#xff0c;但是要进行配置。msi…...

基于html做电商网站论文/北京百度推广官网首页

&#x1f320; 『精品学习专栏导航帖』 &#x1f433;最适合入门的100个深度学习实战项目&#x1f433;&#x1f419;【PyTorch深度学习项目实战100例目录】项目详解 数据集 完整源码&#x1f419;&#x1f436;【机器学习入门项目10例目录】项目详解 数据集 完整源码&…...

期货贵金属网站源码建设/如何介绍自己设计的网页

1、用预编译指令符可以避免在多文件工程中调用文件的时候可能出现的重复定义的现象。比如&#xff1a;Main.cpp#include “Animal.h”#include “Fish.h”……Animal.hclass Animal(){}Fish.h#include “Animal.h”class Fish():public Animal{}因此在调用Main.cpp的时候先运行…...