OneTrans:字节跳动如何用一个 Transformer 统一推荐系统的特征交互与序列建模

推荐系统的 ranking 模型做两件事:特征交互(用户画像、物品属性、上下文之间的交叉)和序列建模(从用户行为历史里捕捉兴趣演化)。过去十年,这两件事一直由两套独立的模块完成——DNN/FM 系列做特征交互,DIN/SASRec 系列做序列建模。两套模块各自迭代,各自 scale,各自维护。

字节跳动在 2024-2025 年分别把这两条路线推到了极致:Wukong(KDD 2024)用 FM 架构把特征交互 scale 到了前所未有的参数量,LONGER(WWW 2025)把用户行为序列建模拉长到 10000+ 步。两条路线都拿到了显著的线上收益。但当团队试图同时 scale 两个模块时,发现了一个结构性瓶颈:两个独立模块的参数量和计算量是相加的,serving 的延迟和成本是叠加的,而它们对同一份用户表示的理解却各自为政。

OneTrans(WWW 2026)是字节跳动的回答:用一个 Transformer backbone 同时完成特征交互和序列建模,用统一的 tokenization 和混合参数化来处理结构化特征和行为序列之间的本质差异。线上 A/B 测试结果是 per-user GMV 提升 5.68%。这个数字在推荐系统的存量优化里非常可观——通常一个 ranking 模型的迭代能拿到 0.3-0.5% 就值得全量上线。

本文从四个问题出发:OneTrans 是什么,为什么要走统一架构这条路,最终拿到了什么 ROI,以及如果想学习这个方向应该从哪里开始。

什么是 OneTrans

推荐 ranking 模型的两个核心任务

先明确这两件事各自在做什么。

特征交互(Feature Interaction):用户侧有年龄、性别、城市、设备等画像特征,物品侧有品类、价格、品牌等属性特征,还有时间、位置、网络环境等上下文特征。这些特征之间的交叉蕴含了推荐信号——比如”25 岁女性 + 美妆品类 + 晚间时段”是一个有意义的交叉模式。FM、DeepFM、DCN 系列模型的核心工作就是高效地学习这些交叉。

序列建模(Sequence Modeling):用户在过去一段时间里点击、购买、浏览了哪些商品,构成了一条行为序列。从这条序列里捕捉用户兴趣的演化——比如用户最近从浏览手机转向了浏览耳机,说明兴趣发生了迁移。DIN、DIEN、SASRec、BERT4Rec 系列模型专门做这件事。

传统做法是把两个模块拼接在一起:序列建模模块输出一个用户兴趣向量,和特征交互模块的输出拼接后送入最终的 MLP 预测点击率。

graph LR
    subgraph traditional["传统双模块架构"]
        direction TB
        subgraph fi["特征交互模块"]
            direction LR
            UF["用户画像"] --> FM["FM/DCN"]
            IF["物品属性"] --> FM
            CF["上下文"] --> FM
        end
        subgraph sm["序列建模模块"]
            direction LR
            SEQ["行为序列"] --> ATT["DIN/SASRec"]
        end
        FM --> CONCAT["拼接"]
        ATT --> CONCAT
        CONCAT --> MLP["MLP 输出"]
    end

    subgraph unified["OneTrans 统一架构"]
        direction TB
        ALL["所有特征 + 行为序列"] --> TOK["统一 Tokenizer"]
        TOK --> TF["一个 Transformer"]
        TF --> OUT["统一输出"]
    end

    style UF fill:#d3f9d8,stroke:#2f9e44,stroke-width:1px
    style IF fill:#d3f9d8,stroke:#2f9e44,stroke-width:1px
    style CF fill:#d3f9d8,stroke:#2f9e44,stroke-width:1px
    style SEQ fill:#e5dbff,stroke:#5f3dc4,stroke-width:1px
    style FM fill:#ffe8cc,stroke:#d9480f,stroke-width:2px
    style ATT fill:#ffe8cc,stroke:#d9480f,stroke-width:2px
    style CONCAT fill:#f8f9fa,stroke:#868e96,stroke-width:1px
    style MLP fill:#c5f6fa,stroke:#0c8599,stroke-width:2px
    style ALL fill:#d3f9d8,stroke:#2f9e44,stroke-width:1px
    style TOK fill:#ffe8cc,stroke:#d9480f,stroke-width:2px
    style TF fill:#e5dbff,stroke:#5f3dc4,stroke-width:2px
    style OUT fill:#c5f6fa,stroke:#0c8599,stroke-width:2px

OneTrans 的四个核心设计

OneTrans 的目标是让一个 Transformer 同时做好这两件事。但直接把所有特征和行为序列拼成一条序列扔进 Transformer 是不行的——结构化特征和行为序列在统计性质上有根本差异。OneTrans 用四个设计来解决这些差异。

