<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 秒看懂本文
- 前一代的问题:OneRec 能生成高价值 session,却是黑箱预测器;itemic token 与自然语言不对齐,LLM 的指令理解和显式 reasoning 很难被激活。
- OneRec-Think 的答案:四任务预训练做 Itemic Alignment;从裁剪历史蒸馏 rationale,再让模型在原始噪声历史上生成 CoT;用 Rollout-Beam reward 与 GRPO 增强;上线时离线生成 reasoning 和前两级 code,线上 OneRec 完成最后一级。
- 最重要的证据: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,容易复述而非推理。论文先构造简单问题:
- 已知目标商品;
- 用相似函数从历史检索与目标最相关的 top-(k) 行为;
- 让已经对齐的模型基于这段裁剪历史解释“为什么目标会发生”;
- 把得到的 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。
图 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 的分阶段消融:
图 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,而可能是两个基础能力:
- Perception:模型是否真的知道 itemic tokens 的内容含义;
- Cognition:CoT 是否把长历史压缩为潜在兴趣、建模兴趣演化,而不是复述。
系列终篇 OneReason 将从这个失败出发,把推荐推理拆成 R0–R3,设计四粒度预训练、结构化 CoT 与“先专后合”RL,并给出一组罕见的反证:SFT 后多想反而更差,只有经过特定 RL 后 thinking 才稳定胜出。
本篇批判性结论:OneRec-Think 的价值是让推荐第一次拥有“语言约束—显式 reasoning—商品地址”的统一接口,并认真处理上线延迟;它的局限也同样重要:答案正确只能证明 CoT 可用,不能证明 CoT 忠实。真正的推理研究,必须从这个区别开始。