跳转至

Intent-Driven Semantic ID Generation for Grounded Conversational News Recommendation

会议: ACL 2026 Oral
arXiv: 2605.07613
代码: 待确认
领域: 推荐 / 对话 / 生成式推荐 / 语义 ID
关键词: Semantic ID、对话推荐、生成式推荐、冷启动、RQ-VAE

一句话总结

本文提出 NewsRec-Chat,把对话式新闻推荐从"先检索再生成"反转为"先生成 SID 再模糊匹配",靠两阶段 SID 对齐 + GPT-4 CoT 蒸馏让 7B 模型直接生成层级 Semantic ID 前缀并与当日新闻池模糊匹配,腾讯新闻平台上 152K 开放生成空间里取得 12.4% L1(4× 随机)、0% 幻觉,并通过 Profile-Aware Dual-Signal Reasoning 让 0 历史用户达到 18.0% L1(其他基线 0%)。

研究背景与动机

领域现状:主流对话推荐建立在稳定商品目录(电影、商品)之上,先把对话意图变成关键词或嵌入向量做检索,再让 LLM 在召回集合内做排序与解释。生成式推荐近年用 SID(RQ-VAE 量化得到的层级 token)把 item 编码成可学习的离散序列,但都假设丰富点击行为。

现有痛点:新闻平台与稳定目录差别巨大——文章 24 小时内大量下线、新文章持续涌入、20-30% 用户历史 < 10 条,对话里"再来一条""换个不同的""不要体育"这种 5 类隐式意图占主导,根本没有可被 RAG 用的关键词;而把 SID 直接搬过来又面临两个开放问题:(1) 如何从对话意图(而非点击序列)生成 SID 前缀,(2) 没有点击历史的冷启动用户怎么办。

核心矛盾:检索优先 (retrieve-first) 范式需要查询里有显式 key,而对话推荐的真实需求恰恰是隐式 + 短生命周期,让"先有查询"和"语料每天换"两个假设全垮。

本文目标:(1) 不依赖关键词地把对话意图直接映射到候选 item,(2) 结构上保证 0 幻觉(每个推荐必须真实存在于今日池),(3) 让冷启动用户能从画像里得到有意义推荐,(4) 满足 sub-100ms 在线延迟。

切入角度:观察到 RQ-VAE 的前三层 SID 是"语义层级编码"(s1 大类、s2 中类、s3 细聚类),第 4 层近似 item ID 才每日抖动;那让 LLM 只生成前 3 层就既能表达意图、又跟"池子每天变"解耦。

核心 idea:用 Generate-then-Match 取代 RAG —— LLM 直接根据 (用户画像, 历史, 当前意图) 生成 3 层 SID 前缀 \(P = (s_1, s_2, s_3)\),再与当日新闻池做容差为 \(\delta\) 的模糊匹配 \(\text{Match}(P, \mathcal{P}) \subseteq \mathcal{P}\),从架构上保证存在性。

方法详解

整体框架

输入:用户画像 \(\mathbf{p}_u\)(25+ 维特征)、行为历史 \(\mathbf{h}_u\)、当前对话查询 \(q\)。中间过程:(1) PADR 路由器根据 \(|\mathbf{h}_u|\) 选 warm/hybrid/cold 路径并组装 prompt;(2) 双阶段微调过的 LLM 生成 3 层 SID 前缀;(3) 模糊匹配模块对前缀与今日新闻池做 \(\delta=5\) 容差比对,返回小候选集(mean 5.2, median 3.0 篇);(4) 在线服务用 Dual-Track 架构,Fast Track 命中缓存直接 100ms 出结果,Enhance Track 异步跑完整 PADR 推理并更新缓存。输出:从今日池里 grounded 的 1-3 条推荐。

%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400, 'subGraphTitleMargin': {'top': 8, 'bottom': 16}}}}%%
flowchart TD
    A["输入:用户画像 + 行为历史 + 当前对话查询"]
    subgraph TRAIN["两阶段训练(离线)"]
        direction TB
        T1["Stage 1·SID 对齐<br/>6 任务 483K 样本多任务"] --> T2["Stage 2·CoT 蒸馏<br/>GPT-4 gold CoT → 7B"]
    end
    A --> B["PADR:按历史长度路由<br/>warm / hybrid / cold + 稀疏提示词"]
    subgraph GM["Generate-then-Match"]
        direction TB
        C["LLM 生成 3 层 SID 前缀<br/>(s1, s2, s3)"] --> D["模糊匹配今日新闻池<br/>s1=s2 严格相等,|Δs3|≤δ=5"]
    end
    TRAIN -.训练得到.-> C
    B --> C
    D --> E["双轨服务<br/>Fast Track 命中缓存 85ms / Enhance Track 异步"]
    E --> F["输出:今日池中 grounded 的 1-3 条推荐"]

