一句话总结
Item ID 本质上是孤立符号,难以共享知识、不利于大模型 scaling;而 Semantic Token 位于更稳定、可共享的语义空间,更适合大规模排序模型持续扩张。
原文:https://arxiv.org/abs/2601.22694
代码:未开源
背景与动机
推荐系统中的大型排序模型通常把每个 item 视为一个独立的 ID,再为它分配一个独立 embedding。这种方式简单直接,但一旦 item 集合快速演化,就会暴露出四个根本问题:
- 冷启动问题:新 item 没有足够点击和交互,embedding 训练不充分。
- 知识遗忘:旧 item 退役后,embedding 中承载的知识一起消失,无法迁移给新 item。
- 分布不稳定:item ID 集合不断变化,导致 sparse 表分布波动,dense 参数也更难稳定收敛。
- 扩展瓶颈:embedding table 随 item 数量线性膨胀,参数巨大,但知识共享能力很差。
作者给出的理论直觉是:Semantic Token 构成一个更封闭、更稳定、更有结构的集合。根据 scaling law:
$$ L \propto N^{-\beta} $$- $L$:模型在测试集上的损失值
- $N$:模型参数量
- $\beta$:scaling 指数,越大表示增加参数带来的收益越显著(曲线越陡)
含义:作者认为 token-based 表示具有更小的有效维度和更好的语义平滑性,因此能获得更大的 $\beta$,即同样增加参数时收益更大。
端到端完整流程(带例子)
TRM 分四个阶段,每个阶段的输入输出都不同,先看全局再深入细节:
内容信号
协同信号注入
→ SID (gen-token)
联合优化
一个视频从原始内容到 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 结构吃干榨尽。
模块 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。
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)。
二者通过 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,稳定记忆高频组合
模块 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%,说明提升来自生成目标本身而非位置信息。