1. 为什么排序模型这条线,最后一定要聊到“生成式”
聊到排序模型,很多人的第一反应还是精排模型那一套:LR、FFM、DeepFM、DIN,再到后面的SIM、MIND,本质都是在做同一件事——从候选集里挑出最可能被点击的那个,给每个item打个分,然后按分数倒序排列。这套“判别式打分+全量排序”的架构统治推荐系统很多年了,确实好用,也确实够稳。
但如果你真的在工业界做过一段时间推荐,你会发现这套架构有几个非常拧巴的地方,而且越往后做越明显:
第一,打分是逐点独立的。模型对每个item单独打分,完全不考虑“用户这一屏会看到什么组合”。但是用户体验从来不是单点触达,用户看的是整屏内容,一个糟糕的组合会让单点高分全废,这一点精排完全管不到。
第二,曝光位置和上下文是后置处理的。精排出分之后还得过粗排、重排、多样性打散,其实是在“打补丁”,用规则修判别式模型的盲区。
第三,也是更底层的问题——判别式模型永远在“挑”而不在“创”。它没办法回答一个更本质的问题:用户在当前状态下的最佳反馈,应该长成什么样?
生成式推荐,恰恰是来回答这个问题的。它的思路完全反过来:不逐个打分排序,而是直接以“整页内容”为单位,生成一个最优的推荐列表。在这个列表里,item之间的依赖、位置之间的差异、用户当前的状态,全部在生成过程里一并建模。
把生成式放在“排序模型(四)”这个位置来讲,逻辑也很顺:排序模型的前三代基本都在做“打分架构的进化”,到了生成式这一步,不再执着于让分数更准,而是换了一条路——既然打分本身就是无奈之举,那不如直接生成最优序列。
这篇文章我不会只堆概念。生成式推荐下面其实有一堆完全不同的技术路线,有基于GAN的、有基于自回归序列生成的、有基于扩散模型的,它们的建模方式、训练目标、部署形态都不一样。我会把这些路线拆开看,重点讲清楚各自的核心机制、实现难点、以及真实落地时你一定会踩的坑。
2. 生成式推荐的“生成”到底是在生成什么
很多初学者一听到“生成式推荐”,第一反应是:是不是用大模型直接吐推荐结果?
这个理解不算错,但不完整。生成式推荐的“生成”,目标可以分成三个层次,理解这三层的差别,你才能理解为什么生成式推荐没有统一架构,也才能看懂后面几种主流方案各自的定位。
第一层:生成Item序列。目标是直接生成一个长度为N的item列表,N是页面能展示的坑位数量。这跟精排最大的区别在于:精排把每个item当成独立事件,生成式把这个列表当成一个整体样本,列表内部有序、有依赖、有组合约束。这一层最接近“重排”的职责,但比重排高端得多,因为重排是在精排分数基础上的规则调序,而生成式是从零开始构造整页内容。
第二层:生成用户在某一状态下的“反馈画像”。什么意思?精排模型本质是在拟合“用户会不会点itemA”,生成式模型是在拟合“如果给用户看他这一屏最喜欢的内容组合,这个组合是什么样的”。后者是一种更抽象的表征——它学到的是用户的偏好结构,而不是孤立的行为概率。
第三层:生成用户的下一阶段行为或者交互策略。这个在会话推荐里很常见,模型生成的不只是一个列表,而是“接下来几步应该怎么跟用户互动”的策略序列,比如先推什么、再推什么、什么时候推新的品类、什么时候停止推某个方向。
为什么一定要把这三层分开?因为不同团队做生成式推荐的切入点不同。有的团队其实只是想做“更好的多样性控制”,结果用序列生成模型做了个重排升级版,这个属于第一层;有的团队想解决“用户行为路径建模”,做的是二三层。如果目标不清晰,技术选型很容易走偏。
还有一个必须澄清的点:生成式推荐并不是“抛弃了排序”。排序模型讲到现在,用户行为特征、物品特征、上下文特征这些基础能力,全都要保留。生成式推荐只是在排序之上增加了一个“全局生成”的环节,它替代的是“打分+重排”的链路,但不替代召回和特征工程。
换句话说,生成式推荐是推荐链路末端的“总装车间”,而不是从头重建的“新工厂”。理解这一点,后面看各种模型结构时就不会慌。
3. 主流的四条技术路线,以及它们各自的脾气
生成式推荐底下不是一棵树,而是好几条几乎平行的技术线。我按工业界实际出现的频率和成熟度来讲,分别是:基于自回归序列的生成、基于GAN的对抗生成、基于扩散模型的生成、以及基于强化学习策略生成的路线。这四条路线的底层逻辑完全不同。
3.1 自回归序列生成:最朴素也最稳的一条路
这条路线在思想上最直观:推荐一个页面,本质上就是在生成一段序列——第1个坑放itemA,第2个坑放itemC,第3个坑放itemE,以此类推。我们可以直接用自回归语言模型的思路来做这件事。
具体做法是:把所有候选item先经过一个编码器得到item embedding,然后让一个Transformer Decoder结构(或者更轻量的GRU结构)“逐坑生成”推荐序列。在第t步生成第t个坑位的item时,模型读入之前已经生成的前t-1个item的信息,以及用户特征、上下文特征,然后计算当前应该在所有候选item上的概率分布,再从中采样/取argmax。
这个路线最大的优势是简单、可控、跟主流技术栈同源。如果你团队里有过做NLP序列模型的同事,几乎可以平移他们的工程经验。要做多样化,就在解码时加temperature采样;要控制某些item不出现,直接屏蔽它的概率;要控制品类丰富度,也能在分布上做约束。
但它也有个很现实的毛病:生成是串行的,第2个坑位必须等第1个坑位算完才能开始。如果序列长度是N(比如10),那就是10次串行inference;如果候选item有500个,那每做一步都要过一个500维的softmax,这计算量在线上延迟要求严苛的场景下很难看。
工业界目前对这条路的应对主要有两种:一是把序列长度砍短,只对首页顶部几个关键坑位做生成,剩下的坑位继续用精排分数填充;二是把候选集先做一轮粗筛,把500个砍到50个,再跑生成模型。这些都属于“向延迟妥协”的工程手段,效果打折但能落地。
3.2 GAN式生成:一个很性感但很难伺候的方案
GAN的思路放到推荐里,大概是这样:一个生成器负责产出推荐列表,一个判别器负责判断“这个列表是真实用户行为产生的,还是生成器伪造的”。通过这种对抗博弈,生成器被迫不断提高生成列表的“真实度”。
这个路线的诱惑点在于:判别器理论上可以学习非常复杂的真实分布特征——比如用户真实点击过的序列里有某种隐藏的pattern,判别器能捕捉到,而生成器为了骗过判别器,也会去模仿这种pattern。这样生成的列表不仅分数高,而且“看起来像真实用户会喜欢的样子”。
但我在实际接触过的项目里,GAN式推荐几乎是最难落地的方案。原因如下:
一是推荐场景的离散性。推荐列表是离散item的排列组合,不像图像是连续像素。生成器输出离散序列时,梯度很难从判别器回传到生成器,经典的“可微性”问题在NLP里用Gumbel-Softmax缓解,在推荐场景同样很头疼。
二是训练极其不稳定。判别器和生成器需要同步训练,任何一方过强另一方就崩。推荐数据分布本身又高度倾斜,判别器很容易“偷懒”——直接记住用户高频点击的item就能骗过自己,导致生成器学到的全是头部热门商品,多样性反而比精排更差。
三是线上维护成本高。严格意义上的GAN需要持续对抗训练,模型更新节奏比普通精排快得多,对数据 pipeline 和训练资源要求也更高。
我的个人建议是:如果你的团队没有很强的生成模型功底、没有充足的GPU训练资源,GAN式推荐慎入。这个方向在论文里很有意思,但在业务场景里属于“看着美,用着疼”的典型。
3.3 扩散模型生成:新鲜但正在快速变热的方向
扩散模型是这两年生成式推荐里最出风头的方向。它的机制可以这样理解:先给一个真实的推荐列表逐步加噪,加到最后变成一个纯随机列表;然后训练一个模型去学习“如何一步步去噪还原出真实列表”。推理时,从一个随机列表出发,模型逐步去噪,最终生成一个高置信度的推荐列表。
为什么这个路线会火?因为它解决了推荐系统的两个核心痛点:
一是全局依赖建模。扩散模型的每一步去噪都在“修正”整个列表,天然建模了item之间的全局关系,不需要像自回归那样串行生成。这让生成整页列表的过程可以并行推进,延迟可控性优于自回归。
二是生成质量高。扩散模型在图像领域已经被证明能生成极其精细的样本,拿到推荐场景后,它学到的列表分布往往比自回归更丰富,多样性、惊喜感都更好。
但它也有现实问题。第一个是推理成本:扩散模型一般需要几十步迭代去噪,每步都是一次模型前向,这可比自回归还贵。业界目前的做法是蒸馏成几步甚至一步去噪的版本,或者只在冷启动/新用户场景使用,线下批量生成推荐列表再缓存。第二个是训练复杂度:正样本定义不像精排那样直接,需要构造“真实列表-加噪-去噪”的训练数据,对数据形式要求更高。
如果你团队有CV背景的同事,这条路线值得重点关注。它可能是未来两三年里生成式推荐的主要增长点,工程上也在快速成熟。
3.4 强化学习策略生成:离线上决策最近的一条线
强化学习这条路其实跟“生成”这个词有点若即若离。它把推荐建模成一个序列决策问题:智能体(推荐系统)在当前状态(用户历史行为+当前上下文)下,采取一个动作(生成一个推荐列表),然后获得奖励(点击、购买、时长等),不断优化策略以最大化长期收益。
为什么说它“生成”?因为策略网络输出的可以不是一个标量分数,而是一个完整的动作分布——高质量的动作分布本质上就是一种“生成”。所以RL推荐往往也被归到生成式推荐的大家族里。
RL的优势是天然考虑长期收益。精排模型只看当前这个item的点击率,RL知道现在推一个低点击率但能引导用户发现新兴趣的item,长期价值可能更高。这种“战略性”是其他三条路线都不具备的。
但我必须坦诚地讲:工业界真正把RL跑好的推荐系统少之又少。最大原因是线上交互式训练太难——需要实时获取用户反馈、持续更新策略、处理探索与利用的平衡,这要求推荐架构、实验平台、数据管道都要为“在线学习”专门设计。绝大多数公司的基建根本撑不起这个玩法。
所以我对RL这条线的定位是:适合远期储备、适合对业务长期目标有强诉求的大厂,不太适合中小团队在短期内赌上身家。
四条路线我可以用表格总结一下,方便对比:
| 技术路线 | 核心机制 | 主要优势 | 主要痛点 | 落地成熟度 |
|---|---|---|---|---|
| 自回归生成 | 逐坑位生成item序列 | 简单可控、NLP工程可复用 | 串行计算、延迟高 | 中 |
| GAN对抗生成 | 生成器-判别器对抗博弈 | 理论上可捕获复杂分布 | 训练不稳定、可微性差 | 低 |
| 扩散模型生成 | 加噪-去噪逐步还原列表 | 全局依赖建模、生成质量高 | 推理成本高、训练复杂 | 中低 |
| 强化学习生成 | 序列决策优化长期收益 | 战略性、长线收益 | 在线训练基建要求极高 | 低 |
4. 实操视角:一个可落地的生成式推荐方案长什么样
聊完技术路线,接下来要解决一个很实际的问题:如果我的团队现在就有一批排序模型的基础设施,想往生成式推荐试水,到底应该怎么搭?
我不会推荐你上来就上扩散模型或者RL,那对绝大多数团队来说都是灾难。最稳妥的路径是:先做自回归序列生成微调版,把它用在重排环节,再逐步演进。这套方案是我认为从精排到生成式推荐之间阻力最小的路径,下面拆开讲。
4.1 起步阶段:把生成式嵌进重排链路
首先明确一代系统定位:不替代精排,而是接管精排之后的“最终组装”。
精排模型仍然输出每个item的预估点击率,但不再直接按分数排序。候选item进入重排阶段后,被喂给一个序列生成模型。生成模型的目标是:根据精排分数、item embedding、用户特征、当前页面上已经生成的坑位,生成一个整体的最优排列。
这样做的好处是:精排模型的全部能力被保留,生成式模型只需要学“组合逻辑”,训练任务相对简单。如果生成效果不理想,可以随时回退到传统重排规则,风险完全可控。
4.2 模型核心结构设计
一代系统的生成模型不必上Transformer,用GRU就够了。整体结构如下:
输入层:用户embedding、上下文embedding、候选item的embedding、精排分数特征。精排分数一定要作为特征喂进去,因为生成模型相当于在精排基础上做组装,不能丢掉精排已有的判断力。
编码层:把输入做特征交叉,用一个MLP得到“用户+候选集”的全局表征g。
序列解码层:GRU逐坑位生成。每个坑位的输入包含三部分:全局表征g、上一个坑位选择的item embedding、当前已生成序列的汇总向量。GRU输出经过一个全连接层,映射到候选集的概率分布上。
输出层:在候选item上做softmax,取概率最高的item作为当前坑位的结果,然后进入下一个坑位。
训练数据怎么构造?这是最需要小心的地方。不能用天然的用户曝光顺序做标签,因为那里面有大量运营干预的噪声。我的做法是:用用户实际点击过的、且停留时间超过阈值的item序列作为正样本标签,同时把曝光未点击的item作为负样本,训练时让模型去学着生成“用户会消费的序列”。
loss函数用交叉熵即可。一个可选的加分组是:对位于序列不同位置的item施加不同的权重,比如前三个坑位权重更高,因为头部坑位的曝光价值更大。这个思路简单且有效。
4.3 线上服务的关键工程处理
模型训练好只是第一步,上线时你会发现一堆现实问题。
第一个问题:串行生成太慢。解决办法是分段生成:先并行生成前2-3个关键坑位(用粗筛后的候选集),后用规则或精排分数填充剩余坑位。这样既保留了生成式的全局组装能力,又把延迟控制在了可接受范围。
第二个问题:候选集太大导致softmax开销过高。常规做法是把候选集从精排结果里截断到100个以内,再做生成。如果精排出分足够准确,截断对生成质量影响很小,因为生成模型主要在学组合逻辑,item的个体吸引力精排已经管过了。
第三个问题:线上效果监控。生成式模型上线后不能只看点击率,还要看多样性指标、页面停留时长、用户负反馈率。因为生成式的最大收益在“整页体验”,不是单点CTR。如果只看CTR,你可能会得出“跟精排差不多”的错误结论,从而错过真正的优势。
5. 我在实际项目中踩过的坑
生成式推荐没有太多现成经验可抄,我把自己做过的项目里几个印象深刻的坑列出来。有些坑真的是付出了线上事故的代价才想明白的,希望你能绕开。
5.1 坑一:训练标签直接用曝光序列,生成结果严重偏向运营热门
第一次做生成式序列模型时,我偷懒直接用了用户的曝光序列当训练标签。结果模型训练完上线后发现,生成的推荐列表几乎全是运营强推的热门品,多样性比精排还差。
原因复盘很简单:曝光序列中有大量运营干预的痕迹,模型学到的是“曝光最多的item最应该被推荐”,而不是“用户真的喜欢的item该被推荐”。这跟精排模型学用户点击行为完全不是一回事。
这个坑的解法就是我前面提到的:训练标签必须用用户强消费行为序列(点击且停留、加购、购买),而不是曝光序列。如果数据里没有停留时长,用点击序列也可以,但一定要过滤掉“点完立即返回”这类无效点击。
5.2 坑二:序列生成的随机性被当成线上Bug
自回归生成如果带了temperature采样,那么每次刷新页面生成的列表都不一样。用户会明显觉得“翻来翻去推荐在变”,这在内容社区场景容易被投诉“个性化太诡异”。
我当时的解决方法是:对同一次会话内的多次刷新,session id相同的情况下输出固定序列(用session作为随机种子),不同session之间再引入多样性。这样既保留了生成式的探索能力,又让单个用户会话内体验稳定。
5.3 坑三:把“整页最优”做到极致,结果单点CTR崩了
这是最反直觉的一个坑。我们的生成式模型拼命优化整页体验,结果整页点击分布均匀了,但首坑点击率反而下降了。原因是模型在首坑选择了一个更“长期价值”的item,而不是点击率最高的item。
如果你们的业务KPI里首坑CTR权重极高,这个情况会很尴尬。我的建议是:首坑可以保留精排出分的强约束,生成式模型只负责后面几个坑位的组装。把“追求长期价值”的空间让给非首坑位,既保住KPI,又能验证生成式的真实价值。
5.4 坑四:回退机制做太晚,一次小Bug影响了整周
生成式模型上线后,我在回退机制上掉以轻心。结果某次模型隐式特征embedding更新出了数据问题,导致生成的序列开始重复推荐同类item,线上反馈量半小时内翻了三倍。
吃了一次亏之后,我强烈建议:生成式推荐模型上线前必须配置双保险——第一,输出侧做一个基本规则校验,比如相邻坑位item不能同品类、同一item不能重复出现超过一次;第二,线上实时监控生成列表的多样性指标,一旦突破阈值立即自动回退到精排版本。
这两条规则不需要多复杂,但能挡住绝大多数“模型发疯”的场景。
6. 评估生成式推荐,光看AUC和GAUC远远不够
很多团队上生成式推荐,评估方式还停留在一套精排的指标体系,这是另一个大坑。生成式模型跟精排的优化目标完全不同,评估体系也要跟着变。
6.1 传统指标的局限性
精排时代的GAUC、AUC衡量的是“单点排序能力”,也就是positive样本是否排在negative前面。生成式模型的产出是组合序列,它追求的并不是每个item的单点排序全对,而是整页组合的合理性。一个GAUC很高的模型,生成的列表可能毫无逻辑——比如第一坑是数码、第二坑突然跳母婴、第三坑又跳回数码,单点分数都对,组合一塌糊涂。GAUC完全看不出来。
此外,生成式的价值在于长线体验,单次的点击率评估会低估它的能力。必须引入时间维度的评估视角。
6.2 我在用的三套评估组合
第一套:序列质量指标。包括相邻item的品类相似度、重复item比例、类目覆盖率、list内item embedding的平均相似度。这些指标能直观反映“组合是否合理”。
第二套:离线用户模拟指标。构造一个轻量的用户行为模拟器,把生成列表喂给模拟器,看模拟用户的后续满意度(可以用模拟器产出的“下一行为”打分)。这个思路来自强化学习的评估方法,虽然没有线上真实,但比纯静态列表评估强很多。
第三套:线上实验指标体系。除了CTR之外,务必观察:单用户PV内的平均页面停留时长、深度浏览率(浏览超过N页的用户占比)、次日留存、负反馈率。这些指标才真正反映生成式推荐的整页价值和长期体验。
我自己在做的项目里,最常用的“一票否决”指标是负反馈率。生成式模型再漂亮,如果负反馈率上升,说明生成的列表让用户觉得“莫名其妙”了,这时候模型的全局建模能力还不够成熟,宁可回退。
6.3 一个建议:做A/B实验时给出足够长的观察窗口
生成式推荐的收益往往不是即时的。用户可能需要多个session才能感知到整页推荐的变化,才能形成新的点击习惯。我见过很多团队只跑了三天实验就下结论说“生成式没有明显收益”,这其实是对长线模型的偏见。
推荐至少跑两周以上,并且要区分新用户、老用户分别看指标。新用户没有历史行为,生成式模型的冷启动能力反而更容易体现出来;老用户的兴趣固化,收益会来得更慢。
7. 生成式推荐跟大模型时代的关系
聊到这儿,很多人会问:生成式推荐是不是必须跟大模型绑定?没有大模型能做吗?
我的答案是:大模型不是生成式推荐的必需品,但它是放大器。
前面讲的GRU序列生成模型、扩散模型,都可以在百亿参数以下的中小模型上完成。生成式推荐的核心思想是“全局组装、序列生成”,不依赖某个巨无霸模型。中小团队完全可以靠小模型先跑通链路。
但如果你有大模型基建,生成式推荐的玩法会更复杂,想象空间也更大。比如:
- 用大模型构造训练数据:把用户行为序列通过大模型摘要、抽象成用户兴趣画像,作为生成模型的输入特征。
- 用多模态Embedding增强item表征:大模型可以把文本、图像、标签统一编码成更丰富的item embedding,这会让生成式模型的输入信息密度大幅提升。
- 用LLM做推荐解释:生成式推荐产出的列表,配合LLM生成推荐理由,形成“推荐+解释”一体化的用户体验,这是传统排序模型很难具备的能力。
但我也要提醒:大模型不是万能药。生成式推荐的核心链路依然需要在推荐系统框架内打磨,大模型只是在特征、表征、解释层面提供辅助。盲目把七大姑八大姨的技术堆在一起,只会让系统脆弱且难调试。
8. 从排序到生成:一条务实的技术演进路线
如果你被“生成式推荐”这个概念吸引,但不知道怎么开始,我这里给一条我比较推荐的演进路线,每一步的投入和风险都标出来:
第一步,先做好精排的多样性基线。很多团队的精排本身就只优化CTR,多样性靠重排规则硬撑。在没把精排多样性做扎实之前,上生成式推荐等于在烂地基上盖楼。
第二步,用规则式序列生成替代硬切重排。比如基于MMR(最大边缘相关)的列表生成,或者基于整数规划的列表组合优化。这一步用传统优化方法先尝到“全局组装”的甜头,也验证业务指标是否对“整页组合”敏感。
第三步,上小规模序列生成模型。采用我前面讲的GRU版本,低频地在部分流量上做实验,积累模型能力和线上状态。这个阶段的重点不是收益,而是团队对生成式模型的工程手感。
第四步,探索扩散模型或大模型辅助路线。当小模型验证了方向,再考虑加大投入,引入扩散模型或者用大模型构造更丰富的用户表征。
这套路线我都走过或见过别人走,每一步都不会白费。尤其是前三步,投入不大、风险很小,但能帮团队建立起很重要的“全局视角”。
9. 一点个人体会
排序模型这条路,从单点打分走到全局生成,本质上是推荐系统在认知上的一个升级——系统从“帮用户挑东西”进化到“为用户编排体验”。这个转变不是技术炫技,而是用户需求真实逼出来的:大家早就烦透了那种“一个吃到了柠檬的博主推荐了一堆柠檬”的推荐体验。
我做生成式推荐最大的体感是:精排解决的是“正确性”问题,生成式解决的是“体验感”问题。正确性决定你有没有资格出现在用户面前,体验感决定用户愿不愿意留下来。
如果你的业务目前连精排的CTR都还没做到极致,不用急着追生成式的风。先把正确性做扎实,把单点分打准,再考虑组合优化。但如果你的精排已经碰到天花板——点击率涨不动了、多样性怎么调都别扭、用户的负反馈反复出现——那生成式推荐确实值得你认真研究。它不一定是所有问题的答案,但它提供了排序模型象限里最后一块值得探索的版图。