设计一:Unified Tokenizer。 推荐系统的输入是异构的:有些是类别型(性别、城市),有些是数值型(价格、年龄),有些是序列(行为历史)。OneTrans 设计了一个统一的 tokenizer,把所有这些异构输入转换成统一的 token 序列。具体做法是给每个属性字段(field)分配一个 token 位置,通过 field-specific embedding 把不同类型的原始值映射到同一个向量空间。行为序列中的每个历史 item 也被映射为一个 token。最终,一个推荐请求变成了一条由”属性 token + 序列 token”组成的统一序列。

设计二:Mixed Parameterization。 这是 OneTrans 最关键的创新。序列 token(行为历史中的 item)天然有很强的共性——它们都代表”用户交互过的 item”,应该共享参数来学习序列内的依赖关系。但非序列 token(用户画像、物品属性、上下文)彼此之间的统计分布差异很大——“年龄”和”品类”需要完全不同的变换来捕捉各自的信号。

OneTrans 的方案是:在 Transformer 的每一层,序列 token 共享同一套 QKV 投影和 FFN 参数;非序列 token 则每个 token 位置有独立的参数。这样序列 token 之间可以高效地做自注意力(和 SASRec 一样),同时非序列 token 保持了足够的区分能力(和 DCN 一样)。

这个设计和上一篇博客里讨论过的 GPR 的 Token-Aware FFN/LN 是同一个思想:异构 token 不能用均一参数混合处理。 两篇独立的工业论文收敛到了同一个结论。

设计三:Pyramid Stack。 行为序列很长(可达 10000+ 步),但 Transformer 的 self-attention 复杂度和序列长度平方成正比。OneTrans 的做法是在 Transformer 的层间逐步裁剪序列 token 的数量——底层用完整序列捕捉细粒度模式,高层只保留最重要的序列 token 做全局聚合。类似图像领域的 Pyramid Vision Transformer,用层级结构在精度和效率之间取得平衡。

设计四:Cross-Request KV Caching。 这是 OneTrans 在 serving 上的关键优化。在传统架构中,同一个用户的每个候选广告都要重新计算用户侧的表示——如果有 C 个候选,用户侧就被计算 C 次。OneTrans 利用 Transformer 的 KV cache 机制,把用户侧(画像 + 行为序列)的 Key 和 Value 预计算好,对该用户的所有候选共享这份缓存。用户侧计算从 O(C) 降到 O(1)。这和 LLM 推理中 prefill + decode 分离的思路完全一致。

为什么要走统一架构这条路

字节跳动的演进路径:从分别 scale 到发现天花板

理解 OneTrans 的动机,需要先看字节跳动在 2023-2025 年走过的 scaling 路径。

Phase 1:分别 scale 特征交互和序列建模。

2024 年,Wukong(KDD 2024)用 stacked factorization machine 的方式把特征交互模块做大。核心发现是推荐系统的特征交互也有 scaling law——模型参数量增加时,预测准确率持续提升,没有饱和。

同期,LONGER(WWW 2025)把序列建模的行为历史从几百步拉长到 10000+ 步。更长的序列覆盖了更多的用户兴趣变化,带来了显著的增量。

两条路线各自拿到了不错的线上收益。

Phase 2:发现分开 scale 的天花板。

当团队试图同时用更大的 Wukong 和更长的 LONGER 时,遇到了三个问题:

第一,参数量和计算量是叠加的。特征交互模块有自己的参数,序列建模模块有自己的参数,两者的参数量和 FLOPs 直接相加。如果各自 scale 2x,总计算量是 4x。

第二,serving 复杂度是叠加的。两个模块有各自的缓存策略、各自的推理优化、各自的资源配置。运维成本随模块数线性增长。

第三,也是最根本的——两个模块对用户表示的理解是割裂的。特征交互模块学到的”这个用户对美妆品类有偏好”和序列建模模块学到的”这个用户最近在看耳机”,在最终拼接之前没有任何交互。拼接层的 MLP 需要从两个独立表示中重新发现它们之间的关联,这是一个不必要的信息瓶颈。

graph TB
    subgraph phase1["Phase 1: 分别 Scale (2024)"]
        direction LR
        W["Wukong<br/>特征交互 Scale"] --- L["LONGER<br/>序列长度 Scale"]
    end

    subgraph phase2["Phase 2: 联合 Scale 的困境"]
        direction TB
        P1["参数量叠加 2x+2x=4x"]
        P2["Serving 复杂度叠加"]
        P3["用户表示割裂"]
    end

    subgraph phase3["Phase 3: 统一架构 (2025)"]
        direction LR
        OT["OneTrans<br/>一个 Transformer 做两件事"]
    end

    phase1 --> phase2
    phase2 --> phase3

    style W fill:#e5dbff,stroke:#5f3dc4,stroke-width:2px
    style L fill:#e5dbff,stroke:#5f3dc4,stroke-width:2px
    style P1 fill:#ffe3e3,stroke:#c92a2a,stroke-width:1px
    style P2 fill:#ffe3e3,stroke:#c92a2a,stroke-width:1px
    style P3 fill:#ffe3e3,stroke:#c92a2a,stroke-width:1px
    style OT fill:#d3f9d8,stroke:#2f9e44,stroke-width:2px

