← 返回论文列表
论文解读

TRM:用语义 Token 替代 Item ID

Farewell to Item IDs: Unlocking the Scaling Potential of Large Ranking Models via Semantic Tokens

作者
Zhao et al. · ByteDance
年份
2026
来源
arXiv 2601.22694
核心命题
Semantic Token 替代 Item ID

一句话总结

Item ID 本质上是孤立符号,难以共享知识、不利于大模型 scaling;而 Semantic Token 位于更稳定、可共享的语义空间,更适合大规模排序模型持续扩张。

原文:https://arxiv.org/abs/2601.22694

代码:未开源

核心贡献:提出 TRM 框架,从 协同感知表示学习混合 tokenization联合优化 三个层面系统解决"语义 token 替代 item ID 后老 item 性能下降"的问题,并在线上搜索场景验证效果。

背景与动机

推荐系统中的大型排序模型通常把每个 item 视为一个独立的 ID,再为它分配一个独立 embedding。这种方式简单直接,但一旦 item 集合快速演化,就会暴露出四个根本问题:

  1. 冷启动问题:新 item 没有足够点击和交互,embedding 训练不充分。
  2. 知识遗忘:旧 item 退役后,embedding 中承载的知识一起消失,无法迁移给新 item。
  3. 分布不稳定:item ID 集合不断变化,导致 sparse 表分布波动,dense 参数也更难稳定收敛。
  4. 扩展瓶颈:embedding table 随 item 数量线性膨胀,参数巨大,但知识共享能力很差。
Figure 1: ID-based vs Token-based Scaling 对比
Figure 1:ID-based 模型在 scaling up 时 norm variance 波动显著,token-based 模型分布更平滑;图中直观展示了 new ID emerging(冷启动)和 old ID retirement(知识遗忘)两个核心问题。
论文的问题意识非常明确:不是简单证明"token 比 ID 好",而是要回答:为什么 token 更适合 scaling?以及为什么已有 semantic token 方法对老 item 会掉点?

作者给出的理论直觉是:Semantic Token 构成一个更封闭、更稳定、更有结构的集合。根据 scaling law:

$$ L \propto N^{-\beta} $$
符号说明
  • $L$:模型在测试集上的损失值
  • $N$:模型参数量
  • $\beta$:scaling 指数,越大表示增加参数带来的收益越显著(曲线越陡)

含义:作者认为 token-based 表示具有更小的有效维度和更好的语义平滑性,因此能获得更大的 $\beta$,即同样增加参数时收益更大。

相关工作如 TIGER、OneRec、SemID 已尝试用 semantic token 替代 item ID,但它们在新 item 上常有优势,在老 item 上却容易掉点。TRM 的真正创新点在于把这个现象拆开讲清楚,并给出有针对性的解决方案。

端到端完整流程(带例子)

TRM 分四个阶段,每个阶段的输入输出都不同,先看全局再深入细节:

▶ 四阶段流水线总览
Stage 1
MLLM Caption 训练
视频→文字描述
内容信号
Stage 2
协同对齐训练
co-click 对比学习
协同信号注入
Stage 3
离线量化 (RQ-Kmeans)
dense embedding
→ SID (gen-token)
Stage 4
排序模型训练
CTR loss + NTP loss
联合优化

一个视频从原始内容到 SID 的完整例子

目标视频:「制作拿铁咖啡,有心形拉花」

Stage 1 — MLLM Caption 训练(自回归①,文字自回归)

输入:视频帧 + 标题 "latte art heart" + ASR "搅拌牛奶奶泡" + OCR
目标:预测 caption token 序列 →「这个视频展示了一个拿铁咖啡,有心形拉花艺术。」
注意:这里预测的是文字 token,不是 SID,和协同信号无关。

Stage 2 — 协同对齐(co-click 对,真正的协同过滤)

收集行为日志:用户 U1 一次 session 里同时点击了「拿铁咖啡心形拉花」和「卡布奇诺做法」
→ 这两个视频构成一个 item-item co-click 正例对
→ 对比学习:拉近两者的 MLLM dense embedding,推开 batch 内其他不相关视频

同时也构建 query-item 对:用户搜「咖啡做法」后点击该视频 → 正例对

训练目标:$\mathcal{L}_{rep} = \mathcal{L}_{cap} + \lambda \cdot \mathcal{L}_{align}$(caption loss 和对比 loss 同时优化同一个 MLLM)

