跳到正文

生成式与判别式推荐选型

生成式与判别式推荐的架构、目标与选型,补充适用边界与工程取舍

原题:请阐述生成式推荐系统的基本思想、典型架构及其与传统判别式推荐方法的主要区别。

RAG基础 · 小红书真题

回答与解析

基本思想

生成式推荐将推荐问题重新定义为序列生成任务:给定用户历史交互序列,直接生成下一个item的ID,而非预测点击概率。

核心转变:

  • 判别式:学习 $P(y|x)$ —— 给定用户-物品对,预测匹配分数
  • 生成式:学习 $P(x_{t+1}|x_1...x_t)$ —— 自回归生成下一个item

典型架构

组件 功能 代表工作
ID Tokenizer 将item ID映射为语义token 随机ID → 语义ID(如基于内容的哈希)
序列生成模型 编码历史,建模序列依赖 GPT类架构、Transformer decoder
生成解码 自回归采样下一个token Beam search、Top-p采样

典型流程:[BOS] item_23 item_156 item_89 → 生成 item_342 [EOS]

与传统判别式方法的核心区别

维度 判别式(DSSM/DeepFM等) 生成式
建模目标 区分正负样本的判别能力 序列数据的联合分布
输出形式 打分+排序(需要候选池) 直接生成item ID
样本组织 用户-物品对,依赖负采样 纯序列,无需显式负样本
扩展性 新物品需重新计算特征 零样本/少样本生成新ID
统一性 召回、排序、重排分离 单一模型覆盖全链路

优势与挑战

优势

  • 统一框架:召回+排序一体化,简化系统复杂度
  • 冷启动友好:利用生成能力推断未交互item
  • 跨域迁移:序列生成能力可跨场景复用
  • 天然可解释:生成过程可追溯

挑战

  • ID空间爆炸:商品库百万级,vocab过大
  • 训练效率:自回归生成训练慢于对比学习
  • 生成质量:可能出现幻觉ID或重复推荐

学习建议

建议系统学习该知识点

口语版讲法(约4分钟)

  • 一句话定位:生成式推荐本质是把推荐当成序列生成
  • 边界划分:判别式玩候选池打分,生成式直接吐ID,落地常混着用
  • 真实场景:电商首页猜你喜欢,生成式做召回+排序一体化
  • 落地风险:ID空间太大、生成幻觉、训练慢
  • 工程师判断:我更倾向混合架构,判别式兜底生成式做探索

这道题其实在问推荐系统的一个范式转变,从传统的'猜用户会不会点'变成'猜用户下一步会点哪个'。说白了,就是不再给一堆候选商品打分排序,而是像写文章一样,一个词一个词地把下一个商品ID'生成'出来。

先说边界。传统的判别式方法,比如DeepFM或者DSSM,它的核心是学一个打分函数,给定一个用户和一个商品,输出一个匹配分数。然后你需要一个候选池,可能是几百万个商品,挨个打分,再取Top K。这套玩法在搜索和广告场景非常成熟,因为候选集相对稳定,而且需要精确控制排序。但生成式推荐不一样,它学的是整个交互序列的联合概率分布,也就是P(下一个商品 历史序列),然后自回归地生成。它不需要候选池,直接生成ID。

当然,落地的时候,很少只用一种。我理解真正的工程实践往往是混着来的。比如在电商首页的'猜你喜欢'场景,用户历史行为很丰富,生成式可以很好地捕捉序列中的长程依赖,比如用户先看了相机,又看了镜头,再看了三脚架,生成式能直接推断出他接下来要买滤镜。而判别式更适合那些需要实时调整排序权重的场景,比如促销活动期间,需要临时把某些商品提权。所以说,生成式适合做探索和长序列理解,判别式适合做精确控制和稳定性保障,两者互补。

具体到架构,典型流程是这样的:首先有个ID Tokenizer,把商品ID映射成语义token,比如基于内容做哈希,让相似商品有相近的编码。然后一个Transformer Decoder,比如GPT那种结构,把用户历史序列编码并建模依赖。最后用Beam Search或Top-p采样,一步步生成下一个token,直到输出完整的商品ID。这个流程和文本生成几乎一样,所以很多技术可以直接迁移过来。

但是落地风险很大,我特别关注三个。先说ID空间爆炸。淘宝有几亿个商品,如果每个商品一个token,词表大到没法训。所以现在很多工作在做语义ID,比如把商品属性、类目、标题拼成序列,但这样又会丢失唯一性。再看生成质量不稳定,可能产生'幻觉',推荐一个用户根本没接触过的品类,或者重复推荐。还要看训练效率,自回归生成每一步都要算一次,比对比学习慢很多。前提是用户行为序列要足够长、噪声不能太大,否则序列模型学不到东西。常见失败场景是冷启动用户只有一两个交互,生成出来的东西完全随机。

所以我会把生成式推荐看成一种'高潜力但高门槛'的框架。我更倾向的做法是混合架构:用判别式做召回兜底,保证基础推荐质量,同时用生成式在召回结果上做重排或者探索,生成一些新的、用户没见过的但可能有兴趣的商品。这样既利用了生成式的序列理解能力,又用判别式兜住了底线。

诶,说到混合架构,其实有一个很有意思的问题:生成式和判别式的loss能不能联合优化? 比如在同一个模型里,既做序列生成又做点击率预测,共享底层表示。这其实涉及多任务学习,也是现在很多前沿工作在探索的方向,我觉得面试官您可能会感兴趣。

关键一句:生成式和判别式的loss能否联合优化,实现多任务学习

面试官还可能这样问

  1. 问法 1 · 场景切入

    我看你做过电商推荐。假设用户之前买了手机,现在又浏览了耳机和充电器,你打算怎么给他推荐下一个商品?是像传统模型那样先列个候选池再排序,还是能直接生成一个商品ID出来?

  2. 问法 2 · 层层追问

    推荐系统里你一般怎么做召回和排序?……那如果我想跳过候选池,直接让模型输出一个商品ID,你觉得该怎么做?……这和传统方法比有什么本质区别?

  3. 问法 3 · 直球架构

    你对比过生成式和判别式推荐吗?请直接说说生成式推荐的基本思想、典型架构,以及它和传统方法(比如双塔模型)的核心区别,包括建模目标、输出形式和训练方式上的不同。

同模块相关题目