统一的三个结构性优势

OneTrans 的统一架构直接解决了上述三个问题。

优势一:表示共享意味着特征交互和序列建模互相增强。 在 OneTrans 的 Transformer 里,序列 token 和非序列 token 在每一层都通过注意力机制交互。这意味着序列建模可以利用物品属性来理解行为(“用户点了一个 200 元的耳机”比”用户点了 item_37291”包含更多信息),同时特征交互可以利用行为上下文来理解属性(“用户在手机品类上有兴趣”这个信号可以和用户最近的浏览序列相互验证)。消融实验证实了这一点:去掉序列 token 或去掉非序列 token,模型效果都会显著下降,且下降幅度大于各自独立模型的差距——说明两者的联合建模产生了 1+1>2 的效果。

优势二:一个模型 scale 比两个模型 scale 成本低。 只有一套参数、一次前向传播、一份 KV cache、一套推理优化。scale 2x 就是 2x 的计算量增长,不是 4x。训练也只需要一份数据 pipeline、一个训练任务、一套超参数搜索。

优势三:Cross-Request KV Caching 自然成立。 在统一架构里,用户侧的所有信息(画像特征 + 行为序列)都在同一个 Transformer 的前半部分处理。这份计算结果天然可以用 KV cache 在所有候选之间共享。在分离架构中,这种共享需要两个模块各自实现各自的缓存机制,工程复杂度更高。

行业共识:统一架构是方向

OneTrans 不是孤例。字节内部同期还有 HyFormer(混合统一架构)在做类似的统一尝试。快手的 OneRec 从另一个方向走到了同一个终点——它用生成式推荐的范式,同样实现了端到端的统一模型。

更广泛地看,推荐系统的演化路径和 NLP 高度一致:先是专用模型各做各的(word2vec 做 embedding、LSTM 做序列、CNN 做特征提取),最终被一个统一的 Transformer 架构全部替代。推荐系统正在走同样的路。

最终的 ROI 结果

OneTrans 的线上数字

OneTrans 在字节跳动的电商推荐场景全量部署,线上 A/B 测试结果:

指标提升幅度
Per-user GMV+5.68%
Scaling 验证参数量增加时近 log-linear 的效果提升
推理效率Cross-request KV caching 显著降低用户侧重复计算

论文同时验证了 OneTrans 在离线指标上一致优于 Wukong、LONGER、RankMixer 等 baseline——不是在某些指标上好某些差,而是全面优于。

字节跳动 scaling 路线的其他产出

OneTrans 不是字节 scaling 实验的唯一产出。同一条技术路线上还有几个值得注意的数字:

TokenMixer-Large / RankMixer:把 token-mixing 架构(类似 MLP-Mixer)scale 到 7B-15B 参数级别,线上订单 +1.66%,GMV +2.98%。这个实验验证了推荐模型在大参数量下的持续收益,但也暴露了 serving 成本的挑战——15B 参数的推荐模型在延迟预算内 serve 需要大量的工程优化。

UG-Sep(CIKM 2025):专门解决统一模型的 serving 效率。核心思路是把用户侧(User)和物品侧(Good/Item)的计算分离预处理,减少在线实时计算的负担。这是 OneTrans Cross-Request KV Caching 思想的更激进版本。

快手 OneRec 的对照

快手的 OneRec 从不同的技术路径(生成式推荐)到达了相似的目标——端到端统一模型:

指标数值
App Stay Time+0.54%(主端)/ +1.24%(极速版)
QPS 占比处理 25% 的总 QPS
OPEX仅为传统 pipeline 的 10.6%

OneRec 最值得关注的不是效果数字,而是 OPEX 数字。传统 pipeline 的运维成本有超过 50% 花在多模块之间的通信和存储上,统一模型直接消除了这部分开销。

这些数字意味着什么

推荐系统是存量优化的战场。在字节和快手这种日活数亿的系统上,ranking 模型的一次迭代能拿到 0.3-0.5% 的指标提升就已经值得全量上线。OneTrans 的 5.68% GMV 提升和 OneRec 的 OPEX 降低到 10.6%,不是常规迭代能达到的幅度——它们来自架构层面的范式切换,而非模型层面的微调。

