Hypothesis-Driven Shelf Generation for Personalised Recommendation
Spotify
把首页「货架」(shelf,横向主题行)从人工模板 + 专用召回,改成「先生成假设、再履约」:LLM 根据用户画像生成自然语言的货架假设(如「带管弦乐质感的冰川氛围后摇」),附带内容类型、熟悉度、新鲜度等约束;再由一个不看用户画像、只看假设的 SID 生成式检索模型,在按内容类型分开的 trie 上做约束解码,把假设落到具体曲库实体上。之后由 LLM 挑最终 k 个 item 并改写标题,使标题和实际内容一致,全流程离线日批预计算,在 Spotify Home 上作为排序候选上线。
核心思路
Spotify Home 由多行「货架」组成,传统做法是一个货架对应一个手写模板加一套专用召回,模板同时决定了「满足什么需求、什么内容算合格、用什么系统来填」。这种做法无法覆盖个人口味的长尾组合。
论文的核心改动是把货架生成当作生成式规划问题:先由 LLM 根据用户画像生成自然语言的货架假设(如 “glacial ambient post-rock with orchestral textures”),再由一个只看假设、不看用户的 SemID 生成式检索模型把假设落到曲库实体上。假设是规划和履约之间的「契约」,表达力要足以描述长尾口味,又要具体到能约束检索,结构上还要支持评测。
整体实现思路
四个阶段,每天离线批跑,每个阶段都有稳定的中间产物(假设、候选集、对齐后货架、服务记录):
| 阶段 | 输入 | 输出 | 主要失败模式 | 评测钩子 |
|---|---|---|---|---|
| 1 假设生成 | 用户画像 | 货架假设 | 过于泛化、缺少依据、描述不清 | User-to-Hypothesis Judge |
| 2 曲库履约 | 假设 | 候选 URI | item 没体现假设 | Hypothesis-to-Shelf Judge + 检索基线 |
| 3 选品与对齐 | 候选 + 草稿标题 | 最终 item + 改写标题 | 标题夸大,整行缺乏协调性 | 对齐前后对比 |
| 4 服务 | 货架记录 | Home 候选 | 离线质量好,线上不一定有竞争力 | 均匀随机曝光 |
形式化:假设 h = (q, c, f, r, t0, d0),其中 q 为自然语言描述,c 为内容类型,f 为熟悉度,r 为路由约束(市场、新鲜度),t0/d0 为临时标题和副标题;最终货架 s = (t, d, q, I),I 为有序的曲库实体列表。用户画像只进入 Stage 1。
子模块实现(可复现细节)
Stage 1:假设生成
- 画像信号:近期收听、长期偏好、市场上下文、熟悉内容、播客互动。
- 每个用户生成少量假设,覆盖口味的不同侧面。每条假设包含目标内容类型、熟悉度、可选的新鲜度约束、t0、d0 和 q。
- 早期用前沿 LLM 批量模式生成;生产版蒸馏到小型开源 LLM,部署在 GPU 批处理集群上。输入是压缩序列化后的画像,输出受 schema 约束(假设文本仍为自由文本),非法或缺失的类别值映射为安全默认值,按用户打包。
- 论文没有给出教师模型和学生模型的名称、规模以及蒸馏数据量。
Stage 2:SemID 约束生成式检索
- 基座是一个更小的开源 LLM,词表扩展了基于 Spotify 曲库学到的 SemID,构造方法「类似」Spotify 播客 SID 工作(D’Amico et al. 2026)和 Google PLUM;SID 的层数和码本大小未披露。
- 输入只有假设和目标货架类型/检索约束元数据,刻意不放用户画像,因为用户相关的推理已在 Stage 1 完成。
- 约束解码用 trie,按内容类型分开建:专辑、艺人、编辑歌单、播客节目、播客单集。
- 按货架类型切换索引:编辑类用分市场的编辑索引;新发行类用按时间过滤的索引;熟悉类用用户熟悉实体在线临时建的 trie;探索类用更大的全曲库索引。
- 后处理:SemID 解析为 Spotify URI,再按类型一致性、是否听过、熟悉度约束过滤。
Stage 3:候选选择与标题对齐
- 动机:候选里单个 item 可能都相关,但整行可能不协调,或者标题描述的概念比实际内容更窄、更宽或干脆不同。
- 做法:一个 LLM 接收原假设、t0、d0 和补全元数据(流派、来源、年份、语言等)的候选,选出最终 k 个 item(k 未披露),并改写出 t、d。目标是在 item 相关性、集合协调性、多样性和标题承诺兑现之间取得平衡。
Stage 4:服务
- 预计算的货架作为普通候选进入 Home 排序,不固定坑位,线上没有 LLM 推理,不增加延迟。
- 各阶段共用同一种结构化货架表示,因此可以替换各个阶段做对比(前沿模型 vs 蒸馏模型、约束解码 vs 非约束、有无对齐),下游服务不需要改动。
评审设计
- 两个评审,均为 0–2 分(0 fail / 1 fair / 2 good)。作者认为粗粒度打分更稳定,人和 LLM 的一致性也更高。
- User-to-Hypothesis Judge:看用户近期互动(top 艺人、top 节目、最近消费)以及假设和标题,不看检索结果。维度:Taste Alignment、Personalisation Depth、Discovery Potential、Hypothesis Specificity、Title Quality。
- Hypothesis-to-Shelf Judge:看标题、副标题、假设和带元数据的 item 列表。维度:Style Match、Item Relevance、Shelf Coherence、Hypothesis Coverage、Completeness(是否包含经典代表作)、Diversity、Title Promise Fulfilment。
实验设置与结果
假设质量(前沿 LLM 生成器)
| 维度 | 分数 |
|---|---|
| Overall | 1.59±0.01 |
| Taste Alignment | 1.59 |
| Personalisation Depth | 1.45 |
| Discovery Potential | 1.31 |
| Hypothesis Specificity | 1.99 |
| Title Quality | 1.76 |
按内容类型:Album 1.90、Artist 1.98、Playlist 1.86、Show 0.66、Episode 0.51,播客明显偏弱。
蒸馏一致性:在 800 个生产用户上,前沿模型 78.3%,蒸馏学生 78.2%,分维度差异很小且方向不一。
履约:生成式检索 vs 文本检索(1000 个用户、1 万条假设)
| 方法 | Overall | Style | Relev. | Coher. | Cover. | Compl. | Divers. | Title |
|---|---|---|---|---|---|---|---|---|
| BM25 | 0.56 | 0.87 | 0.84 | 0.93 | 0.92 | 0.75 | 1.06 | 0.54 |
| Dense (MiniLM) | 0.39 | 0.67 | 0.65 | 0.73 | 0.78 | 0.61 | 0.94 | 0.37 |
| Hybrid (α=0.5) | 0.49 | 0.78 | 0.76 | 0.82 | 0.92 | 0.74 | 1.06 | 0.46 |
| Generative Retrieval | 0.71 | 0.99 | 1.04 | 1.05 | 1.15 | 1.28 | 1.39 | 0.66 |
24 组对比经 Bonferroni 校正后均为 p<0.001。差距最大的是 Completeness、Diversity 和 Coverage。当 item 带有与假设用词接近的人工描述时,BM25 相对更有竞争力;当概念依赖风格联想、文化背景或元数据中很少体现的属性组合时,BM25 会明显退化。
Stage 3 对齐前后(Hypothesis-to-Shelf Judge)
| 维度 | Pre | Post | Δ |
|---|---|---|---|
| Overall | 0.71 | 1.27 | +78% |
| Style Match | 0.99 | 1.51 | +52% |
| Item Relevance | 1.04 | 1.58 | +52% |
| Shelf Coherence | 1.05 | 1.64 | +56% |
| Hypothesis Coverage | 1.15 | 1.37 | +19% |
| Completeness | 1.28 | 1.46 | +14% |
| Diversity | 1.39 | 1.74 | +25% |
| Title Promise | 0.66 | 1.31 | +99% |
注意:对齐前为 1 万个货架,对齐后为 1.6 万多个生产货架,两组不重叠,使用 Welch 独立样本 t 检验,不是配对比较。
线上:Home 均匀随机曝光(请求级随机,指标为 30 秒播放率)
| 内容池 | 假设驱动 (%) | 最强经典 (%) | 池内排名 | Δ |
|---|---|---|---|---|
| Album | 1.20±0.13 | 0.88±0.09 | 1/10 | +36% |
| Artist | 0.82±0.17 | 0.89±0.06 | 2/9 | -8% |
| Playlist | 0.92±0.09 | 1.07±0.07 | 5/15 | -14% |
| Show | 0.92±0.31 | 1.57±0.11 | 2/6 | -41% |
| Episode | 0.63±0.20 | 0.62±0.08 | 1/7 | +2% |
作者说明这是池内描述性对比,不是汇总后的因果效应。Album 和 Episode 两个池中假设驱动货架最好,播客节目池差距最大。
思考与可参考价值
值得借鉴的地方
- 用「主题假设」作为接口来拆分规划和履约。 规划模型负责「这个用户该看什么主题」,履约模型只负责「这个主题对应哪些商品」。履约模型与用户无关,可以按主题缓存和复用,也能单独评测。电商首页的主题楼层和「为你发现」卡片可以直接套用这个结构。
- 用多棵 trie 承载业务约束。 分市场、新品池、用户熟悉集合(在线临时建 trie)共用一个 SID 生成模型。电商中对应类目、店铺、新品、复购集合等约束,比为每个楼层单独训练召回要省事。
- 集合级评审和标题对齐。 「标题承诺」这一维提升了 99%,说明在 LLM 生成标题的场景里,标题和内容不一致是主要的质量问题,应该单独度量。
- 离线预计算、作为普通候选进入排序的上线路径成本低,适合新范式试水。
需要警惕的地方
- 论文没有给出模型规模、SID 结构和 k,只能参考其范式,无法复现具体数字。
- 离线结论完全依赖 LLM 评审,没有给出本系统内与人工标注的一致性数据。如果对齐 LLM 和评审 LLM 同族,+78% 中可能有一部分来自评审对同族模型输出的偏好(推断)。
- 履约基线只有 BM25 和 MiniLM,没有和微调过的双塔模型比较。实际落地时,「SID 生成 vs 微调双塔」才是关键对比,需要自己验证。
- 线上只有探索流量下的描述性对比,没有正式 A/B 实验,也没有报告对整页指标的影响;内容类型之间差异很大(+36% 到 -41%)。
落地前需要确认:自有 SID 在「文本主题到商品」检索上的覆盖率和有效率;用几百条人工标注校准 LLM 评审;低频品类和冷启动用户的假设质量(对应论文中播客偏弱的情况);日批时效性能否满足大促和新品场景。