文章链接:https://arxiv.org/pdf/2601.12681
机构:字节
发布时间:2026.01
Copyright (c) Wang-Luning. All Rights Reserved.
HyFormer要解决的问题和OneTrans一样,其认为“先建模历史序列再将建模后的序列和其他非序列特征进行交互“这种两阶段的范式在表征能力和效率上都有不足,本质上是一种late-fusion、单向交互的模式(如:先将长用户历史序列使用如LONGER等query-based压缩器来进行信息压缩,然后再将带有压缩的序列信息的query通过特征交互模块如RankMixer进行和其他非序列特征的交互)。因此,其也致力于使用一个统一的类transformer模型来紧密地集成长序列建模和特征交叉,而不是把它们看成松散的分开的模块。
与OneTrans将序列tokens和非序列tokens汇总为一个统一序列不同,HyFormer逐层交替地进行Query Decoding和Query Boosting过程,前者用前层交叉更新后的表征实时生成当前层的Global tokens(初始层的是由非序列特征+序列信息meanpool汇总后产生的),作为Query来对历史序列产生的KV做attention,从而使得Query随着层数变深而语义愈发丰富,再进一步塑造序列表征,后者则通过token mixing来实现提取的序列信息和非序列特征的深度交互。可见,其并不是像LONGER等类target attention的方法那样一次性地用global信息作为query来提取历史序列信息,并用于后续的特征交互,而是在每层中都不断地重复在当前层生成Global tokens、提取序列信息、进行特征交叉的过程,从而使得序列建模和特征交叉部分存在双向的互动,逐步使得语义表征随着层数加深而变得更丰富。
设用户
在每个block中,主要可以分为Query generation、Query decoding、Query boosting三个部分:
Query Generation:
在第一层中,类似RankMixer的方式将历史序列信息根据语义来分组并生成对应的sequence tokens
想用全局信息生成
在后续的层中,如上图所示,Global tokens(queries)不再是像第一层通过MLPs对于特征直接变换生成,而是用上一层的输出作为global tokens(也即上一层的global tokens对历史序列做了attention并经过token mixing更新后的表征),可见后续每一层的queries
Query Decoding:
该步首先需要将历史序列信息转化成该层
编码历史序列信息生成表征
全transformer编码:若资源充足且追求细粒度的信息捕捉,可以使用一个标准的transformer encoder来处理历史序列:
LONGER风格的压缩编码:若序列过长且想提升编码效率,则可以使用LONGER风格的策略,使用最近的一部分历史序列作为query,通过交叉注意力来对完整历史序列进行压缩得到其表征:
不用attention的轻量编码:若场景对于latency敏感,则可以使用attention-free的方法,直接拿MLP转化历史序列为其表征:
生成该层的
由此得到提取了历史序列信息的Global tokens表征
Query Boosting:
该部分显式地实现不同特征的交叉融合,从而进一步给Global tokens注入交叉特征的额外信息。其通过RankMixer中的token mixing和PFFN来实现特征交叉和处理。
首先将上一步生成的
然后,使用一个MLP-Mixer模块对这个统一序列
然后再将每个token的同一段连接起来,得到一个新的token,如对于第
然后再将这些混合的tokens组成一个新序列,也即token mixing后的表征
进一步再使用一个Per-token FFN来对每个token进行独立的变换:
最终,进行残差连接后即可得到特征交叉后的输出结果:
这个输出会被送入下一个block作为Global tokens,进行下一轮的历史序列信息提取和特征交叉。
最后一层的输出会被送入下游任务的MLP输出预测分数。
另外,在实际场景中,用户行为通常被组织为多个异质的历史序列,例如一个视频观看序列、一个物品购买序列。像MTGR或OneTrans那样简单地将序列融合到一起会对效果产生比较差的影响,因此HyFormer中面对多序列时对它们单独进行处理,也即每个序列会独享自己的Q/K/V等。