这也解释了为什么字节和快手都在投入大量工程资源推进统一架构。这不是一次性的收益,而是打开了新的 scaling 空间:统一模型可以持续通过增加参数量来获得近 log-linear 的收益提升,而传统分离架构的 scaling 效率要低得多。

如果想学习这个方向,应该如何入门

推荐的学习路径

这个方向涉及推荐系统、Transformer 架构、大规模系统工程三个知识域。以下是一条从基础到前沿的路径。

graph TB
    subgraph level1["Level 1: 推荐系统基础"]
        direction LR
        DIN["DIN/DIEN<br/>注意力做序列建模"] --> DCN["DCN/DeepFM<br/>显式特征交叉"]
    end

    subgraph level2["Level 2: Transformer 在推荐中的应用"]
        direction LR
        SAS["SASRec/BERT4Rec<br/>自注意力序列建模"] --> AUTO["AutoInt/InterFormer<br/>Transformer做特征交互"]
    end

    subgraph level3["Level 3: Scaling"]
        direction LR
        WK["Wukong<br/>特征交互 Scaling"] --> LG["LONGER<br/>序列长度 Scaling"]
    end

    subgraph level4["Level 4: 统一架构"]
        direction LR
        OT2["OneTrans<br/>统一 Backbone"] --> OR["OneRec<br/>生成式统一"]
    end

    level1 --> level2
    level2 --> level3
    level3 --> level4

    style DIN fill:#d3f9d8,stroke:#2f9e44,stroke-width:2px
    style DCN fill:#d3f9d8,stroke:#2f9e44,stroke-width:2px
    style SAS fill:#e5dbff,stroke:#5f3dc4,stroke-width:2px
    style AUTO fill:#e5dbff,stroke:#5f3dc4,stroke-width:2px
    style WK fill:#ffe8cc,stroke:#d9480f,stroke-width:2px
    style LG fill:#ffe8cc,stroke:#d9480f,stroke-width:2px
    style OT2 fill:#c5f6fa,stroke:#0c8599,stroke-width:2px
    style OR fill:#c5f6fa,stroke:#0c8599,stroke-width:2px

Level 1:推荐系统基础。 理解推荐系统 ranking 模型的基本框架。重点读两篇:DIN(阿里,2018)解释了为什么用注意力机制做序列建模,DeepFM/DCN(华为/Google)解释了为什么需要显式的特征交叉。这两篇是后续所有工作的基础。如果时间有限,只看 DIN 和 DCN v2 就够了。

Level 2:Transformer 在推荐中的应用。 SASRec(2018)把 self-attention 引入推荐序列建模,BERT4Rec(2019)尝试了双向注意力。这两篇解决的是序列建模的范式升级。同时看 AutoInt(2019),理解 Transformer 如何做特征交互——这是 OneTrans 统一两者的思想源头。

Level 3:Scaling。 Wukong(字节,KDD 2024)和 LONGER(字节,WWW 2025)是必读的。Wukong 证明了推荐系统有 scaling law,LONGER 证明了更长的序列能持续带来收益。理解这两篇,就理解了为什么 OneTrans 的统一 scale 比分别 scale 更高效。

Level 4:统一架构。 到这一层才读 OneTrans(WWW 2026)和 OneRec(快手,2025)。有了前三层的积累,OneTrans 的设计动机和技术选择会非常清晰——它解决的每一个问题,都能在前面的论文里找到对应的局限性。

工程视角的补充阅读

如果你的角色偏工程而非算法,有几篇额外值得看的:

  • UG-Sep(字节,CIKM 2025):专门讲统一模型的高效 serving,包括用户侧/物品侧分离预计算、KV cache 策略等。对理解大模型在推荐系统里怎么 serve 非常有帮助。
  • GR4AD 的 LazyAR(快手,2026):讲了 Transformer 推理中 layer 间依赖不对称性的优化,QPS 翻倍,收入损失仅 -0.15%。思路简洁,实现成本低。
  • vLLM / SGLang 相关文档:统一推荐模型的 KV caching 策略和 LLM 的 KV cache 管理高度相似。理解 PagedAttention、prefix caching 这些概念,对推荐模型的 serving 优化有直接帮助。

最后

推荐系统正在经历一次和 NLP 类似的范式迁移:从专用模块拼接走向统一 Transformer 架构。OneTrans 的 5.68% GMV 提升和 OneRec 的 10.6% OPEX 证明了这条路线的商业价值。但更重要的是,统一架构打开了 scaling 的空间——推荐系统第一次有机会像 LLM 那样,通过持续增加模型规模来获得可预测的效果提升。

对于从业者来说,这个方向的窗口期正在收窄。字节和快手已经跑通了从论文到全量部署的全流程。下一步的竞争不在”要不要做统一架构”,而在”谁能把模型 scale 得更大、serve 得更快”。


References: