← Back to list
X-Rec

X-Rec Technical Report

生成式推荐 ByteDance
Abstract 9 │ Reading 8 │ Rating —
2026-09-24
Kun Xu, Zhiwei Wang, Chenglei Shen, Chenzhe Huang, Dong Jiang, Hongjie Gao, Jue Zhang, Lincan Cai, Nan Zhuang, Pan Zhang, Shi Chen, Shunchi Zhang, Xiaoyu Ye, Yang Jin, Yu Zhang, Zhenwei An, Zhongtao Jiang, Ao Xu, Chenghao Liu, Han Xia, Hantian Su, Haoyang Yao, Huixiu Jin, Jialin Li, Jianyuan Bo, Jie Li, Jingwei Li, Junwen Chen, Kailin Ding, Kangcheng Luo, Lin Chen, Linjie Wang, Mengshi Chen, Ming Zhang, Rengzhi Wang, Silong Yu, Song Jin, Tingyan Li, Weixin Wang, Xin Chen, Xuhang Xiao, Yiming Jia, Yinong Lin, Yifeng Yao, YongKang Zhang, Yuxiao Zhang, Zhangyi Chen, Zhao Wang, Zheng Li, Zixuan Wang
ByteDance, TikTok
X-Rec(字节 TikTok)用黎曼流匹配在超球面物品向量空间直接建模推荐分布、采样 20 个触发器接 ANN 召回,配合 anchor 粗分类条件与只在最后一层去噪的 late-interaction DiT,在同骨干下以 3.46× 触发器生成吞吐追平 SID 自回归(R@20 10.76 vs 10.23,但 R@50 反输),作为新召回源在 TikTok 垂类两次上线累计垂类互动 +4.15%。
评分原因
摘要评分:生成式召回核心新架构:在连续物品向量空间用黎曼流匹配直接学推荐分布,绕开 SID 量化误差与自回归低吞吐(3.46x);摘要明确已在 TikTok 垂类作为新召回源两次上线并取得线上收益。
精读评分:连续向量空间黎曼 FM 多触发器召回 + late-interaction DiT 有同骨干 AR/U2I 受控对照并在 TikTok 垂类两次上线,扎实;但 3.46× 仅为不含 ANN 的离线触发器生成 QPS,R@50 上反输 X-Rec-AR(12.70 vs 13.29),追平 SID-AR 依赖 anchor(≈首层 SID 分类,消融 −2.05pp 远超 0.53pp 领先),线上对照是无该召回源的旧系统、大盘仅 +0.011%,且未引用同团队底座几乎相同的 MO-DiT,不到 9 分。
diffusion normalizing-flow transformer industrial inference-serving

X-Rec Technical Report:在连续物品向量空间用黎曼流匹配做生成式召回

ByteDance(TikTok-Data-Content Intelligence & TikTok-Data-Feed Quality)· arXiv 2609.29180(2026-09-24) 通讯作者:Kun Xu;项目负责人:Zhiwei Wang;核心贡献者 18 人、贡献者 30+ 人(技术报告格式,按角色字母序署名)


一、研究动机与背景

1.1 召回的两条主流范式及其缺陷

论文把推荐形式化为下一物品生成:建模条件推荐分布 $p(x\mid c)$,其中 $x$ 是下一物品,用户上下文 $c$ 包含历史交互序列 $s$ 与期望目标属性 $f$(例如希望建模的目标行为)。作者把现有召回方法归为两类,并各自指出结构性缺陷:

  1. 双塔 U2I 召回(ComiRec、HLLM、NoteLLM 等):物品表示为连续向量,用户上下文编码成一个或少数几个确定性向量,然后做 ANN。作者的核心论点是 U2I 在推理时把 $p(x\mid c)$ 退化为一个 delta 分布,所有概率质量集中在一个召回点上,表达力不足以刻画多峰兴趣。多兴趣 U2I(ComiRec)只是增加了确定性召回点的个数,分布形式没有改变,而且兴趣个数是预设超参,无法自适应用户兴趣的真实峰数。
  2. SID 自回归生成(SID-AR)(TIGER、OneRec、OneRec-V2):把物品向量量化成 semantic ID,把推荐变成 next-token 预测。表达力比 delta 分布强得多,但有两个问题:
  3. 「有缺陷的 SID」(flawed SIDs):一是量化误差带来的信息损失;二是 SID 理想情况下应和物品 ID 近似一一对应,工业规模下很难满足(常见做法是在 SID 末尾拼一个无语义的 hash token 去重,但这削弱了码本自身的语义结构)。
  4. 低吞吐:SID token 必须逐个解码并维护 KV cache,大规模召回场景下吞吐是瓶颈。

1.2 X-Rec 的定位

X-Rec 的名字强调「回到 $x$ 本身」:每个物品就用它的向量表示,直接用flow matching(FM)扩散在连续物品向量空间里建模 $p(x\mid c)$,采样出多个向量触发器(trigger),再各自去 ANN 召回。这样做同时回应三点:

  • 相对 U2I:FM 能表达任意连续分布,多次采样天然产生覆盖不同兴趣峰的多个触发器;
  • 相对 SID-AR:直接在物品向量上操作,不引入量化误差,也不需要维护 SID↔物品 ID 的一一对应;
  • 相对 SID-AR 的吞吐:一次扩散生成一个完整向量,而非自回归生成多个 SID token。

为让这个设定在工业规模上既有效又高效,X-Rec 在 DiT(Diffusion Transformer)之上做了三项关键设计:

  • 锚点条件(anchor conditioning):先预测目标向量所在的簇中心索引(anchor),再以 anchor 为条件生成细粒度向量,把生成拆成「粗粒度语义区域选择 + 细粒度精修」。论文报告 Recall@20 +2.05pp。
  • 黎曼流匹配(RFM):物品向量经对比学习 + $\ell_2$ 归一化后落在超球面上,生成轨迹沿球面测地线演化。相对欧氏 rectified FM,Recall@20 +1.78pp。
  • Late-interaction DiT:每个去噪步只用最后一层 Transformer 估计速度场。相对全层去噪 Recall@20 只降 1.05pp,生成吞吐提升约 8.28×。

Figure 1: U2I 与 X-Rec 的表达力对比。左:U2I 只产生一个召回触发器,训练目标把它拉向感兴趣物品、推离无关物品,但受嵌入空间几何约束,单个触发器容易落在折中位置,难以既召回全部相关物品又不召回无关物品。右:X-Rec 直接建模感兴趣物品的分布并生成多个触发器,覆盖不同兴趣区域。


二、三种范式的形式化与复杂度对比

设物品集为 $\mathcal{X}$,上下文 $c$ 包含按时间排序的历史交互序列 $s$ 与期望目标属性 $f=(f_1,\dots,f_F)\in\mathcal{F}$(论文不区分物品特征与用户-物品交互特征,都算属性)。行为序列由交互元组组成:

