← All writing生成式推荐 · 19

推荐也需要先想后答吗?|生成式推荐 19:OneRec-Think

OneRec-Think 先将商品 code 对齐到语言空间,再用推荐 CoT 与 Rollout-Beam GRPO 激活推理,并以 Think-Ahead 把慢思考拆到离线。

Read the English edition →

<a_234><b_1262><c_941> 对生成式推荐器来说是一个商品地址,对通用 LLM 来说却只是三个新符号。

如果直接要求模型:

先分析用户兴趣,再推荐下一个 itemic token

它可能写出流畅的分析,却根本不知道 code 代表什么。更糟的是,分析也许只是看到答案后补写的故事,真正预测仍由隐藏层的模式匹配完成。

MTGR 让工程特征与大模型骨干融合,但决策仍是隐式的。OneRec-Think: In-Text Reasoning for Generative Recommendation 首次系统地把文字推理插入工业生成式推荐:

[ \text{历史}\rightarrow\text{文本 CoT}\rightarrow\text{商品 tokens}. ]

30 秒看懂本文

  1. 前一代的问题:OneRec 能生成高价值 session,却是黑箱预测器;itemic token 与自然语言不对齐,LLM 的指令理解和显式 reasoning 很难被激活。
  2. OneRec-Think 的答案:四任务预训练做 Itemic Alignment;从裁剪历史蒸馏 rationale,再让模型在原始噪声历史上生成 CoT;用 Rollout-Beam reward 与 GRPO 增强;上线时离线生成 reasoning 和前两级 code,线上 OneRec 完成最后一级。
  3. 最重要的证据:Beauty 上 Base NDCG@10 为 0.0377,加入 Itemic Alignment 为 0.0402,加入 reasoning 后 0.0471;快手线上 App Stay Time +0.159%、Watch Time +0.169%。

从隐式生成到先想后答

图 1:显式文字提供解释与指令接口,但“有一段 CoT”只是必要现象,不是推理真实有效的充分证据。

用八件商品理解即时约束

用户历史混合了:

网球拍 → 攀岩鞋 → 羽毛球拍 → 泳帽

今天又说:

“肩膀不舒服,想看轻松恢复类内容。”

只靠行为转移,模型可能继续推荐球拍或攀岩;语言模型应理解“受伤、轻松、恢复”是当前强约束,并给出类似:

<think>
用户长期喜欢多种运动,但近期已转向游泳。
当前肩部不适,应降低高冲击装备优先级;
运动毛巾与轻度恢复场景更匹配。
</think>
<item_begin><a_...><b_...><c_...><item_end>

OneRec-Think 的统一分解是:

[ \tau\sim P(\cdot\mid \mathcal P(S_u);\theta), ]

[ s_{v_{n+1}} \sim P(\cdot\mid\mathcal P(S_u),\tau;\theta), ]

其中 (\tau=(r_1,\ldots,r_M)) 是 reasoning tokens,(s_{v_{n+1}}) 是目标 itemic tokens。

八件商品与实时意图

图 2:理想 CoT 应从历史与当前语言约束抽取证据,而不能在 reasoning 中提前泄露目标商品。

第一阶段:先让 itemic token “有词义”

Itemic Alignment 用四类 next-token tasks。

1. Interleaved User Persona Grounding

把静态属性、搜索、行为序列、兴趣摘要的自然语言与 itemic tokens 交错,让同一上下文同时出现两种模态。

2. Sequential Preference Modeling

仍做历史 → 下一商品,保住协同和顺序信号。

3. Itemic Dense Captioning

从商品 tokens 生成详细文字描述。它迫使 <a><b><c> 不只与一个 ID 绑定,还要能恢复内容语义。

4. General Language Modeling

继续训练普通文本,避免整个 LLM 被新商品 code 语言占满而丢失通用能力。

训练分两小步:

Token Warm-up:
  冻结 base LLM,只训练新增 item embeddings

Multi-Task Integration:
  解冻全部参数,按设计比例混合四类数据

工业模型基于 Qwen-8B,词表增加 24,576 个 token:三级 codebook、每级 8192 个 code,另有 item 边界 token。每日用 80 张高端 GPU 增量处理约 20B tokens。

第二阶段:从“容易解释的历史”学会推理

真实历史长且噪声大。若直接让教师从上千条行为生成 rationale,容易复述而非推理。论文先构造简单问题:

  1. 已知目标商品;
  2. 用相似函数从历史检索与目标最相关的 top-(k) 行为;
  3. 让已经对齐的模型基于这段裁剪历史解释“为什么目标会发生”;
  4. 把得到的 rationale 当监督,再用完整原始历史训练模型生成 rationale 与目标。

损失覆盖 reasoning 和 item 两段:

[ \mathcal L_{\rm RA} =-\sum_{i=1}^{M}\log P(r_i\mid H,r_{<i}) -\sum_{j=1}^{L}\log P(s_j^\mid H,\tau,s_{<j}^). ]

这是一种 curriculum:教师在低噪声、目标相关上下文中造出桥,学生在高噪声历史中学会找桥。

但要看清监督来源:裁剪与教师 rationale 构造时用到了真实目标。最终学生输入不含目标,仍可能学到有效去噪;然而 rationale 可能带有“先知道答案再解释”的 hindsight bias。它不天然等于模型在未知答案时的真实因果思考。

第三阶段:推荐没有唯一正确答案,奖励怎么设计

标准 exact-match reward 极稀疏。目录巨大,绝大多数 CoT rollout 最后都没命中唯一日志目标,GRPO 一个组内全是 0,就没有相对优势。