Stage 3 — 离线量化(RQ-Kmeans,生成 gen-token)

固定 MLLM,对每个视频做 forward pass,取最后一层 mean pooling 得到 dense vector $h$

「拿铁心形拉花」→ $h = [0.72, -0.31, 0.55, \ldots]$(协同信号已注入)

RQ-Kmeans(5层,每层 4096 个 centroid)离线聚类:
  Layer 1:最近邻 centroid = 312   (粗粒度:饮品类)
  Layer 2:最近邻 centroid = 87    (中粒度:咖啡类)
  Layer 3:最近邻 centroid = 1609  (细粒度:拿铁)
  Layer 4:最近邻 centroid = 24    (更细:有拉花)
  Layer 5:最近邻 centroid = 7     (最细:心形)

gen-token SID = [312, 87, 1609, 24, 7](共 5 个离散 code)

同时 BPE 扫描训练集高频 k-gram:
  (312, 87) 出现 800 万次 → BPE 合并为 mem-token ID = 3_1
  (312, 87, 1609) 出现 200 万次 → BPE 合并为 mem-token ID = 3_16_9
mem-token 集合 = {3_1, 3_16_9, 3_16_9_0, ...}

Stage 4 — 排序模型训练(自回归②,SID 自回归,协同信号)

gen-token [312, 87, 1609, 24, 7] → hash embedding 表(随机初始化,与 codebook 无关
mem-token {3_1, 3_16_9, ...} → 另一套 hash embedding 表
→ Wide & Deep 融合 → item embedding → 送入 RankMixer 排序模型

判别式 loss(CTR):用户点击/未点击 → BCE loss 更新 embedding + 排序模型参数

生成式 loss(NTP,自回归②):
给定:用户历史 [搜「咖啡」→ 点视频A, 点视频B] + query「拿铁做法」
目标:依次预测正样本视频的 gen-token 序列
  预测 $s_1$:P(312 | query, user_history) → CE loss
  预测 $s_2$:P(87 | query, user_history, 312) → CE loss
  ...(层层自回归,强迫模型学 SID 层次结构)

注意:这里自回归的是 SID token,不是文字,和 Stage 1 的 caption 自回归完全不同!

两个「自回归」的区别(常见误区):
① Stage 1 的 caption loss:单视频 → 生成文字描述,预测文字 token,无跨视频信息,无协同信号
② Stage 4 的 NTP loss:给定用户+query,预测正样本的SID token 序列,是真正的行为信号,发生在量化之后

方法详解

TRM(Token-based Recommendation Model)由三个模块组成:先学一个"带用户行为语义"的 item 表示,再把它 token 化(同时保住泛化和记忆),最后用判别式 + 生成式联合训练把 token 结构吃干榨尽。

Figure 2: TRM 整体框架
Figure 2:TRM 框架全貌。左侧是协同感知的表示学习(模块 I),中间是 gen-token 与 mem-token 的混合 tokenization(模块 II),右侧是判别式 + 生成式联合优化(模块 III)。

模块 I:Collaborative-aware Representation(协同感知表示学习)

目标:学习一个既懂内容语义、又懂用户行为偏好的 item embedding,作为后续 tokenization 的基础。分两个阶段,两个阶段对同一个 MLLM 序贯微调

第一阶段:In-domain Captioning(领域适配)

用短视频领域数据微调多模态大模型(Qwen2.5-VL),让模型学会理解视频帧、标题、ASR 和 OCR。损失函数是对每个视频的文字 caption 做自回归预测:

$$\mathcal{L}_{cap} = -\mathbb{E}_{(V,T)} \sum_{k=1}^{|T|} \log P\bigl(t_k \mid t_1,\ldots,t_{k-1}, V;\,\theta\bigr)$$
符号说明
  • $V$:视频的视觉输入(帧图像等)
  • $T = t_1, \ldots, t_{|T|}$:目标 caption 的文字 token 序列
  • $t_k$:caption 中第 $k$ 个文字 token(不是 SID,不是视频序列)
  • $\theta$:多模态大模型参数

⚠️ 这一步的自回归预测的是「文字 token」,不是用户行为序列,和协同信号无关。

第二阶段:Collaborative Alignment(协同对齐,同一 MLLM 继续训练)

在 Stage 1 基础上,加入真正的协同信号——经常被同一用户共同点击的 item 对(co-click pairs),用对比学习拉近它们的 embedding:

$$\mathcal{L}_{align} = -\mathbb{E}_{(a,b)\in\mathcal{P}} \log \frac{\exp\!\bigl(\mathrm{sim}(h_a,h_b)/\tau\bigr)}{\sum_{b'\in\mathcal{B}} \exp\!\bigl(\mathrm{sim}(h_a,h_{b'})/\tau\bigr)}$$
符号说明
  • $(a,b)$:正例对——query-item 正反馈对,或同一 session 内 co-click 的 item-item 对
  • $h_a, h_b$:从 MLLM 最后一层 mean pooling 得到的 dense embedding
  • $\tau$:温度超参数;$\mathcal{B}$:in-batch 负样本