$$s=(i_1,i_2,\cdots,i_N),\qquad i_n=(x_n,f_n) \tag{1}$$

其中 $f_n=(f_n^1,\dots,f_n^F)$ 是物品 $x_n$ 的属性向量。推理时从 $p_\theta(x\mid c)$ 生成 $K$ 个召回触发器 $\tilde{x}_{1:K}$ 去召回候选。复杂度分析统一假设 $L$ 层、隐维 $d$ 的 Transformer,条件长度 $N$,触发器个数 $K$,SID 长度 $M$。

范式 $x$ 的表示 $p(x\mid c)$ 的形式 时间复杂度 空间复杂度
U2I 向量 训练:采样类别分布;测试:delta $O(N^2)$ $O(1)$
SID-AR SID 离散类别分布 $O(N(N+KM))$ $O(LN)$
X-Rec 向量 连续分布 $O(N(N+M))$ $O(N)$

表 1:不同生成式召回范式的形式化与复杂度(原文 Table 1 照录;注意 X-Rec 行的 $O(N(N+M))$ 与正文式 (12) 推出的 $O(N(N+K))$ 不一致,疑为表格笔误)。

2.1 U2I

U2I 用向量 $x^{(e)}$ 表示物品,训练时通常用 InfoNCE,可理解为建模一个采样类别分布:

$$p^{\text{u2i-train}}_\theta(x\mid c)=\frac{\exp\!\big(e_\theta(c)^\top x^{(e)}/\tau\big)}{\exp\!\big(e_\theta(c)^\top x^{(e)}/\tau\big)+\sum_{x'\in\mathcal{X}_{\text{neg}}}\exp\!\big(e_\theta(c)^\top x'^{(e)}/\tau\big)} \tag{2}$$

$\tau$ 为温度,$\mathcal{X}_{\text{neg}}$ 是负样本集合(如 in-batch negatives)。分母只在负样本上归一化,因此这是全库 softmax 的有偏采样近似。推理时 U2I 退化为 delta 分布:

$$p^{\text{u2i-test}}_\theta(x\mid c)=\begin{cases}1,& x^{(e)}=e_\theta(c)\\ 0,&\text{otherwise}\end{cases} \tag{3}$$

召回触发器只有一个选择:

$$\tilde{x}^{(e)}=e_\theta(c) \tag{4}$$

U2I 只有编码器,推理成本来自条件 token 的 FFN 与自注意力:

$$C^{\text{time}}_{\text{U2I}}=\underbrace{O(Ld^2N)}_{\text{条件 token 的 FFN}}+\underbrace{O(LdN^2)}_{\text{条件 token 的注意力}}\sim O(N^2) \tag{5}$$

U2I 不需要为后续计算保留 KV cache:

$$C^{\text{space}}_{\text{U2I}}=O(1) \tag{6}$$

2.2 SID-AR

SID-AR 把物品表示为 SID 序列 $x^{(s)}_{1:M}$,把推荐分布分解为自回归序列模型:

$$p^{\text{SID-AR}}_\theta(x\mid c)=\prod_{m=1}^{M}p_\theta\big(x^{(s)}_m\mid c,x^{(s)}_{1:m-1}\big) \tag{7}$$

推理时用 beam search 得到召回触发器:

$$\tilde{x}^{(s)}_{1:K}=\text{Beamsearch}_K\big(p^{\text{SID-AR}}_\theta(x\mid c)\big) \tag{8}$$

其复杂度多出生成 token 的 FFN 与注意力,以及 KV cache:

$$C^{\text{time}}_{\text{SID-AR}}=\underbrace{O(Ld^2N)}_{\text{条件 FFN}}+\underbrace{O(LdN^2)}_{\text{条件注意力}}+\underbrace{O\big(Ld^2K(M-1)\big)}_{\text{生成 token 的 FFN}}+\underbrace{O\Big(\tfrac{LdK(2N+M-2)(M-1)}{2}\Big)}_{\text{生成 token 的注意力}}\sim O\big(N(N+KM)\big),\qquad C^{\text{space}}_{\text{SID-AR}}=O\big(L(N+M)\big) \tag{9}$$

2.3 X-Rec

X-Rec 用连续向量 $x^{(e)}$ 表示物品,FM 学一个时间相关的速度场 $v^t_\theta(\cdot\mid c)$,把噪声 $\epsilon\sim r(\epsilon)$ 输运到目标物品向量。推理时逐步去噪,相当于从学到的推荐分布采样:

$$\tilde{x}^{(e)}_{1:K}\sim p^{\text{X-Rec}}_\theta(x\mid c) \tag{10}$$

脚注给出该分布由速度场隐式定义:$p^{\text{X-Rec}}_\theta(x\mid c)=r(\epsilon)\exp\!\big(-\int_0^1\nabla\cdot v^t_\theta(\phi^t_\theta(\epsilon\mid c)\mid c)\,dt\big)$,其中 $\frac{d\phi^t_\theta(\cdot\mid c)}{dt}=v^t_\theta(\phi^t_\theta(\cdot\mid c)\mid c)$。另一条脚注从决策边界角度论证多触发器的表达力:用 $K$ 个触发器召回等价于选出满足 $\max_{k\in[K]}\tilde{x}^{(e)\top}_k x^{(e)}>\tau$ 的候选,正召回区域是 $K$ 个半空间的并,这一函数类的 VC 维为 $\Theta(dK\log K)$,所以触发器越多,可表示的决策边界越复杂。

X-Rec 的一般时间复杂度为:

$$C^{\text{time}}_{\text{X-Rec}}=\underbrace{O(Ld^2N)}_{\text{条件 FFN}}+\underbrace{O(LdN^2)}_{\text{条件注意力}}+\underbrace{O(L'Td^2K)}_{\text{生成向量的 FFN}}+\underbrace{O(L'TdKN)}_{\text{生成向量的注意力}} \tag{11}$$

$L'$ 是每次速度场评估用到的层数,$T$ 是去噪步数。实验发现 $L'=1$(只用最后一层)、$T=L$ 时质量与效率的折中较好,此时:

$$C^{\text{time}}_{\text{X-Rec}}=O(Ld^2N)+O(LdN^2)+O(Ld^2K)+O(LdKN)\sim O\big(N(N+K)\big) \tag{12}$$

只需存最后一层条件 token 的 KV cache:

$$C^{\text{space}}_{\text{X-Rec}}=O(N) \tag{13}$$

因此 X-Rec 的复杂度介于 U2I 与 SID-AR 之间。需要注意:这里所有复杂度都只计入触发器生成,不含 ANN 检索。X-Rec 与 U2I 都依赖 ANN 索引,而原生 SID-AR 可以直接用 SID 查表定位物品,不一定需要 ANN。这一点在后面讨论吞吐时很关键。


三、核心方法:X-Rec 框架

3.1 预备知识:Flow Matching

