1. 问题与动机
推送推荐和信息流推荐的关键差别在于:推送是平台主动把内容送到用户面前,用户甚至不需要先打开应用,因此一次错误推送更容易直接造成打扰和负反馈。论文面向快手的推送场景,服务规模接近十亿用户,线上吞吐约 100K QPS。传统级联流程可以依赖候选召回与打分,但对用户长期行为、短期意图和内容语义的联合建模仍然受限于上下文长度。简单截断或随机采样会把有效历史丢掉;生成式推荐虽然能用语义 ID 把推荐改成序列生成,却存在两个落地障碍:一是语义 ID 对模型是黑盒,业务方难以审计“为什么推这个视频”;二是 OneRec-Thinking 这类在 ID 生成前加入思维链的方法会增加解码步数,不适合推送服务的吞吐与时延约束。
作者把问题拆成三个工程目标:先把更长的行为历史压缩进有限上下文;再让生成模型能生成推荐结果并给出可读的解释;最后把生成模型捕捉到的偏好信号接回成熟的 ANN 召回链,而不是把全套服务同步改造成一个大语言模型。论文正文明确把长尾曝光和冷启动也作为长期目标,因为只依赖历史热度的系统会不断强化头部视频。
2. 方法详解
PushDualGen 由“语义 ID 上下文压缩—个性化 SID 与 copy 生成—在线表示融合”三段组成。第一段采用并行语义 ID,不再像残差量化那样让第 l 层依赖前一层的残差,而是为同一个视频学习 M 个并行表示,再为每个槽位建立大小为 K 的 K-means 码本。每个槽位独立寻找最近的质心,最终得到由 M 个离散 token 组成的 SID。实际配置是 M=8、K=512,所以一个视频由 8 个离散码表示。将长行为序列中的视频替换为 SID 后,历史被压成短的离散序列,同时尽量保留内容的语义结构。
SID 原本不在语言模型词表中,作者因此设计 Text-to-SID 和 SID-to-Text 两个对齐任务。前者从推送文案和视频描述预测 SID,后者从 SID 还原文案和描述,让模型同时学会“压缩进去”和“从压缩表示理解出来”。训练时把全部码本索引登记为特殊 token,冻结原有词表 embedding,只优化新 SID token 的 embedding,避免随机新增词扰动 Qwen3-0.6B 原来的语言能力。两项任务使用 next-token prediction,分别可以写成对 SID 序列和文本序列的交叉熵。
第二段接收用户画像、时间新鲜度标记、历史交互和任务指令,先生成下一视频的 SID,再在特殊分隔符后生成可跳过的 copy 文本。损失是 SID 生成损失与 copy 生成损失的加权和:L_gen=L_SID+λ_copy L_Copy。copy 不是同步链路必须消费的解释,而是一个能够单独关闭的解释头,因而主路径不需要额外的思维链。为减少输入长度,作者还把频繁出现的 2、3、4-gram 以及语义上不可拆的 SID 合并为单 token,新 token 用组成 token 的均值初始化。
第三段把生成偏好接回线上检索。系统分别用三个 encoder 把用户特征、候选视频特征和 Top-N 个生成 SID 映射到同一维度。实践中 N=20,用户原始向量 e_u 与 SID 向量 e_s 按 e'_u=αe_u+βe_s 融合,线上 α、β 都设为 1,再用融合后的用户向量对视频库做 ANN 搜索。这样,LLM 负责从长历史中抽取偏好,成熟的向量索引负责吞吐和候选服务。
训练数据分成两部分。语义 ID 压缩使用超过 400 万个视频,最终约 0.72B token;个性化 SID 与 copy 生成使用推送点击日志,每天约 3.6B token 做增量训练。作者使用 Qwen2.5-Omni-3B 训练视频到并行表示的压缩组件,使用 Qwen3-0.6B 做 SID 适配和生成。两段学习率分别为 1e-5 和 1e-7,训练轮数为 3 和 1。
3. 核心技术贡献
第一,论文把并行量化的语义 ID 放在长历史压缩环节,避免残差 ID 的误差逐层累积;这让每个 SID 槽位可以独立表达一部分内容语义,也使历史压缩更容易并行化。第二,SID 与 copy 的顺序设计把可解释性和效率拆开:先生成离散推荐目标,只有需要解释或调试时才生成文本,不把解释推理强行放进每次在线请求。
第三,SID 不是孤立的离线生成结果,而是通过 Top-20 SID 与实时用户特征融合进入 ANN 召回,保留了现有服务的可扩展性。第四,实验显示 SID 适配是最关键的训练阶段:没有 SID Adaptation 时,Pass@1/4/20 只有 0.319/0.352/0.366,而完整模型为 0.335/0.391/0.422;说明预训练语言模型不能自然理解新加入的离散 ID,必须先用双向对齐任务建立语义接口。
4. 实验结果分析
线上实验是论文最有价值的部分。作者从平台流量中划出 15%,覆盖约 150M 用户,做 14 天 A/B,并用 CUPED 缓解哈希分桶带来的实验前不平衡。对照为原有级联服务,处理组为 PushDualGen。结果如下:
| 指标 | 原线上服务 | PushDualGen | 相对变化 |
|---|---|---|---|
| Click PV | 82.04M | 82.39M | +0.43% |
| DAU | 414.89M | 415.08M | +0.05% |
| 不喜欢率 | 0.053% | 0.033% | -37.70% |
| 有效播放率 | 64.46% | 69.94% | +8.50% |
四项线上变化均达到统计显著,尤其有效播放率和不喜欢率同时改善,说明模型不是单纯增加曝光或点击,而是让点击后的内容更符合用户预期。消融中的 Pass@1/4/20 也提供了机制层证据:完整模型为 0.335/0.391/0.422,去掉并行 SID 后为 0.326/0.379/0.401,去掉 token freeze 后为 0.333/0.386/0.412,去掉 multi-token binding 后为 0.332/0.384/0.416。相比之下,去掉 SID 适配的损失最大,说明“让模型认识 SID”比微调 token 初始化和合并输入更基础。
还有一个重要的负面结果:token freeze 与 multi-token binding 带来的 Pass@k 增益相对小,不能把它们解释成主要质量来源。它们更多是训练稳定性和输入效率组件。作者还把 39 个内容类别按曝光占比分成头部、腰部和长尾,观察到生成 SID 的结果带来更长尾的曝光,并在冷启动场景表现出更好的泛化;不过长尾提升主要通过分布图展示,缺少更细的因果分解。
5. 局限与未来方向
作者在结论中明确提出两个方向:扩大 PushDualGen 的模型规模,以及把它从推送推荐扩展到推送以外的场景。方法层面,SID 使用 K-means 是为了简单和高效,作者把更先进的量化策略留给未来;当前实验也依赖 Qwen3-0.6B 和 Qwen2.5-Omni-3B 的组合,未系统比较不同语言模型大小、码本规模和 SID 长度。
从正文可见的工程局限包括:线上 A/B 主要覆盖推送流量,不能直接推断首页信息流、搜索推荐或广告排序的收益;生成的解释是 copy,不等于可靠的因果理由,不能把它直接当作用户可见的解释承诺;ANN 融合依然需要维护 SID encoder、视频 encoder 和索引更新链路。论文没有给出更详细的训练硬件、显存占用和端到端 P99,因此迁移到 UGC 社区时仍需补充压测。
6. 工业实践意义
对推荐工程来说,最可借鉴的不是“把 LLM 直接放进召回”,而是把 LLM 产生的用户偏好变成一个可缓存、可检索、可回退的中间表示。社区 UGC 推荐可以把用户最近点击、停留、跳过、不喜欢与搜索行为压成多槽位语义 ID,离线或近线更新;请求路径只读取 Top-N SID 并与现有用户向量融合,避免每次请求都做长上下文生成。
线上系统应把 SID 生成、解释 copy、向量召回和最终排序拆成可独立关闭的模块,并为 SID 版本、码本版本和候选来源打标。PushDualGen 的 100K QPS 规模说明它选择了生成偏好、ANN 扩展候选的混合形态,而不是生成完整列表;这对 P99 更友好。落地时建议先做离线 replay 和小流量 A/B,除 CTR 外同时监控有效消费率、不喜欢率、长尾曝光和冷启动覆盖;如果 copy 与真实用户反馈不一致,应只作为审计信号,不要让解释文本反向污染排序标签。