✅ 这才是真正的「协同」——利用两个 item 被同一用户共同点击的关系,而非单个 item 的点击频次。

两阶段联合目标(Stage 2 里 caption loss 和 contrastive loss 同时优化):

$$\mathcal{L}_{rep} = \mathcal{L}_{cap} + \lambda_{align} \cdot \mathcal{L}_{align}$$

没有协同对齐时的问题

视频 A「制作泡芙」和视频 B「制作拿铁」画面风格相似,内容 embedding 很近,但用户群体完全不同(厨艺爱好者 vs 咖啡爱好者)。量化后两者 SID 相同,排序时无法区分。

有协同对齐后

用「咖啡视频和拿铁视频经常被同一用户一起点击」这个 co-click 信号,把同属咖啡兴趣的视频拉近,把厨艺视频推远。量化后 SID 更好地反映用户偏好而非表面内容相似度。

模块 II:Hybrid Tokenization(混合 Token 化)

Stage 2 训练好的 MLLM 固定权重,对每个 item 提取 dense embedding,再用 RQ-Kmeans(不是 RQ-VAE,是 K-means 变体)离线批量量化为 gen-token SID。

已有 semantic token 方法对老 item 掉点的根因:残差量化是粗粒度聚类,token 序列的简单 sum/concat 无法表达组合语义。

例:gen-token 序列里 code_3 = "蛋糕",code_16 = "蜡烛"。
[3, 16] 的 embedding sum 不会自动学到「生日」这个语义——组合知识需要独立的 token。
Figure 3: AUC Gain vs Item Lifetime
Figure 3:已有 token 方法(OneRec、Semid、Tiger)随 item 曝光时间增加逐渐掉点;TRM 的 Hybrid Tokens 全生命周期保持正向收益。

Gen-token + Mem-token 并行

  • Gen-tokens(泛化):RQ-Kmeans 生成,5层 × 4096 codes = 总 20,480 个 token,负责粗粒度语义共享,适合新 item 和长尾 item。
  • Mem-tokens(记忆):BPE 从 gen-token 的高频 k-gram 中挖出,最多 20M 个。负责记住老 item 的高频组合模式(「蛋糕+蜡烛」→ 分配一个独立 mem-token ID)。
Mem-token 的本质限制:Mem-token 是 SID 的函数,SID 相同的两个 item,mem-token 也必然相同,无法区分 SID 碰撞的 item。TRM 的设计意图是用 mem-token 解决「组合语义记忆」问题,不是解决碰撞问题。

二者通过 Wide & Deep 结构融合:

$$h_{hybrid} = h_{deep}(\text{gen-tokens}) + h_{wide}(\text{mem-tokens})$$
说明
  • gen-token 和 mem-token 各走独立的 hash embedding 表(随机初始化,与 RQ-Kmeans codebook 无关)
  • Deep 侧加 random dropout 防过拟合;Wide 侧不加 dropout,稳定记忆高频组合
Figure 5: Mem-token 数量 vs AUC Gain
Figure 5:mem-token 从 5M 增到 20M,老 item(>7天)AUC 增益最大(+0.11%),新 item(<1天)增益较小(+0.06%),符合「mem-token 主要帮助记忆老 item 高频组合」的设计意图。

模块 III:Joint Optimization(判别式 + 生成式联合训练)

如果只把 token 当独立 feature 喂给排序模型,token 序列的层级结构(L1=粗类,L2=细类…)没有被学到。TRM 加入生成式目标强迫模型感知这个结构。

判别式目标(CTR/Like/Real-play)

$$\mathcal{L}_d = \mathbb{E}\;\mathrm{BCE}\!\bigl(Y,\;P(\hat{Y} \mid X_Q, X_I, X_U;\,\theta_d)\bigr)$$

生成式目标(自回归②:对正样本 item 的 SID 序列做 NTP)