给定推荐上下文 $\hat{c}$,$\hat{x}^{(e)}\in\mathcal{X}^{(e)}$ 为从经验分布 $p_{\text{data}}(x\mid\hat{c})$ 采得的真实物品向量(论文约定 $\hat{\cdot}$ 为经验样本,$\tilde{\cdot}$ 为模型估计)。FM 学一个流函数 $\phi^t_\theta(\cdot\mid\hat{c})$,$t\in[0,1]$,满足:

$$\phi^0_\theta(\epsilon\mid\hat{c})=\epsilon\sim r(\epsilon),\qquad \phi^1_\theta(\epsilon\mid\hat{c})\sim p_{\text{data}}(x^{(e)}\mid\hat{c}) \tag{14}$$

直接构造这样的流很难,但给定目标向量时可以定义条件流:

$$\phi_0(\epsilon\mid\hat{x}^{(e)},\hat{c})=\epsilon\sim r(\epsilon),\qquad \phi_1(\epsilon\mid\hat{x}^{(e)},\hat{c})=\hat{x}^{(e)} \tag{15}$$

例如欧氏 FM 用线性插值 $\phi_t=(1-t)\epsilon+t\hat{x}^{(e)}$。记 $\bar{x}^{(e)}_t=\phi_t(\epsilon\mid\hat{x}^{(e)},\hat{c})$,条件速度场为:

$$v_t\big(\bar{x}^{(e)}_t\mid\hat{x}^{(e)},\hat{c}\big)=\frac{d}{dt}\bar{x}^{(e)}_t \tag{16}$$

FM 目标把神经速度场回归到条件速度:

$$\mathcal{L}_{\text{FM}}=\mathbb{E}_{\hat{c},\hat{x}^{(e)}\sim p_{\text{data}},\,\epsilon\sim r,\,t\sim\mathcal{U}(0,1)}\Big[\big\|v^t_\theta(\bar{x}^{(e)}_t\mid\hat{c})-\tfrac{d}{dt}\bar{x}^{(e)}_t\big\|^2_{\mathcal{X}^{(e)}}\Big] \tag{17}$$

Lipman 等证明最优速度场诱导的流满足式 (14),即以下 ODE 的解:

$$\frac{d}{dt}\tilde{x}^{(e)}_t=v^t_{\theta^\star}\big(\tilde{x}^{(e)}_t\mid\hat{c}\big),\qquad \tilde{x}^{(e)}_0=\epsilon\sim r(\epsilon) \tag{18}$$

推理时用 Euler 离散化数值积分。

3.2 训练算法

Anchor Loss(锚点损失)。 直接生成细粒度物品向量很难,因为物品表示空间复杂且多峰。X-Rec 先预测目标物品的粗语义区域,即目标向量 $\hat{x}^{(e)}$ 的聚类中心索引 $\hat{x}^{(a)}\in\mathcal{A}$(称为 anchor),再以它为条件生成触发器向量。锚点预测用交叉熵:

$$\mathcal{L}_{\text{anchor}}=-\mathbb{E}_{(\hat{c},\hat{x}^{(a)})\sim p_{\text{data}}}\big[\log p_\theta(\hat{x}^{(a)}\mid\hat{c})\big] \tag{19}$$

这里值得点破:anchor 本质上就是一个单层离散码。实现上 SID 由 4 层 × 4096 的 K-means 残差量化得到,anchor 是否直接复用第一层码本论文没有明说,但 Table 2 就是用「第一位 SID」来评估 anchor 的作用。所以 X-Rec 最终形态其实是「离散粗分类 + 连续精修」的混合,而不是纯连续。

RFM Loss。 物品向量经对比学习 + $\ell_2$ 归一化,落在单位超球面 $\mathcal{X}^{(e)}=\mathbb{S}^{d_e-1}$ 上。欧氏 FM 的线性插值与加性去噪会让中间态和生成态偏离球面,与归一化物品向量不对齐。因此用 RFM 构造测地线插值:

$$\bar{x}^{(e)}_t=\frac{\sin((1-t)\omega)}{\sin\omega}\epsilon+\frac{\sin(t\omega)}{\sin\omega}\hat{x}^{(e)},\qquad \omega=\arccos(\epsilon^\top\hat{x}^{(e)}) \tag{20}$$

$\epsilon$ 从球面上的基分布采样,$\omega$ 是 $\epsilon$ 与 $\hat{x}^{(e)}$ 的测地距离。对 $t$ 求导得条件速度:

$$\frac{d}{dt}\bar{x}^{(e)}_t=\frac{\omega}{\sin\omega}\Big(\cos(t\omega)\hat{x}^{(e)}-\cos((1-t)\omega)\epsilon\Big) \tag{21}$$

代入式 (17),得到 RFM 损失(条件同时包含上下文与 anchor):

$$\mathcal{L}_{\text{RFM}}=\mathbb{E}_{(\hat{c},\hat{x}^{(a)},\hat{x}^{(e)})\sim p_{\text{data}},\,\epsilon\sim r(\epsilon),\,t\sim\mathcal{U}(0,1)}\left[\left\|v^t_\theta\!\Big(\tfrac{\sin((1-t)\omega)}{\sin\omega}\epsilon+\tfrac{\sin(t\omega)}{\sin\omega}\hat{x}^{(e)}\,\Big|\,\hat{c},\hat{x}^{(a)}\Big)-\tfrac{\omega}{\sin\omega}\Big(\cos(t\omega)\hat{x}^{(e)}-\cos((1-t)\omega)\epsilon\Big)\right\|^2\right],\quad \omega=\arccos(\epsilon^\top\hat{x}^{(e)}) \tag{22}$$

总损失。 每个训练样本采多组噪声与时间步估计 RFM 期望,总目标为加权和:

$$\mathcal{L}=\alpha\mathcal{L}_{\text{anchor}}+\beta\mathcal{L}_{\text{RFM}} \tag{23}$$

实验中 $\alpha=0.1,\beta=1$。

3.3 推理算法

推理时先采样 anchor $\tilde{x}^{(a)}\sim p_\theta(x^{(a)}\mid\hat{c})$(温度 1.4),再从球面均匀分布 $\tilde{x}^{(e)}_0\sim U_{\mathbb{S}^{d_e-1}}(\epsilon)$ 初始化,用黎曼 Euler 积分逐步去噪(步长 $\Delta t$),即沿切向速度方向走指数映射:

$$\tilde{x}^{(e)}_{t+\Delta t}=\cos\!\Big(\big\|v^t_\theta(\tilde{x}^{(e)}_t\mid\hat{c},\tilde{x}^{(a)})\big\|\Delta t\Big)\tilde{x}^{(e)}_t+\sin\!\Big(\big\|v^t_\theta(\tilde{x}^{(e)}_t\mid\hat{c},\tilde{x}^{(a)})\big\|\Delta t\Big)\frac{v^t_\theta(\tilde{x}^{(e)}_t\mid\hat{c},\tilde{x}^{(a)})}{\big\|v^t_\theta(\tilde{x}^{(e)}_t\mid\hat{c},\tilde{x}^{(a)})\big\|} \tag{24}$$