OneRec-Think 生成一条 reasoning 后,用 beam width (K) 搜索商品地址,并以最佳候选与目标 code 的逐位匹配数作为奖励:

[ R_{\text{Rollout-Beam}} =\max_{\hat s\in B_K} \sum_{l=1}^{L}\mathbf 1[\hat s_l=s_l^*]. ]

这比“必须完整 ID 命中”密集:

  • 前一级 code 命中表示粗语义方向接近;
  • beam 内任何候选命中都给这条 reasoning 信号;
  • 与实际 beam inference 更一致。

论文用 GRPO 优化,公开实现描述每个 prompt 采样 16 条 CoT、每条 beam width 32,训练 2 epochs。

OneRec-Think 三阶段与部署

图 3:Alignment 解决“看懂 code”,SFT 解决“形成 reasoning 格式”,RL 解决“让 reasoning 导向可检索答案”。

Think-Ahead 怎样把慢推理放进工业系统

8B 模型在线生成长 CoT 再 beam search,延迟不可接受。Think-Ahead 拆成:

离线阶段

为用户采样 (T) 条 reasoning paths;每条生成商品的前两个层级 code,并保留 beam 中 (m) 个前缀。所有前缀并成用户候选集合:

[ C_u=\bigcup_{i=1}^{T}A_u^{(i)}. ]

它相当于把“慢模型推测的若干兴趣方向”物化到缓存。

在线阶段

实时更新的 OneRec 读取最新行为,但只能在 (C_u) 中的前缀下完成最后一个 code:

[ \hat s =\arg\max_s P_{\rm online}(s\mid H_u), \quad \text{s.t. }(\hat s_1,\hat s_2)\in C_u. ]

这是一种离线语义先验 + 在线行为新鲜度的组合。线上没有执行完整文字 CoT,也没有逐字读取缓存 rationale;推理能力被压缩成候选前缀约束。

实验究竟证明了什么

公共 Amazon 数据结果:

数据集 指标 HSTU ReaRec OneRec-Think
Beauty Recall@10 0.0652 0.0704 0.0791
Beauty NDCG@10 0.0353 0.0344 0.0471
Sports Recall@10 0.0343 0.0332 0.0412
Toys Recall@10 0.0566 0.0764 0.0797

Beauty 的分阶段消融:

Itemic Alignment 与 Reasoning 消融

图 4:Alignment 先带来一层提升,reasoning 进一步增益;这支持三阶段组合,但还不能分离“更好监督”与“推理时多算 token”的贡献。

训练 Recall@5 Recall@10 NDCG@10
Base 0.0460 0.0654 0.0377
Base + IA 0.0532 0.0735 0.0402
Base + IA + Reasoning 0.0563 0.0791 0.0471

工业 Itemic Alignment 也用 BERTScore 测试:短视频理解从 Qwen3 的 0.6031,经 token warm-up 到 0.6443,再经 multi-task integration 到 0.7300。

快手线上用 1.29% 流量运行一周:

指标 相对变化
App Stay Time +0.159%
Watch Time +0.169%
Video View +0.150%
Follow +0.431%
Forward +0.758%

在强工业基线上,0.1% 量级可能有业务意义。但这组结果验证的是完整系统,不是单独证明可见文字 CoT 的忠实性。

它失败在哪里

1. 奖励最终只看答案 code

Rollout-Beam reward 不检查 rationale 是否事实正确、是否引用真实历史、是否存在矛盾。一个胡言乱语但引向正确前缀的 CoT,同样拿高分。

2. 监督 rationale 有 hindsight bias

教师看到了目标,并用目标检索相关历史。这样能造高质量解释,却可能教模型“合理化已知答案”,而非在多种未来之间真正探索。

3. 多有效性仍被日志目标限制

beam 与部分 code 匹配让奖励更密,但 ground truth 仍来自用户实际发生的一次互动。未曝光、未点击的其他好商品没有正标签。

4. 在线系统没有真的逐字思考

Think-Ahead 把 CoT 压成前两级 code 缓存。它很实用,却意味着线上增益可能来自更强离线召回先验,而不是实时文本 reasoning。

5. CoT 可读不等于忠实

模型可以生成符合人类审美的偏好描述,同时决策依赖别的 hidden shortcut。论文展示案例和准确率,但没有做干预实验,例如删改 reasoning 某段是否稳定改变答案。

下一篇为什么会出现

OneRec-Think 给出了“先想后推荐”的完整工程方案。随后团队观察到一个尴尬现象:

在更全面的推荐 benchmark 上,thinking mode 并没有稳定超过 non-thinking mode。

这说明缺的不是更长 CoT,而可能是两个基础能力:

  1. Perception:模型是否真的知道 itemic tokens 的内容含义;
  2. Cognition:CoT 是否把长历史压缩为潜在兴趣、建模兴趣演化,而不是复述。

系列终篇 OneReason 将从这个失败出发,把推荐推理拆成 R0–R3,设计四粒度预训练、结构化 CoT 与“先专后合”RL,并给出一组罕见的反证:SFT 后多想反而更差,只有经过特定 RL 后 thinking 才稳定胜出。


本篇批判性结论:OneRec-Think 的价值是让推荐第一次拥有“语言约束—显式 reasoning—商品地址”的统一接口,并认真处理上线延迟;它的局限也同样重要:答案正确只能证明 CoT 可用,不能证明 CoT 忠实。真正的推理研究,必须从这个区别开始。