$$\mathcal{L}_g = \mathbb{E}_{(X_Q,X_U,Y)}\;\mathbf{1}[Y{=}1]\cdot\sum_{j=1}^{L}\mathrm{CE}\!\bigl(s_j,\;P(\hat{s}_j \mid X_Q, X_U, s_{
符号说明
  • $s_j$:item 的第 $j$ 层 gen-token(SID 的第 j 个 code)
  • $\mathbf{1}[Y=1]$:只对正样本计算生成 loss
  • $L=5$:SID 层数,等于 RQ-Kmeans 的层数
  • $\theta_g$:独立的 4 层 Causal Transformer(Semi-causal mask:context token 互相可见,SID token 严格因果)

消融:去掉 NTP loss 后 QAUC 从 +0.05% 降到 +0.01%;换成 Positional Encoding 只有 +0.02%,说明提升来自生成目标本身而非位置信息。

联合目标

$$\mathcal{L} = \mathcal{L}_d + 0.1 \cdot \mathcal{L}_g$$

TRM vs SemID:看起来像,实际上差很多

你可能觉得「两者都是 RQ 量化 → SID → 排序模型」,本质没区别。但实际上三个核心维度都不同:

维度 SemID(Google,2023) TRM(ByteDance,2026)
SID 的信号来源 纯内容信号(视觉/文本 embedding),无用户行为 内容信号 + co-click 协同信号(Stage 2 对比学习已注入 MLLM)
量化方法 RQ-VAE(可训练的残差向量量化器) RQ-Kmeans(K-means 变体,更简单稳定)
SID → embedding 的方式 SID token 查小的 embedding 表(N-gram / SPM / Prefix-Ngram),表由 CTR 信号端到端学习 gen-token 查 hash embedding 表(CTR 信号端到端学习)+ mem-token 查另一套 hash embedding 表
是否用 codebook vector ❌ 不用,SID 只作为 key,embedding 独立学习 ❌ 不用,同 SemID,与 SIDE 方案有本质区别
解决老 item 记忆问题 SPM 有一定高频组合记忆效果(合并高频 SID 共现子词),但依据是 item 内容分布(无监督统计),非用户行为信号,无专门针对老 item 的设计 BPE mem-token 依据用户点击行为频次合并高频 k-gram,明确目标是解决老 item 掉点,词表规模(20M)远大于 SPM
训练目标 纯判别式(CTR BCE loss) 判别式(CTR BCE)+ 生成式(NTP 辅助,$\lambda=0.1$)联合
目标场景 YouTube 排序(推荐,无 query) 字节搜索排序(有 query,query-item 相关性更重要)
老 item 效果 Figure 3 显示随曝光增加逐渐掉点,不如 ID baseline Hybrid Token 全生命周期正向,包括老 item

SPM vs Mem-token:看起来都在「合并高频 SID 组合」,区别在哪?

这是最容易混淆的地方。两者确实都做了「把高频 SID 组合合并为一个子词 token」,但合并的依据完全不同

SPM(SemID)的合并依据:item corpus 里的 SID 共现频次

语料库里有 5 亿个视频,每个视频都有一个 SID 序列。SPM 扫描所有视频的 SID 序列,统计哪些 code 组合出现次数最多:

视频语料里 SID 序列分布:
  (5, 12) 在 4000 万个视频的 SID 里出现 → 高频 → SPM 合并为子词 token_A
  (5, 12, 3) 在 800 万个视频里出现 → 高频 → SPM 合并为子词 token_B
  (15, 7) 在 2000 个视频里出现 → 低频 → 保持 unigram

注意:这里统计的是「有多少 item 拥有这个 SID 组合」,与用户有没有点击这些 item 完全无关。一个 SID 组合频繁,只说明这类内容的视频很多(比如「猫咪视频」多),不代表用户爱看。

Mem-token(TRM)的合并依据:用户行为日志里的点击频次

训练集里的正样本(用户实际点击的 item)的 SID 序列,统计哪些 code 组合被用户大量点击:

用户点击日志里的 SID k-gram 频次:
  (312, 87, 1609) 出现在 200 万条点击记录里 → 高频 → BPE 合并为 mem-token「m_312_87_1609」
  (5, 12, 3) 虽然视频很多(内容语料高频),但用户点击少 → 低频 → 不分配 mem-token
  (88, 21) 视频不多,但用户极爱点 → 高频 → BPE 合并为 mem-token

这里统计的是「有多少 用户点击行为 覆盖了这个 SID 组合」,是真实的用户偏好信号。

一个极端例子说明区别:
假设有一类视频「企业宣传片」,内容很多(10 万个视频,SPM 会合并它们的 SID 组合),但用户几乎不点(CTR 极低)。
SPM:会给「企业宣传片」的 SID 组合分配一个专用子词 token(因为 item 多)
Mem-token:不会(因为点击少,BPE 统计不到高频),这个 SID 组合用 gen-token unigram 来覆盖

反过来,「热门短剧」视频不多但人人爱点:
SPM:可能不合并(item 数量不够多)
Mem-token:会合并,分配独立 mem-token,专门记忆这个高频点击模式

为什么 TRM 比 SemID 在老 item 上更好?

SemID 的问题

SID 是粗粒度聚类,老 item 曝光越多,同 SID 的 item 越多,所有人共享一个 embedding,梯度越来越嘈杂。SPM 的合并依据是 item 分布,不能帮助区分「用户真正爱的」和「只是内容上相似的」。

TRM 的解法

Mem-token 依据用户点击频次合并,给「用户确实爱点的高频 SID 组合」分配独立 embedding(最多 20M 个),专门记忆这些热门 item 群体的偏好,与 gen-token 分开优化,互不干扰。

两者真正的共同点只有一个

共同点:都是「用内容信号量化得到离散 SID,再用离散 SID 查 embedding 表,表由 CTR 信号端到端学习」。SID 只是作为 key,embedding 本身和 codebook vector 无关(这点和 SIDE 不同)。

差异本质:SemID 是「只替换 ID embedding 表的 key」,TRM 在此基础上额外做了「SID 信号的协同对齐(更好的 SID)」+「mem-token 补充记忆」+「NTP loss 学层次结构」三层增强。

实验结果

主实验:效果和存储同时提升

模型 CTR AUC Real Play AUC Dense Param Sparse Param
RankMixer (ID) +0.58%+0.76%335M7.52T
SEMID Token +0.56%+0.75%345M5.08T
TRM-RankMixer +0.65%+0.85% 352M5.07T

TRM 在效果上优于 ID-based 和已有 token-based 基线,同时把 sparse 参数从 7.52T 降到 5.07T,节省约 32.6% 存储。

Scaling Law:规模越大 TRM 越占优

Figure 4: Scaling Behavior 对比
Figure 4:随着 dense 参数量(左图)和 FLOPs(右图)增加,TRM 的 qAUC 提升曲线持续上扬且与 baseline 的差距越来越大;多个 ID-based 大模型则逐渐饱和。横轴为对数刻度。
模型Dense ParamsQAUC Gain
WuKong (ID)~1.9B饱和于 +0.55%
SEMID Token1843M+0.68%
TRM-RankMixer1888M+0.75%

消融实验:Hybrid Tokenization 贡献最大

移除项CTR AUCCTR QAUC
w/o Collaborative Alignment−0.05%−0.03%
w/o Hybrid Tokenization−0.09%−0.07%
w/o Generative Objective−0.05%−0.05%

在线 A/B:业务指标全面提升

指标提升
搜索活跃天数+0.26%
更换查询率(越低越好)−0.75%
严格 CTR+0.39%
点赞率+1.51%
评论率+1.80%

个人理解

这篇论文最强的地方

  1. 把问题拆对了:不是停留在"token 好像更先进"的表面,而是具体指出已有 semantic token 方法为什么在老 item 上掉点。
  2. 方法设计有对应关系:Collaborative-aware 解决"内容语义 ≠ 用户语义",Hybrid Tokenization 解决"泛化与记忆冲突",Joint Optimization 解决"token 结构没被学到"。
  3. 理论和工程两头都站住了:既给出 scaling law 的理论解释,也做了线上 A/B,不是只在论文里成立。

还可以追问的点

  1. 链路较重:MLLM 预训练、RQ-Kmeans、BPE、联合训练,工程要求很高。
  2. 极新 item 收益有限:mem-token 对老 item 提升明显,但对刚上线的新 item 额外帮助不大。
  3. 生成目标只用正样本:负样本的 token 结构没有被系统利用,后续可能有提升空间。
核心 takeaway:Item ID 的问题在于把每个 item 当成孤立符号;Semantic Token 的优势在于把 item 放进了一个可共享、可组合、可扩展的语义空间。对大模型来说,后者显然更适合作为长期演进的基础设施。