$t$ 到 1 时的终态 $\tilde{x}^{(e)}_1$ 即为召回触发器。默认 30 步去噪,全程 CFG guidance scale = 3.0。每个请求生成 $K=20$ 个触发器,每个触发器取 ANN 最近的 1 个物品(20×1)。

推理步骤化描述: 1. Prefill:历史序列经 $L$ 层因果 Transformer 编码一次,缓存最后一层(第 $L$ 层输入)的 KV; 2. 用 $i^{(h_L)}_N+f^{(m)}$ 经 softmax 分类器按温度 1.4 采样 $K$ 个 anchor; 3. 对每个 anchor,在球面上采样初始噪声,重复 30 次:去噪 token 只过最后一层(复用 KV cache)→ 投影到切空间 → 按式 (24) 更新(含 CFG 的条件/无条件两路速度估计); 4. 得到 $K$ 个触发器,分别去 ANN 索引召回 top-$R$,取并集。

3.4 模型架构

Figure 2: X-Rec 模型架构。历史交互 token 先经前 L−1 层 Transformer 编码,目标去噪 token 只送入最后一层预测速度。预训练与 SFT 共享同一架构,仅上下文-目标构造与注意力可见性不同。

特征编码。 目标属性由各子属性向量拼接后投影到模型维度 $d_m$:

$$f^{(m)}=W_f f^{(e)}=W_f[f^{1(e)};f^{2(e)};\cdots;f^{F(e)}]\in\mathbb{R}^{d_m} \tag{25}$$

历史序列中的每个交互 $i=(x,f)$ 把物品与属性信息相加融合:

$$i^{(m)}=x^{(m)}+f^{(m)}=W_x x^{(e)}+W_f f^{(e)}\in\mathbb{R}^{d_m} \tag{26}$$

历史序列表示为交互 token 序列:

$$s^{(m)}=\big(i^{(m)}_1,i^{(m)}_2,\cdots,i^{(m)}_N\big)\in\mathbb{R}^{d_m\times N} \tag{27}$$

送入 $L$ 层 Transformer 得到多层上下文化表示:

$$s^{(h_l)}=\text{TransformerLayer}_l\big(s^{(h_{l-1})}\big)=\big(i^{(h_l)}_1,\cdots,i^{(h_l)}_N\big)\in\mathbb{R}^{d_m\times N},\quad l=1,\dots,L,\ s^{(h_0)}=s^{(m)} \tag{28}$$

骨干是 Qwen3 风格 Transformer(RoPE + QK-Norm)。用户序列用因果 mask 编码,所以 $i^{(h_L)}_N$ 是整个历史的有效上下文表示,且 KV cache 可在后续速度预测阶段复用。

Anchor 预测器。 anchor 离散,用 softmax 分类器:

$$p_\theta(x^{(a)}\mid c)=\frac{\exp\big(w_a^\top(i^{(h_L)}_N+f^{(m)})\big)}{\sum_{a'\in\mathcal{A}}\exp\big(w_{a'}^\top(i^{(h_L)}_N+f^{(m)})\big)},\qquad w_a\in\mathbb{R}^{d_m} \tag{29}$$

速度预测器:Late-Interaction DiT。 基本沿用 DiT,关键改动是借鉴 ColBERT 的 late interaction。先把目标属性信息以和交互 token 相同的方式融入当前去噪态:

$$\tilde{i}^{(m)}_t=\tilde{x}^{(m)}_t+f^{(m)}=W_x\tilde{x}^{(e)}_t+W_f f^{(e)}\in\mathbb{R}^{d_m} \tag{30}$$

去噪 token 只插入最后一层,复用 prefill 阶段算好的前 $L-1$ 层上下文表示;最后一层输出投影为速度,再去掉径向分量投影到球面切空间:

$$\big[s^{(h_L)};\tilde{i}^{(h_L)}_t\big]=\text{TransformerLayer}_L\Big(\big[s^{(h_{L-1})};\tilde{i}^{(m)}_t\big],t,x^{(a)}\Big),\quad v'^t_\theta=W_v\tilde{i}^{(h_L)}_t\in\mathbb{R}^{d_e},\quad v^t_\theta=v'^t_\theta-\big(v'^{t\top}_\theta\tilde{x}^{(e)}_t\big)\tilde{x}^{(e)}_t\in T_{\tilde{x}^{(e)}_t}\mathbb{S}^{d_e-1} \tag{31}$$

其中 $T_{\tilde{x}^{(e)}_t}\mathbb{S}^{d_e-1}=\{u\in\mathbb{R}^{d_e}:u^\top\tilde{x}^{(e)}_t=0\}$ 是超球面在当前点的切空间。flow 时间步 $t$ 与 anchor $x^{(a)}$ 的 embedding 相加后,通过 AdaLN 调制最后一层的注意力与 MLP 块。

设计动机:全层 DiT 每个去噪步都要重跑 $L$ 层,30 步就是 30 倍全模型计算;late interaction 让每步只付一层的代价,上下文编码只做一次。代价是速度场的「深度」只有一层,表达力受限(见 §5.3 的质量-吞吐曲线)。

3.5 训练流程:预训练 + SFT

Figure 3: X-Rec 的注意力 mask。(a) 预训练:每个去噪 token 对应不同目标,只注意其指定的历史前缀和自身,位置索引设为前缀长度 +1;(b) SFT:所有去噪 token 对应同一目标,注意完整条件序列,位置索引相同(条件序列长度 +1)。两阶段中条件 token 都用因果 mask,最后一层 KV cache 可跨不同时间步的去噪 token 复用;去噪 token 之间互不可见。

预训练。 对时间有序的交互序列 $s=(i_1,\dots,i_N)$,建模自回归分解:

$$\prod_{n=1}^{N}p_\theta(x_n\mid i_{1:n-1},f_n) \tag{32}$$

每个因子都用式 (23) 的 X-Rec 损失优化,一条序列产出 $N$ 个 next-item 预测对。为了在一次 prefill 中并行算完所有位置的损失,设计了专门的注意力 mask(图 3a):条件 token 间因果;每个目标去噪 token 只注意自己对应的历史前缀(prefix mask)和自身(target diagonal mask),去噪 token 之间互相隔离。这样既不改变序列预训练的语义,又把训练效率拉满。

SFT。 把预训练的转移模型适配到下游服务的召回事件。对每个合格目标物品 $x$ 及属性 $f$,其序列 $s$ 由两部分按时间拼接:历史正向序列(用户有过有意义互动的物品,反映稳定偏好)与近期交互序列(目标事件前的最新行为,反映即时意图)。每个目标抽 8 组独立噪声与时间步估计 RFM 目标,mask 见图 3b:每个去噪 token 注意完整历史与同一目标属性,不同加噪副本互相隔离,避免信息泄漏。


四、实验设置

4.1 数据

全部实验都在TikTok 内部流式 benchmark上,没有任何公开数据集。预训练和流式数据中,属性集 $f$ 只包含用户行为,所以任务是基于历史交互序列生成与用户已展示兴趣对齐的物品。

  • 预训练数据:平台大规模用户-物品交互日志,按最多 200 次交互切块。
  • 流式评估 benchmark:47 个连续分区,每个分区 2.6M 采样训练样本 + 10K 测试样本;每个样本含长度有上限的历史正向序列与近期交互序列。每个分区的目标物品集合构成对应的 ANN 召回池(注意:召回池只由测试目标组成,远小于真实全库,这让 Recall 数值偏乐观)。模型按分区顺序训练和评估,上一分区的最终 checkpoint 初始化下一分区,模拟生产环境的持续更新。

4.2 评估指标

每个测试样本 $(c,x)$ 生成 $K$ 个向量触发器 $t_{1:K}$,每个触发器从 ANN 取 top-$R$,定义:

$$\text{Recall}@(K\times R)=\frac{1}{|\mathcal{D}|}\sum_{(c,x)\in\mathcal{D}}\mathbb{I}\left[x\in\bigcup_{k=1}^{K}\text{ANN}_R(t_k)\right] \tag{33}$$

即真实物品落在所有触发器召回并集中的样本比例。默认报 Recall@20×1,简称 Recall@20。

吞吐:单张生产级 GPU 上的每秒请求数(QPS),每请求生成 $K=20$ 个触发器,只计触发器生成,不含 ANN 查找。

4.3 Baseline

  • U2I:SASRec、LRURec、DreamRec(DreamRec 虽基于扩散,但原实现只生成单个向量,所以归为 U2I);
  • SID 生成式:TIGER、EAGER、LATTE、LLaDARec(离散扩散并行生成 SID);
  • 受控变体(与 X-Rec 同上下文编码器):X-Rec-U2I(对比学习目标,产出单个触发器)、X-Rec-AR(decoder-only 自回归生成 4 位 SID,beam search 后用 RQ 码本重建为向量触发器)、X-Rec-U2I-K(在同骨干上接 ComiRec-SA 多兴趣抽取)。

评估协议:U2I 用 1×20,SID 方法与 X-Rec 用 20×1。所有 SID 方法生成的 SID 都先经各自的 RQ 码本解码为向量,再作为触发器做 ANN 检索。这是统一口径,但也意味着 SID 方法不能用原生的「SID 直接定位物品」,而是要带着量化重建误差(重建余弦 0.94)去做 20×1 的最近邻匹配。§5.4 恰好显示 20×1 是重建误差伤害最大的配置,所以这个口径对 SID 方法偏不利。

4.4 实现细节

项目 设置
骨干 Qwen3-0.6B,去掉 token embedding 层后约 0.46B 参数,$L=28$ 层
物品表示 每个物品是一条视频,128 维多模态向量,归一化到单位超球面
SID K-means 残差量化,4 个码本 × 4096,平均重建余弦相似度 0.94
预训练 1 epoch(200K 步),AdamW,batch 4096;前 2K 步线性 warmup 到 5e-4,余弦衰减到 1e-4
流式 SFT 每分区 3 epoch,AdamW,恒定 lr 1e-4,batch 512
最大历史长度 200(两阶段相同)
损失权重 $\alpha=0.1$,$\beta=1$
CFG 训练时以 5% 概率丢弃条件上下文;推理 guidance scale 3.0
推理 anchor 采样温度 1.4,30 步去噪,每请求 20 个触发器

五、主要实验结果

5.1 整体性能

Figure 4: 流式 benchmark 上各模型对比。左:每个分区的结果;右:按平均性能排序。

平均 Recall@20(图 4;Recall@50 均值由我根据附录 Table 5 逐分区数据计算):

模型 类别 平均 Recall@20 (%) 平均 Recall@50 (%)(由 Table 5 计算)
X-Rec 连续 FM 10.76 12.70
X-Rec-AR SID-AR(受控) 10.23 13.29
X-Rec-U2I U2I(受控) 6.98 9.68
LATTE SID 6.83 8.64
LLaDARec SID(离散扩散) 6.53 7.73
TIGER SID 5.21 7.00
EAGER SID 4.93 6.84
DreamRec U2I(扩散单向量) 4.30 4.53
LRURec U2I 1.19 2.18
SASRec U2I 1.03 1.90

论文的两点主要观察:

  1. X-Rec 略优于 X-Rec-AR:正文写 X-Rec 均值 10.65%、领先 0.53pp,47 个分区中 38 胜 1 平。(数值不一致:图 4、图 6 与附录 Table 4 的均值都是 10.76%,10.76−10.23=0.53 与之吻合,所以 10.65 应是笔误;我按 Table 4 逐分区统计是 39 胜 0 平。)作者据此认为 FM 与 SID-AR 的分布建模能力相当,而 X-Rec 吞吐高得多。
  2. X-Rec 明显优于 X-Rec-U2I:领先 3.67pp(按 10.76 算是 3.78pp),说明多峰兴趣建模很重要;而且 X-Rec 只生成 1 个触发器(1×20)时也有 8.28%,仍高于 X-Rec-U2I 的 6.98%。

我的补充分析(论文没提):

  • Recall@50 上 X-Rec 反输 X-Rec-AR(12.70 vs 13.29,−0.59pp),逐分区只赢 14/47。也就是说「X-Rec 质量 ≥ SID-AR」只在 20×1 这一个口径成立;触发器增加到 50 个后,SID-AR 的 beam search 取出的候选更互补,X-Rec 独立采样的触发器冗余更高(X-Rec 从 R@20 到 R@50 只涨 1.94pp,X-Rec-AR 涨 3.06pp)。摘要里的「matches」措辞是准确的,正文「outperforms both」则言过其实。
  • 外部 baseline 偏弱:同属 U2I 的 SASRec 只有 1.03%,而同骨干的 X-Rec-U2I 有 6.98%。差距主要来自 0.46B 预训练骨干,不来自范式。所以真正有信息量的对照只有两个受控变体 X-Rec-AR 和 X-Rec-U2I,外部 baseline 只起背景作用。

5.2 在线 A/B

X-Rec 作为 TikTok 某垂类内容推荐的新增召回源上线,分两次:

  • V1:X-Rec w/o anchor conditioning(含 RFM + late interaction);
  • V2:在 V1 基础上加入 anchor conditioning。
指标 V1 V2 合计
垂类互动(Vertical Engagement) +2.3779% +1.7705% +4.1484%
大盘互动(General Engagement) 不显著 +0.0111% +0.0111%

Table 3:在线 A/B 结果。V1 是 V2 的对照组,所以两次增益可叠加估计总提升。除标注「不显著」外均统计显著。

分析:

  • 对照组是什么:V1 的对照是没有 X-Rec 这路召回的现网系统(新增召回源),V2 的对照是 V1。整个在线实验没有和 SID 生成式召回做对比,所以「连续 FM 优于 SID-AR」完全没有线上证据;+4.15% 里有多少来自「多一路召回带来的增量候选/多样性」,又有多少来自 FM 范式本身,无法拆分。
  • 大盘收益很小:大盘互动只有 V2 的 +0.0111%,V1 不显著。垂类 +4% 很可观,但作用范围限于一个垂类。
  • V2 的 +1.77% 相当于 anchor 的线上消融,与离线 AC 消融(+2.05pp)方向一致。这是全文唯一一个组件级的线上归因,而且是 anchor(离散粗分类),不是 FM 本身。
  • 没有公布线上延迟、GPU 成本、触发器数量、ANN 配置,也没有与已有召回源的重叠率。

六、消融与分析

6.1 组件消融

Figure 5: 锚点条件(AC)、RFM、预训练(PT)在流式 benchmark 上的消融结果。

变体 平均 Recall@20 (%) 相对 X-Rec 逐分区
X-Rec 10.76 — —
w/o RFM(换成欧氏 rectified FM) 8.98 −1.78pp 47/47 分区更差
w/o AC(去掉锚点条件) 8.71 −2.05pp 47/47 分区更差
w/o PT(不预训练,流式从零训) 5.49 −5.27pp 47/47 分区更差

锚点条件:为理解 AC 的作用,作者把生成的触发器量化回 SID,看第一位 SID 是否与真实物品一致:

模型 首位 SID Recall@20 (%) 首位 SID Recall@50 (%)
X-Rec w/o AC 28.57 35.77
X-Rec 41.37 53.55

Table 2:所有流式分区上首位 SID 的平均召回。

AC 让首位 SID 命中率提升 12.80pp / 17.78pp,说明 AC 大幅提高了找到正确粗语义区域的能力,进而提升端到端召回,且额外计算可忽略。

RFM:作者的解释是,欧氏 FM 下速度场要同时「朝目标移动」和「纠正偏离球面」,两个目标耦合;RFM 用测地线和切空间投影把球面约束写进动力学,模型容量全部用于在流形内的有意义移动。

预训练:去掉预训练掉 5.27pp,且在全部 47 个分区持续落后,流式 SFT 追不回来。

消融幅度与领先幅度的比较(按归档规则核查):

  • X-Rec 对最强对照 X-Rec-AR 的领先只有 0.53pp,而去掉 AC(−2.05)或去掉 RFM(−1.78)中任何一个,X-Rec 都会跌到 X-Rec-AR 之下(8.71 / 8.98 < 10.23)。所以「连续 FM 追平 SID-AR」这个结论依赖两个组件同时存在,不是「在连续空间做 FM」本身带来的。
  • 其中 AC 本质上是一个单层离散码分类(Table 2 就用首位 SID 来刻画它)。贡献最大的结构组件恰恰是把离散码重新引入,这让「完全绕开 SID 量化」的叙事打了折扣。更准确的说法是:连续 FM 负责码内精修,粗定位仍然靠离散分类。
  • 对最强外部 baseline LATTE 的领先是 3.93pp,AC / RFM 单项消融都没超过这个量级(w/o AC 的 8.71 仍高于 LATTE),但前面说过外部 baseline 本身偏弱。
  • 预训练的 −5.27pp 大于任何结构组件,也大于 X-Rec 对 X-Rec-U2I 的领先(3.78pp)。这说明「预训练 0.46B 序列模型」才是相对外部 baseline 最大的收益来源,不能记在 FM 范式头上。

6.2 Late-Interaction 的质量-吞吐权衡

Figure 6: 不同模型的性能-吞吐权衡。每点为所有流式分区的平均 Recall@20 和各测试 batch size 下的最大生成吞吐。

设定:速度场评估层数 $L'\in\{1,7,14,28\}$,去噪步数固定 30;单张生产级 GPU,BF16;每请求条件序列长 199、生成 20 个触发器;吞吐取各 batch size 下的最大值。

配置 最大 QPS 平均 Recall@20 (%) 相对 1 层的吞吐倍数
X-Rec(1 层) 575.7 10.76 1×
X-Rec(7 层) 218.6 11.59 1/2.63
X-Rec(14 层) 127.8 11.94 1/4.50
X-Rec(28 层,全层) 69.5 11.81 1/8.28
X-Rec-AR 166.4 10.23 1/3.46

结论:$L'$ 从 1 增加时召回先升后降,14 层最好(11.94%),28 层反而略降。正文说 14 层「只比 1 层高 1.05pp」,但实际差 1.18pp;1.05pp 是 28 层与 1 层之差(引言用的是这个口径)。1 层版本吞吐分别是 7/14/28 层的 2.63×/4.50×/8.28×,且质量和吞吐都优于 X-Rec-AR(+0.53pp,3.46×)。

关于 3.46× 的核查:

  1. 是实测数字,但只是离线的触发器生成吞吐:单卡最大 QPS,不含 ANN 查找,不是线上端到端延迟或成本。X-Rec 每请求要做 20 次 ANN,原生 SID-AR 可以查表直接得到物品,两者的 ANN 负担其实不对等,把 ANN 排除在外对 X-Rec 有利。
  2. 质量口径在 R@20 上是对齐的(X-Rec 10.76 ≥ AR 10.23),但如 §5.1 所述,在 R@50 上 AR 更好,而吞吐只在 $K=20$ 下测过。
  3. X-Rec-AR 的解码配置没有披露(beam 宽、是否用了 vLLM 类的 serving 优化、是否做了 CFG 等),X-Rec 这边则是 30 步 + CFG 3.0(CFG 意味着每步两路前向)。基线的推理优化程度未知,3.46× 应看作「同骨干、作者自己实现」下的相对值。
  4. 更有说服力的一点:7 层版本(218.6 QPS,11.59%)同样在两个维度上都优于 X-Rec-AR(1.31× 吞吐,+1.36pp)。说明 X-Rec 在 Pareto 前沿上整体压过 AR 这个点,并不只靠挑选 1 层配置。

6.3 召回广度 vs 深度

Figure 7: X-Rec 与 X-Rec-U2I-K 在不同召回配置下的性能。

固定 20 个候选的预算,比较 $K\times R$ 四种分配:

配置 X-Rec Recall@20 (%) X-Rec-U2I-K Recall@20 (%)
1×20 8.28 6.98(X-Rec-U2I)
5×4 8.60 —
10×2 9.63 5.32
20×1 10.76 —
  • X-Rec 的召回随 $K$ 单调上升,从 1×20 到 20×1 共 +2.48pp;20×1 在每个分区都优于 1×20,在 45/47 个分区最好或并列最好。触发器平均两两余弦随 $K$ 增大而下降,说明覆盖更广。结论是固定预算下「拓宽兴趣覆盖」比「在少数触发器周围挖深」更有效。
  • X-Rec-U2I-K(同骨干 + ComiRec-SA,并且作者改进了训练:每个候选物品都分配给最近的兴趣向量来算对比损失,让所有兴趣向量都拿到梯度,原版只更新获胜向量,训练很不稳定)随 $K$ 增大反而掉点:6.98 → 5.32(10×2)。10×2 下它的触发器两两余弦更低(0.696 vs X-Rec 的 0.823),召回却低得多(5.32 vs 9.63)。作者解释为 U2I-K 的「广度」是表面的:向量分散了,却没有覆盖真实兴趣;每个兴趣向量只在被选中时得到监督,$K$ 越大监督越稀疏。

6.4 用 anchor 温度调节多样性

Figure 8: anchor 采样温度对所有流式分区的影响。

温度趋于 0 时 anchor 分布退化为 delta,所有触发器集中在一个语义区域;温度趋于无穷时趋近均匀,触发器分散到各区域。

设置 平均 Recall@20 (%) 平均两两余弦
X-Rec w/o AC 8.71 0.833
X-Rec (temp=0.8) 10.38 0.809
X-Rec (temp=1.2) 10.75 —
X-Rec (temp=1.4,默认) 10.76 —
X-Rec (temp=1.6) 10.84 0.779

即使温度只有 0.8,AC 也同时提升了召回和多样性。温度从 0.8 到 1.6,余弦单调下降、召回单调上升,增益主要在 0.8→1.2,之后趋于饱和,默认 1.4 接近饱和点。anchor 温度是一个显式、可解释的多样性旋钮,工程上很实用,而纯连续 FM 做不到这一点(只能靠 CFG scale 或噪声间接调)。

6.5 用 SID 重建目标暴露表示损失

Figure 9 (左):用 SID 重建向量作为 SFT 目标时 Recall@20 的下降(各配置)。

Figure 9 (右):同一设置下 Recall@50 的下降。

做法:不用原始连续向量监督 X-Rec,而是把每个目标物品先映射成 SID,再经 RQ 码本解码为重建向量,用它作 SFT 目标。

配置 Recall@20 下降 (pp) 配置 Recall@50 下降 (pp)
1×20 −1.44 1×50 −1.82
5×4 −1.72 5×10 −1.71
10×2 −2.27 10×5 −2.07
20×1 −3.10 50×1 −3.92
平均 −2.13 平均 −2.38

在 20×1 / 50×1(每个触发器只取最近邻)时下降最大,因为目标表示的微小偏移就会改变最近邻结果。结论:SID 重建扭曲了原始嵌入空间的细粒度邻域,带来不可忽略的信息损失。

这个实验设计得很干净:同一个 X-Rec 模型只换监督目标,直接量化了「量化误差」的代价(约 2pp),是全文对 SID 路线最有力的论据。但它同时说明:X-Rec-AR 在 20×1 口径下天然要承受这约 3pp 的重建损失,在这种情况下 X-Rec 仍然只领先 0.53pp,反过来说明 AR 的分布建模能力其实不弱。

6.6 案例研究

Figure 10: 历史正向物品与 X-Rec、X-Rec-U2I-5 生成触发器的 t-SNE 可视化(示例视频为按类别 AI 生成的示意图,非真实用户视频)。

在图 10a 中,用户历史正向物品分成「汽车/卡车/摩托」与「烹饪」两个峰,真实下一物品属于汽车类。X-Rec 的触发器流形与历史正向物品对齐,最近触发器与真实物品的余弦达 0.942;X-Rec-U2I-5 虽有 5 个触发器,却坍缩到两峰之间的「山谷」,最近余弦只有 0.199。附录 A.3 的更多案例(图 11–14)显示把 U2I 触发器数增加到 10 也不改变这种集中模式。可视化有说服力,但属于挑选的案例,t-SNE 距离也不能直接当作余弦距离来解读。


七、核心贡献总结

  1. 把生成式召回的输出空间从离散 SID 换回连续物品向量,用球面上的黎曼 FM 直接建模 $p(x\mid c)$,采样多触发器后接 ANN;给出与 U2I、SID-AR 的统一形式化与复杂度对比。
  2. 三个工程上可复用的设计:anchor 条件(离散粗定位 + 连续精修,同时是可调多样性的旋钮);RFM(切空间投影 + 指数映射 Euler,把球面几何写进动力学);late-interaction DiT(去噪只过最后一层,复用 prefill KV cache,吞吐 8.28×)。
  3. 预训练用 prefix mask + target diagonal mask,一次 prefill 并行训练所有位置的 next-item FM 损失;SFT 用同目标多噪声副本对角 mask。这是把扩散目标高效嫁接到序列模型上的训练范式。
  4. 受控对照设计:同骨干的 X-Rec-AR / X-Rec-U2I / X-Rec-U2I-K 隔离了「范式」这一变量;「SID 重建目标」实验单独量化了量化误差的代价。
  5. TikTok 垂类真实上线两次,垂类互动累计 +4.15%,大盘 +0.011%。

八、与已归档相关工作的对比

MO-DiT+HPPO MO-DiT+HPPO: Generative Retrieval via Diffusion Transformer with Metric-Ordered Sequence Training (2026-06-25)

关系:同团队前作,本文未引用(作者高度重叠:Chenghao Liu、Yu Zhang、Zhongtao Jiang、Kun Xu、Zhenwei An、Zhao Wang、Yuxiao Zhang 同时出现在两篇的作者名单里,归档中该篇机构记为 Peking University)· 已加载对方精读

  • 共同关注的问题:两者都认为离散 SID 生成式检索有量化与解码串行的问题,都选择在冻结的、$L_2$ 归一化的多模态物品向量空间里直接生成连续 query 向量,再交给 ANN 检索,从而绕开码本设计与标识符解码。
  • 相近的技术骨架:几乎是同一套底座。单个 DiT 联合处理条件 token 与加噪目标 token;球面(黎曼)flow matching;timestep 经 AdaLN 注入;CFG 通过条件 dropout 实现,上线 guidance scale 都是 3.0;结构化 mask 同样是「条件因果 + 条件不看目标(可缓存 KV)+ 目标只看前缀 + 目标之间对角可见」。MO-DiT 的 CPT 阶段 dense prefix 监督与 X-Rec 预训练的 prefix mask 并行训练是同一个思路。
  • 本文的差异与推进:(1) 任务从「内容审核的模式保持属性检索」换成了用户兴趣召回,条件从种子物品集换成用户行为序列 + 目标属性;(2) 新增 anchor 条件(离散粗定位)和 late interaction(去噪只过最后一层),后者是 X-Rec 能上线的关键效率设计,MO-DiT 是全层联合处理;(3) MO-DiT 有 HPPO 偏好对齐(用在线指标 Joint@K 做 DPO 式后训练),X-Rec 没有后训练,只在 future work 里提到 RL;(4) X-Rec 与 SID-AR 做了同骨干的受控对照,并有 TikTok 线上 A/B。
  • 可比的方法 / 实验差异:两者的数据与指标完全不同(Joint@K on 4 个内部审核域 vs Recall@20 on 流式推荐 benchmark),数值不能直接比。值得注意的是,X-Rec 把这套连续生成底座包装成「新范式」,却没有引用同团队已公开的前作。读者应把两篇看作同一技术路线在两个场景的实例化:MO-DiT 证明了底座,X-Rec 补上了推荐场景、效率改造和上线。

FAVE FAVE: Flow-based Average Velocity Establishment for Sequential Recommendation (UESTC, 2026-04-06)

关系:独立并发(本文未引用 FAVE)· 已加载对方精读

  • 共同关注的问题:都在连续物品向量空间用 flow matching 建模下一物品分布,也都把「从无信息高斯噪声直接生成结构化偏好向量太难 / 太慢」视为核心障碍。
  • 相近的技术骨架:两者都引入了一种「锚点」来降低生成难度。FAVE 的「语义锚点先验」是把用户历史中随机一个物品的向量(经 Bernoulli mask 扰动)作为 flow 的起点,替换高斯先验;X-Rec 的 anchor 是先分类出目标所在的簇,作为 AdaLN 条件,起点仍是球面均匀噪声。
  • 本文的差异与推进:FAVE 攻「步数」:用平均速度场 + JVP 曲率惩罚做单步生成;X-Rec 攻「每步成本」:步数保持 30,但每步只过一层 Transformer。FAVE 是欧氏线性插值,X-Rec 是球面测地线。FAVE 每次只生成单个向量(更接近 U2I 的单点召回),X-Rec 的重点是多触发器覆盖多峰兴趣,并用 anchor 温度显式控制多样性。
  • 可比的方法 / 实验差异:FAVE 在 ML-100k / Beauty / Steam 等小型公开数据集上验证,比较对象是 DreamRec / FMRec 等扩散与 FM 方法;X-Rec 只在工业流式 benchmark 上验证,并有线上部署。两种加速路线正交,理论上可以叠加(把 FAVE 的少步/单步蒸馏用到 X-Rec 的 late-interaction 头上,这也正是 X-Rec future work 第一条提到的方向)。

九、讨论与局限性

9.1 值得借鉴的设计

  • Late-interaction DiT 是这篇最值得工程借鉴的点:把扩散头限制在最后一层并复用 prefill KV cache,使扩散式生成的边际成本从「$T$ 次全模型」降到「$T$ 次单层」。任何「序列编码 + 迭代生成头」的推荐模型都能用这个思路,包括连续 token 版的 SID 生成。
  • anchor 温度作为多样性旋钮,在工业召回里非常实用,而且可解释。
  • SID 重建目标实验是一个干净的「量化误差定价」方法,可以直接复用来评估任何 tokenizer。
  • 一次 prefill 并行训练所有位置的扩散目标的 mask 设计,是把扩散损失嫁接到自回归序列预训练上的通用做法。

9.2 局限与争议

  1. 「无量化」叙事被 anchor 部分抵消:贡献最大的结构组件 AC(−2.05pp)本质是单层离散码分类;没有 AC 或没有 RFM,X-Rec 都会跌到 X-Rec-AR 之下。所以真正追平 SID-AR 的是「离散粗分类 + 连续精修」的混合体。这和 SID 路线用残差码逐层细化其实相互靠拢,不能简单说「连续胜过离散」。
  2. Recall@50 上反输 SID-AR(12.70 vs 13.29,只赢 14/47 个分区),论文没有提。独立采样的多触发器在触发器变多时冗余上升,这正是 beam search 的强项。这对「多峰覆盖」这一核心卖点构成反例,需要去重或多样性采样策略来补足。
  3. 3.46× 是离线的触发器生成 QPS,不含 ANN;X-Rec 每请求要做 20 次 ANN,而 SID-AR 可以查表,端到端差距会被压缩。AR 基线的解码优化配置没有披露。
  4. ANN 索引被重新引入:X-Rec 的「生成」产物是 query 向量,最终仍靠 ANN 取物品,本质上是「生成式触发器 + 传统向量召回」。它继承了 ANN 的近似误差和索引维护成本,论文完全没有核算这部分,而这恰恰是 SID 生成式召回想摆脱的东西。不过训练和推理是一致的(训练生成向量,推理生成向量再检索),没有「训练侧亮点在推理侧退回」的问题。
  5. 在线对照是没有这路召回的旧系统(新增召回源),没有与 SID 生成式召回在线对比;大盘收益只有 +0.011%;作用于单一垂类;没有披露延迟与算力成本。工业证据是真实的,但证明的是「多一路好召回有用」,而不是「FM 优于 SID-AR」。
  6. 评估口径:召回池只由各分区的测试目标构成(远小于全库),SID 基线被强制走「重建向量 + ANN」而非原生 SID 查表(20×1 下约有 3pp 重建损失,见 §6.5);外部 baseline 在工业数据上明显欠调(SASRec 1.03%);没有公开数据集,无法复现。
  7. 文本数值不一致:X-Rec 均值正文写 10.65、图表为 10.76;14 层与 1 层的差距写成 1.05pp(实为 1.18pp);Table 1 中 X-Rec 复杂度写 $O(N(N+M))$,与式 (12) 不符。
  8. 未引用同团队前作 MO-DiT+HPPO,后者已经公开了几乎相同的球面 FM + DiT + mask + CFG 底座,削弱了 X-Rec「新范式」的首创性。
  9. 可扩展性:late interaction 的速度场只有一层深,论文自己也承认它的 scaling 有待验证(14 层最好、28 层反降,说明深度与步数的配比还没摸清);物品向量是冻结的外部多模态向量,表征能力无法随召回模型一起 scaling(这是「先表征、再建模」的两阶段解耦)。

9.3 工业落地价值

对已有 ANN 基础设施、又想引入生成式召回的团队,X-Rec 提供了一条不必重建 SID 体系、复用现有向量索引的低成本路径:换掉 U2I 的用户塔,换成「预训练序列模型 + 单层扩散头」,就能得到多峰触发器。上线路径(先上 RFM + late interaction,再加 anchor)和两次 A/B 的增量结构也可以参考。主要风险在于 GPU 生成成本(30 步 + CFG)与 20 路 ANN 的额外开销,论文没有给出数字。

9.4 与已有工作的差异

  • 相对 DreamRec / FAVE 等学术 FM/扩散序列推荐:X-Rec 是第一批把连续 FM 召回做成多触发器、球面几何、工业规模并上线的工作;
  • 相对 TIGER / OneRec / LATTE 等 SID 生成:保留了生成式的多峰表达,放弃码本,但又通过 anchor 部分引回了离散结构;
  • 相对 ComiRec / SetMIR 等多兴趣 U2I:触发器数量和位置来自采样,而不是固定查询槽,实验上的「广度 vs 召回」反差(U2I-K 的余弦更低、召回却更差)是一个有说服力的对照。