关键设计

1. Generate-then-Match:反转 RAG 范式,从架构上消除幻觉

对话推荐里 5/6 类隐式意图("再来一条""换个不同的""不要体育")根本没有可供检索的关键词,retrieve-first 在这些意图上彻底失败。NewsRec-Chat 干脆把"用查询去检索池"反过来做成"先让 LLM 生成 SID、再去池里反查":\(\text{LLM}(u, h, q) \to \text{SID}\),然后做模糊匹配 \(\text{Match}(\text{SID}, \mathcal{P}) = \{n \in \mathcal{P}: s_1' = s_1, s_2' = s_2, |s_3' - s_3| \leq \delta\}\)——s1/s2 严格相等保证语义大类一致,s3 留容差去捕获细粒度相似邻居,候选按 \(1 - |s_3'-s_3|/(\delta+1)\) 排序,\(\delta=5\) 是在 {1,3,5,7,10} 上网格搜出来的。

这一反转的好处是双重的:item 选择从"语义检索 + 排序"两步坍缩成"语义生成 + 存在校验",更贴合 LLM 的强项;而且只要推荐落在"今日池里真实存在的 SID"上,幻觉就从一个概率事件变成了零事件。关键细节是只生成前 3 层 SID 而不碰第 4 层——第 4 层是逐日抖动的"近似 item ID",一旦让模型生成它,模型就会被绑死到某一天的库存,而前 3 层是稳定的语义层级,天然跟"池子每天换"解耦。

2. Profile-Aware Dual-Signal Reasoning (PADR):让 0 历史用户也能从画像里推出推荐

新闻平台 20-30% 用户历史不足 10 条,传统 SID 模型一缺历史就直接崩到 L1 0%。PADR 按历史长度 \(|\mathbf{h}_u|\) 与阈值 \(\tau=10\) 把用户切成 warm / hybrid / cold 三档,并在 prompt 里显式插入 "sparse" 或 "no history" 提示词,让模型在 CoT 里学会差异化推理:warm 做行为-画像关联、cold 做"人口学→兴趣"映射、hybrid 做两路交叉验证。

它的妙处在于把"路由策略"蒸馏进了模型而不是写死成规则模块——省掉了为冷启动单独加 fallback 分支的工程复杂度。实测冷路径 L1 达到 18.0%(OneRec-7B 为 16.1%),是唯一在冷启动上不为 0 的方案。

3. 两阶段训练:SID Alignment 打底 + CoT Distillation 教推理

只做对齐,模型会"复读 SID"不会推理;只做蒸馏却不分意图,模型会把所有意图都套同一条 CoT。所以训练拆成两阶段:Stage 1 用 6 个任务(content↔SID 双向映射、行为摘要、next-item 预测、多轮推荐)共 483K 样本做多任务对齐,让模型先学会"看内容知 SID、看 SID 知内容、把行为序列总结成 SID";Stage 2 用 GPT-4 给每个 (input, target SID) 对生成 gold CoT 再蒸馏到 7B Qwen,教它"对每种意图用不同的 reasoning 链生成 SID"。

Stage 2 的三个关键做法决定了成败:(i) 掺入 31% 冷启动样本,保证模型见过仅靠画像推理的情形;(ii) 每种意图给独立的 CoT 结构(冷启动走 demographic→interest,反馈调整走 preference-shift);(iii) 把 CoT 长度卡在 150-300 字——太长会让模型 over-think、反而劣化 SID 生成。消融显示去掉 Stage 2,幻觉率直接从 0% 跳到 18.4%。

一个完整示例

以一个 sparse-history 用户在 152K SID 开放生成空间下的一次请求为例:用户画像 \(\mathbf{p}_u\) 显示偏好科技+财经、历史只有 6 条(< \(\tau=10\)),当前查询是"换个不同的"这种隐式意图。PADR 路由器据此判定走 hybrid 路径,在 prompt 里加上 "sparse" 标签并组装上下文。双阶段微调过的 LLM 不去检索关键词,而是直接生成 3 层 SID 前缀,比如 \(P = (s_1, s_2, s_3)\)

模糊匹配模块拿这个前缀去今日新闻池比对:s1、s2 必须严格相等,s3 允许 \(|s_3' - s_3| \leq 5\) 的容差,于是从 152K 的池子里收敛出一个均值约 5.2 篇、中位数 3.0 篇的小候选集,再按 \(1 - |s_3'-s_3|/6\) 给候选排序,最终 grounded 出 1-3 条真实存在于今日池的推荐。在线服务用 Dual-Track:若命中缓存,Fast Track 85ms 直接出结果;否则 Enhance Track 异步跑完整 PADR 推理(首次冷启约 3.7s)并回填缓存。整条链路里,"模型只吐前 3 层语义 + 后置存在校验"保证了 0 幻觉。

损失函数 / 训练策略

Stage 1 多任务对齐用标准 LM cross-entropy,6 个任务按比例混合(详见附录 B);Stage 2 用 teacher (GPT-4 CoT) → student (Qwen2.5-7B-Instruct) 的指令蒸馏,依然是 next-token loss,但 supervise 序列是 "CoT + SID 前缀"。Backbone Qwen2.5-7B-Instruct + LoRA,4×H20-96G 训练。RQ-VAE 编码器在新内容嵌入上离线训练(~2h,1 GPU 可迁移到新域),4 层 codebook,论文用前 3 层做生成。

实验关键数据

主实验(9982 测试样本,152K SID 开放生成空间)

方法 Hit@1 (Rand) Hit@1 (Align) L1 L2 Category 幻觉率
Random 20.0 20.0 5.1 0.1 10.3
Popular 20.0 20.0 7.7 0.5 12.6
Hist-Pop(生产基线) 11.6 0.7 16.8
Qwen-7B Direct 28.1 26.0 2.4 0.0 6.9 70.0%
GPT-4 Direct 34.4 30.9 0.9 0.0 1.4 94.6%
Qwen-7B + Hybrid RAG 28.1 26.0 11.4 0.5 18.1 0%
GPT-4 + Hybrid RAG 34.4 30.9 12.4 0.5 18.8 0%
NewsRec-Chat (Ours, 7B) 59.3 30.8 12.4 1.0 20.0 0%

冷启动 L1:SASRec 0% / TIGER 0% / OneRec-7B 16.1% / Ours 18.0%,同时只有 Ours 覆盖全部 6 种意图。

消融(Rand setting)

配置 Hit@1 L1 幻觉率 延迟
Full Model 59.3% 12.4% 0% 85ms
w/o Stage 2 (仅 Stage 1) 51.6% 8.9% 18.4% 0.67s
w/o Fuzzy Match 59.3% 12.4% 5.7% 85ms
w/o Dual-Track 59.3% 12.4% 0% 3.7s

任务分解:Feedback Adjustment Hit@1 19.2→54.8%(+35.6pp),Pure Cold-Start L1 0.3→18.0%(60×),冷任务平均 L1 (14.9%) 反而高于暖任务 (11.9%),p<0.05。

关键发现

  • Stage 2 PADR CoT 蒸馏是单点最大贡献——去掉它幻觉从 0% 跳到 18.4%、延迟从 85ms 升到 670ms,是支撑"架构 0 幻觉"的核心。
  • Fuzzy Match 也不可或缺:去掉容差精确匹配会导致 5.7% 命中失败,因为日级别池子里某个 (s1, s2, s3) 三元组未必有 item 落点;这是连接"模型预测"与"动态池"的关键润滑剂。
  • 冷启动用户的 L1 反而高于暖用户——作者解释是 profile→SID cluster 的映射比"历史多到无所适从"更聚焦,PADR 这条 cold path 反向证明 LLM 在画像推理上比序列推理更适合 SID 生成。
  • 跨类别泛化:29 类编辑分类下平均 L1 23.5% (CV=0.23),9 个 Stage 2 几乎没见过的零样本类也达到 4× 随机基线,Spearman ρ=0.35 (p=0.055) 训练频次与测试 L1 无显著相关,说明模型学的是语义结构而非词频记忆。
  • 内部 38 天 300+ 人 pilot:731 篇推荐零幻觉投诉,回访率 22.8%,58.9% 多轮,把离线 0% 幻觉率投射到了线上。
  • 对比 GPT-4+Hybrid RAG:L1 持平 (12.4 vs 12.4),但 L2 翻倍 (1.0 vs 0.5)、Category +1.2pp,且推理成本 ~100× 更低——这是论文最有说服力的"7B 打败 GPT-4 + RAG"案例。

亮点与洞察

  • "生成 3 层不生成 4 层"是非常巧妙的工程切分——让生成内容(粗粒度语义)与每日抖动(item 身份)解耦,使模型与池子的版本完全松耦合,这种"层级切片"思路可迁移到任何短生命周期生成式推荐(短视频、直播、闪购)。
  • Generate-then-Match 给"LLM 幻觉"问题给出了一个少见的架构级解法:与其用 constrained decoding 限制 token、或者用 grounding loss 惩罚不存在 item,不如让模型只输出"语义槽位"再去池里找——这是把幻觉从"概率事件"变成"零事件"。
  • PADR 通过 prompt 里的 availability indicator 让模型自己学路由,不写硬规则;这是个值得普及的 trick——任何"多分支策略"系统都可以把 routing 从硬编码模块改成在 prompt 中加上"分支标签"+ CoT 数据。
  • 冷启动 L1 高于暖启动是反直觉而有道理的发现,揭示 LLM-based 推荐里"画像 → 兴趣聚类"可能比"行为序列 → 兴趣"更精准,对未来推荐系统设计有方向性意义——也许我们一直高估了行为序列的价值。

局限与展望

  • 评估只在单平台(腾讯中文新闻)单语言上完成,跨域转移性虽然在论文中被论证为"换 RQ-VAE codebook 即可",但没有实证(短视频、直播、电商等其他短生命周期域留作未来工作)。
  • 7B 推理在 cold-start 首次 3.7s 才能产出,需要缓存才能压到 85ms,对没有用户群体可预热的场景仍有冷启时延问题。
  • δ=5 是网格搜出来的固定值,没有按 (s1, s2) 单元局部自适应;可能在某些稀疏单元下太松、密集单元下太紧。
  • Stage 2 蒸馏依赖 GPT-4 生成 gold CoT,存在 teacher 模型 cutoff 之后的概念漂移风险;论文也没讨论 teacher 偏见传递到 student 后冷启用户的代表性问题。
  • 6 种意图分类来自人工标注(Fleiss κ=0.81),跨语言/文化的对话意图泛化未验证。

相关工作与启发

  • vs TIGER (Rajput et al. 2023):他们用 SID 做单轮 next-item 预测,本文扩展到 6 种对话意图 + PADR 冷启动;架构差异在 generate→match vs generate-and-decode,本文优势是支持隐式查询。
  • vs OneRec-7B (Zhou et al. 2025):同 backbone(Qwen2.5-7B + LoRA),他们用 constrained decoding 限制 SID 词表,本文用 Generate-then-Match 后置匹配;冷启动 L1 18.0 vs 16.1,且我们覆盖 6/6 意图(他们 1/6)。
  • vs GPT-4 + Hybrid RAG:他们靠超大模型 + 强检索,本文靠 7B + 直接生成;L1 持平但 L2 翻倍 + 成本降 100×,是 SLM 工程化范本。
  • vs Constrained Decoding (Hokamp & Liu 2017):他们在解码时硬约束 token,限制表达;本文用模糊匹配把约束放到后置,保留生成自由度。

评分

  • 新颖性: ⭐⭐⭐⭐ Generate-then-Match 范式 + PADR 冷启动的组合是真正的"思路反转",单看 SID 或 CoT 蒸馏都不新。
  • 实验充分度: ⭐⭐⭐⭐⭐ 主表覆盖 5 类基线 + 4 种 retrieval 变体、消融全且 p 值齐、任务分解 + 冷启动 + 跨类别泛化 + 38 天 pilot 部署,工业论文中少见的扎实。
  • 写作质量: ⭐⭐⭐⭐ Pipeline 图清晰、公式准确、6 类意图表格让动机一秒到位;缺点是部分关键 trick(CoT 长度限制、δ 搜索)藏在附录。
  • 价值: ⭐⭐⭐⭐⭐ 直接给出工业级"7B + SID 替代 GPT-4 + RAG"的可复制方案,0% 幻觉 + sub-100ms 双指标对所有短生命周期推荐域都有借鉴。