这道题其实在问推荐系统的范式转变,从传统的打分排序变成序列生成。我理解生成式推荐的核心是把推荐当成一个语言模型任务,用户历史行为拼成一个 prompt,然后自回归生成下一个物品的 ID,而不是算一个分数再排序。
具体说一下它的工作流程。第一步是统一 Token 空间,把用户 ID、物品 ID、行为类型、时间戳这些都离散化成同一个词汇表里的 token。第二步是序列化输入,比如 [BOS] 用户u [SEP] 点击i1 [SEP] 收藏i2 [SEP] 时间t,让模型去预测下一个 token 是 i3。第三步就是自回归生成,模型学到的是整个行为序列的联合概率分布,P(i₃|u, i₁, i₂, t...)。
那它和传统的判别式推荐区别在哪?最根本的是建模目标不同。判别式模型做的是点估计,比如算 P(点击=1|x),或者直接打个分,然后按分数排序。生成式模型做的是分布建模,它要生成整个序列,所以物品之间的关系是通过自注意力机制显式捕获的,不是靠隐式的 [[embedding]] 相似度。输出形式也不一样,判别式只能给一个排序列表,生成式可以直接输出物品 ID、推荐理由、甚至对话回复,灵活性更高。
但落地的时候有几个坑。先看推理延迟,这是最直接的,自回归生成是逐个 token 出的,比向量内积检索慢很多,线上 P99 延迟很容易超 100ms。接着说 ID 词汇表爆炸,百万级甚至十亿级物品,直接当 token 来生成不现实,得用 Semantic ID 或者分层编码来压缩。再补充位置偏差,生成顺序会影响多样性,如果模型总先生成热门物品,推荐就容易单调。
举个例子,在小红书笔记推荐里,生成式其实挺合适的,因为笔记内容属性丰富,有标题、标签、图文,可以生成一句“为什么推荐”的解释,增强用户信任。但前提是必须解决那三个风险:十亿级笔记的 ID 压缩、在线延迟优化、还有位置偏差。如果延迟搞不定,生成式再灵活也上不了线,所以实际落地我倾向混合方案,用生成式做粗排或者解释生成,但召回和精排还是走传统判别式。
其实还有一个有意思的点,就是生成式推荐天然能利用预训练语言模型的泛化能力,缓解冷启动物品的问题。但这个能力依赖模型对物品内容的深层理解,如果物品只有 ID 没有文本描述,效果就大打折扣。