新闻详情

新闻详情

首页 / 资讯中心 / 详情

生成式推荐实战:MiniOneRec 从 SID 构建到 RL 微调全链路解析

发布时间:2026/9/20 19:42:00来源:尧图网络
生成式推荐实战:MiniOneRec 从 SID 构建到 RL 微调全链路解析
推荐系统这两年最明显的一个变化就是“生成式”思路开始从论文走进工程实践。以前我们做召回、排序习惯把问题拆成“预测点击率”或者“预测评分”这样的判别式任务而生成式推荐换了个视角把推荐直接当成一个“序列到序列”的生成问题——给定用户历史行为直接生成他接下来可能感兴趣的物品标识。MiniOneRec 就是这样一个开源框架它把生成式推荐从 SID 构建、模型训练到 RL 微调这条链路串了起来让个人开发者和小团队也能在单卡上跑通一套完整的生成式推荐流程。这篇文章我会围绕 MiniOneRec 的实践展开重点讲清楚 SID 是怎么构建的、生成式推荐模型怎么训练、RL 微调又该怎么落地适合有一定深度学习基础、想动手复现生成式推荐的工程师和研究者参考。1. 生成式推荐的整体设计与 MiniOneRec 的定位1.1 为什么推荐系统要转向生成式传统推荐系统的核心是判别式建模给定用户和物品的特征模型输出一个分数再按分数排序。这套范式成熟、稳定但有两个绕不开的痛点。第一是候选集爆炸工业级场景下物品数量动辄百万千万每次排序都要在巨大候选集上打分工程成本高。第二是任务割裂召回、粗排、精排各管一段每段都有自己的目标和特征端到端优化很难。生成式推荐换了个思路把物品先映射成一串离散的 token也就是 SID然后让模型像生成文本一样根据用户历史行为序列自回归地生成下一个物品的 token 序列。这样一来推荐就变成了一个序列生成问题可以直接复用大语言模型那套成熟的训练和推理技术。它的好处很直接——不需要在百万候选集上逐个打分而是直接“生成”出候选同时召回和排序可以在一个模型里统一起来端到端优化成为可能。MiniOneRec 的定位就是把这个思路做成一个可跑通、可修改的开源实现。它没有追求工业级的规模而是把重点放在链路的完整性和可复现性上从原始交互数据出发构建 SID训练生成式推荐模型再用强化学习做微调。对于想入门生成式推荐的人来说这套框架的价值在于它把每个环节都摊开了你能看到数据怎么流转、SID 怎么生成、模型怎么训练、RL 怎么接进来。1.2 MiniOneRec 的整体架构拆解MiniOneRec 的架构可以分成三层来看。最底层是数据与 SID 层负责把原始的用户-物品交互数据整理成模型能吃的格式并把每个物品编码成 SID 序列。中间层是生成式推荐模型层通常基于一个 decoder-only 的 Transformer输入是用户历史行为的 SID 序列输出是下一个物品的 SID。最上层是训练与微调层包括监督微调SFT和强化学习微调RL两个阶段。这个分层设计背后有明确的工程考量。SID 层独立出来是因为 SID 的质量直接决定了生成式推荐的上限——如果 SID 不能很好地保留物品的语义和协同信息后面的模型再强也白搭。模型层选择 decoder-only 架构是因为它和主流大语言模型结构一致可以复用大量现成的训练技巧和工具。训练层分成 SFT 和 RL 两阶段是因为纯监督学习只能让模型模仿历史数据而 RL 可以让模型直接优化推荐目标比如提升多样性或者长期收益。提示MiniOneRec 的代码结构基本遵循这个分层你在阅读源码时可以按“数据准备 → SID 构建 → 模型定义 → SFT 训练 → RL 微调”这条主线去理解不容易迷路。1.3 适合谁来上手这套框架MiniOneRec 不是那种开箱即用的推荐系统它更像一个教学和实验平台。如果你是想快速搭一个推荐服务的产品团队它可能不是最优选择但如果你是研究者、学生或者想深入理解生成式推荐内部机制的工程师它非常合适。上手前你需要具备的基础包括熟悉 PyTorch了解 Transformer 的基本结构对推荐系统的基本概念召回、排序、协同过滤有认知。至于强化学习部分不需要你精通 PPO但至少要理解策略梯度的大致思路否则 RL 微调那段会看得比较吃力。2. SID 构建生成式推荐的地基2.1 SID 到底是什么为什么它这么关键SID 全称是 Semantic ID中文一般叫语义标识。在生成式推荐里每个物品不再用一个整数 ID 表示而是用一串离散的 token 表示比如某个物品的 SID 可能是[12, 45, 78]。这串 token 不是随便编的它要尽可能保留物品的语义信息和协同信息。为什么不能直接用原始物品 ID因为原始 ID 是随机分配的物品之间的相似性完全体现不出来模型没法从 ID 本身学到任何有用的东西。而 SID 通过把相似物品映射到相近的 token 序列让模型在生成时能自然地泛化。你可以把 SID 理解成给每个物品发了一个“语义地址”。就像快递地址从省到市到区逐级细化SID 也是从粗到细地描述一个物品。第一层 token 可能代表大的品类第二层代表子品类第三层代表更细的区分。这样模型在生成时先生成粗粒度的 token再逐步细化既符合语言模型的生成习惯又能保证生成的物品在语义上是合理的。2.2 基于向量量化构建 SID 的完整流程MiniOneRec 里 SID 的构建通常走的是“内容特征 → 向量 → 量化 → token 序列”这条路径。具体来说先用物品的内容特征比如标题、描述、类目或者协同特征比如交互过的用户群体训练一个物品 embedding然后用向量量化技术把连续的 embedding 离散化成 token。这里最常用的量化方法是 RQ-VAE残差量化变分自编码器。它的思路是先用一个码本对 embedding 做第一次量化得到第一层 token然后计算量化误差用第二个码本对残差再做量化得到第二层 token如此迭代几层就得到了一个多层的 SID。这样做的好处是每一层都在修正上一层的误差最终用有限的码本组合表达出丰富的物品语义。实际操作中码本大小和层数是两个关键超参。码本太小表达能力不够很多物品会被量化到同一个 token码本太大又容易过拟合而且生成空间会变得稀疏。层数方面一般 3 层是比较常见的配置既能保证区分度又不会让序列太长。以 3 层、每层码本大小 256 为例理论上可以表达 256 的三次方也就是约 1600 万个不同的 SID对于大多数中等规模的数据集完全够用。2.3 SID 构建中的实操细节与避坑构建 SID 时有几个坑我踩过值得单独说一下。第一个是特征的选择。如果你只用内容特征SID 会偏向语义相似但可能忽略协同信号如果只用协同特征SID 又会偏向热门物品长尾物品的表示会很差。比较稳妥的做法是两者融合比如把内容 embedding 和协同 embedding 拼接后再量化或者分别量化后再组合。第二个坑是码本的坍缩问题。训练 RQ-VAE 时很容易出现大部分物品都落到少数几个 token 上的情况这就是码本坍缩。解决办法包括使用 EMA 更新码本、增加码本使用率的正则项、或者在初始化时用 k-means 给码本一个合理的起点。我在实践中发现加一个码本熵的正则项效果比较明显能让 token 分布更均匀。第三个坑是 SID 的唯一性。理论上不同的物品应该有不同的 SID但量化之后难免出现碰撞。如果碰撞率太高说明码本容量不够或者层数太少需要调整。一般碰撞率控制在 1% 以内是可以接受的超过这个值就要重新检查量化配置。参数常见取值影响码本大小256 / 512太小表达能力不足太大生成空间稀疏量化层数3 / 4层数越多区分度越高但序列越长码本更新方式EMA / 梯度EMA 更稳定梯度更灵活正则项熵正则 / 使用率正则缓解码本坍缩注意SID 构建是一次性的离线过程但它的质量会贯穿整个训练链路。建议在构建完成后抽样检查一些物品的 SID看看相似物品的 SID 是否真的接近这是最直观的验证方式。3. 生成式推荐模型的训练与 SFT 实践3.1 模型结构选型与输入输出设计MiniOneRec 的生成式推荐模型通常基于 decoder-only 的 Transformer这一点和 GPT 系列一致。选择这个结构的原因很实际一是可以复用大量现成的预训练权重和训练代码二是自回归生成的方式天然适合“根据历史生成下一个物品”这个任务。输入输出的设计是这套模型的核心。输入是用户历史行为的 SID 序列比如用户依次交互过物品 A、B、C每个物品的 SID 是 3 个 token那么输入序列就是 A 的 3 个 token 加上 B 的 3 个 token 加上 C 的 3 个 token一共 9 个 token。输出是下一个物品的 SID也就是 3 个 token。训练时用 teacher forcing把真实的下一个物品 SID 作为标签计算交叉熵损失。这里有个细节值得注意物品之间的边界怎么区分如果直接把所有 token 拼在一起模型可能分不清哪些 token 属于同一个物品。常见的做法是加一个特殊的分隔符 token或者在每个物品的 SID 前加一个物品起始 token。MiniOneRec 里一般用后者这样模型能清楚地知道每个物品从哪里开始。3.2 监督微调的数据构造与训练技巧SFT 阶段的数据构造直接决定了模型能学到什么。基本思路是把每个用户的交互序列切成多个“历史 → 下一个物品”的样本。比如用户交互序列是 [A, B, C, D, E]那么可以构造出 [A] → B、[A, B] → C、[A, B, C] → D 等多个样本。这样做的好处是充分利用了序列数据让模型见到各种长度的历史。但这里有个权衡如果历史序列太长训练成本高而且早期行为对下一个物品的影响可能很小如果太短模型又学不到长期兴趣。实践中一般会设一个最大长度比如 20 个物品超出的部分截断保留最近的交互。另外样本的构造方式也会影响效果比如是否要做负采样、是否要加入随机负例这些都需要根据具体任务调整。训练技巧方面学习率调度很关键。SFT 阶段一般用较小的学习率配合 warmup 和余弦退火。batch size 在单卡上可能受限可以用梯度累积来模拟大 batch。另外由于 SID 的 token 分布可能不均衡热门物品的 token 出现频率高可以考虑对损失做加权缓解长尾问题。3.3 SFT 阶段的评估与调优思路SFT 训练完之后怎么判断模型好不好最直接的指标是下一个物品预测的准确率也就是模型生成的 SID 和真实 SID 完全匹配的比例。但这个指标有个问题SID 是分层的完全匹配要求每一层 token 都对过于严格。更合理的做法是分层评估比如第一层 token 的准确率、前两层都对的准确率这样能看出模型在哪一层出了问题。除了准确率还要看生成的多样性。如果模型对不同的用户历史都生成相似的 SID说明它可能坍缩到了热门物品上。可以统计生成结果的分布看看是否和真实分布接近。如果发现模型过于保守可以在训练时加入一些多样性正则或者在解码时用温度采样、top-k 采样来增加随机性。调优的时候我一般会先固定数据调模型结构和学习率等模型稳定了再回头优化数据构造。因为数据的问题往往比模型的问题更隐蔽也更难发现。比如如果发现模型总是预测热门物品可能是训练数据里热门物品的样本太多需要做重采样或者加权。4. RL 微调让生成式推荐对齐真实目标4.1 为什么 SFT 之后还需要 RL 微调SFT 的本质是让模型模仿历史数据但历史数据不等于最优策略。历史数据里充满了曝光偏差、位置偏差用户点击某个物品可能只是因为它排在前面而不是因为它真的符合兴趣。如果模型只是模仿这些数据它学到的其实是“历史系统会推荐什么”而不是“用户真正想要什么”。RL 微调的价值就在于它可以让模型直接优化我们真正关心的目标比如点击率、停留时长、多样性甚至是长期留存。在生成式推荐里RL 的框架是这样的模型作为策略根据用户历史生成物品 SID环境根据生成的物品给出奖励比如用户是否点击模型根据奖励调整策略让高奖励的生成概率变大。这样就跳出了“模仿历史”的局限直接朝着目标优化。4.2 RL 微调的目标设计与奖励建模RL 微调最难的部分不是算法而是奖励设计。奖励设计得好模型能学到有用的策略设计得不好模型会钻空子生成一堆高奖励但实际没用的物品。常见的奖励来源有几类一是即时反馈比如点击、购买二是长期反馈比如留存、复购三是辅助奖励比如多样性、新颖性。在 MiniOneRec 的实践里奖励通常是离线构造的。因为在线交互成本高一般会用历史数据构造一个奖励模型或者直接用一些可计算的指标作为奖励。比如可以用一个预训练的点击率模型给生成的物品打分作为奖励信号。这样做的好处是不需要在线环境但风险是奖励模型本身有偏差模型可能会过拟合到奖励模型的偏好上。奖励设计有几个原则一是奖励要稀疏但有意义不要为了密集而加入大量噪声二是要防止奖励黑客比如模型发现生成某个特定 token 就能拿高分就会一直生成它三是要考虑长期收益不能只看即时反馈。实践中常用的做法是把多个奖励加权组合权重需要仔细调。4.3 策略优化算法的选择与实现要点RL 微调常用的算法包括 PPO、DPO 以及一些变体。PPO 是经典选择稳定但实现复杂需要维护策略模型和价值模型还要处理优势估计和裁剪。DPO 则绕过了显式的奖励模型直接用偏好数据优化策略实现更简单但需要构造偏好对。在生成式推荐里PPO 的落地有几个要点。第一是 KL 约束要防止新策略偏离旧策略太远否则训练会不稳定。第二是采样效率生成式推荐的生成空间很大采样成本高需要控制每次更新的样本量。第三是奖励归一化不同样本的奖励尺度可能差异很大归一化能让训练更稳定。DPO 在推荐里的应用相对新一些它的优势是不需要在线采样直接用离线数据就能优化。但 DPO 需要构造偏好对也就是对于同一个用户历史哪个生成的物品更好。这个偏好对的构造本身就需要一个可靠的评判标准所以 DPO 的效果很大程度上取决于偏好数据的质量。算法优点缺点适用场景PPO稳定、理论成熟实现复杂、采样成本高有在线环境或模拟器DPO实现简单、离线可用依赖偏好数据质量有高质量偏好数据GRPO无需价值模型相对较新、调参经验少生成任务、资源有限提示如果你刚开始做 RL 微调建议先用 DPO 跑通流程理解奖励和策略的关系再上 PPO。PPO 的调试成本比 DPO 高不少直接上手容易受挫。5. 常见问题与排查技巧实录5.1 SID 构建阶段的典型问题SID 构建阶段最常见的问题是码本坍缩和 SID 碰撞。码本坍缩表现为大部分物品被量化到少数几个 token导致 SID 区分度极低。排查方法是统计每个码本 token 的使用频率如果发现某些 token 占了绝大多数基本可以确认是坍缩。解决办法包括调整码本初始化、加熵正则、降低学习率。SID 碰撞是指不同物品得到完全相同的 SID。轻微的碰撞可以接受但如果碰撞率超过 5%就会严重影响模型效果。排查方法是统计唯一 SID 的数量和物品总数的比例。解决办法是增加码本大小或量化层数也可以检查特征是否有问题比如某些物品的特征几乎一样导致 embedding 也几乎一样。还有一个容易被忽略的问题是 SID 的语义一致性。理想情况下相似的物品应该有相似的 SID。验证方法是抽样一些物品计算它们 SID 的相似度和实际语义相似度的相关性。如果相关性很低说明量化过程丢失了语义信息需要重新设计特征或量化方式。5.2 训练阶段的损失异常与收敛问题训练阶段最常见的问题是损失不下降或者震荡。如果损失一开始就不下降先检查数据格式对不对SID 的 token 是否在词表范围内标签是否对齐。如果损失下降后又震荡可能是学习率太大或者 batch size 太小导致梯度噪声大。可以尝试降低学习率、增大 batch size 或者用梯度累积。另一个常见问题是过拟合。生成式推荐模型参数量大如果数据量不够很容易过拟合。表现是训练损失持续下降但验证损失开始上升。解决办法包括加 dropout、权重衰减、数据增强或者减少模型层数。实践中我发现SID 的序列长度对过拟合影响很大序列越长模型越容易记住训练样本所以控制序列长度也是一种正则手段。还有一种情况是模型生成的 SID 大量重复缺乏多样性。这通常是因为训练数据分布不均热门物品的样本太多。可以通过对损失加权、对热门物品降采样、或者在解码时用温度采样来缓解。5.3 RL 微调中的奖励异常与训练不稳定RL 微调阶段的问题往往更棘手。最常见的是奖励不升反降或者奖励上升但实际效果变差。前者可能是奖励设计有问题比如奖励信号太稀疏模型学不到东西后者可能是奖励黑客模型找到了钻空子的方式。排查方法是分析高奖励样本的特征看看模型是不是在生成一些看似高分但实际无意义的物品。训练不稳定是另一个大问题表现为损失剧烈波动、策略突然崩溃。这通常和 KL 约束、学习率、奖励归一化有关。KL 系数太小策略会偏离太远太大策略又学不动。学习率在 RL 里通常要比 SFT 小一个数量级。奖励归一化没做好也会导致梯度尺度不一致。还有一个实际问题是采样成本。生成式推荐的生成空间很大每次采样都要自回归生成多个 token成本不低。如果采样量不够梯度估计的方差会很大训练效率低。解决办法包括用更高效的采样策略、减少每次更新的样本量但增加更新频率、或者用离线数据做 DPO 而不是在线 PPO。问题可能原因排查方法解决思路码本坍缩初始化差、无正则统计 token 使用频率加熵正则、EMA 更新SID 碰撞码本容量不足统计唯一 SID 比例增大码本或层数损失震荡学习率大、batch 小观察损失曲线降学习率、梯度累积过拟合数据少、模型大对比训练/验证损失加正则、减层数奖励黑客奖励设计有漏洞分析高奖励样本重新设计奖励训练崩溃KL 系数不当监控 KL 散度调整 KL 系数5.4 从实践里总结的几条避坑经验第一条经验是先把 SID 做扎实再动模型。我见过不少人急着训模型结果 SID 质量很差模型怎么调都上不去。SID 是地基地基不稳上面盖什么都是白搭。建议在 SID 阶段多花时间把码本使用率、碰撞率、语义一致性这几个指标都检查一遍。第二条经验是 SFT 阶段不要追求极致指标。SFT 的目标是让模型学会生成合理的 SID而不是刷到最高的准确率。过度优化 SFT 指标反而可能让模型过拟合历史数据给后面的 RL 微调增加难度。SFT 做到“生成合理、分布正常”就可以了。第三条经验是 RL 微调从小规模开始。不要一上来就全量数据、大模型、复杂奖励。先用小数据、小模型、简单奖励跑通流程确认奖励能上升、训练稳定再逐步扩大规模。RL 的调试成本很高小步快跑比大步慢跑更划算。第四条经验是重视评估的多样性。不要只看一个指标准确率、多样性、分布相似度都要看。生成式推荐的评估比判别式复杂单一指标很容易误导。我一般会同时看离线指标和抽样的人工评估两者结合才能判断模型到底好不好。6. 生成式推荐的扩展方向与个人实践体会MiniOneRec 这套框架跑通之后其实还有很多可以扩展的地方。比如 SID 的构建可以引入更多模态的信息不只是文本特征还可以加入图像、视频特征让 SID 的语义更丰富。模型层面可以尝试更大的 backbone或者引入多任务学习让模型同时优化多个目标。RL 微调部分可以探索更精细的奖励设计比如引入用户长期价值的估计让模型不只关注即时反馈。我在实际跑这套流程的时候最大的体会是生成式推荐的门槛其实不在模型而在数据和 SID。模型结构是现成的训练代码也是现成的但 SID 的质量、数据的构造方式这些才是决定效果的关键。很多人把精力花在调模型上却忽略了数据层面的问题结果事倍功半。另外一点体会是RL 微调虽然听起来高级但它不是万能的。如果 SFT 阶段模型就没学好RL 也很难救回来。RL 的作用是在一个不错的策略基础上做精细调整而不是从零开始学。所以整个链路的顺序不能乱先把 SID 做好再把 SFT 做稳最后才考虑 RL 微调。最后分享一个小技巧在调试 SID 的时候可以把物品的 SID 和它的原始特征一起打印出来人工看几组直观感受一下 SID 是否合理。这个方法看起来很土但比看指标更有效很多问题一眼就能看出来。生成式推荐这个方向还在快速演进MiniOneRec 提供了一个很好的起点把这条链路跑通之后你对整个生成式推荐的理解会完全不一样。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

FreeRTOS 内核验证怎么做?本地跑通 3 类自动化证明(附 4 个坑点) 2026/9/20 22:06:24

FreeRTOS 内核验证怎么做?本地跑通 3 类自动化证明(附 4 个坑点)

FreeRTOS 内核验证怎么做?本地跑通 3 类自动化证明(附 4 个坑点) 【免费下载链接】FreeRTOS Classic FreeRTOS distribution. Started as Git clone of FreeRTOS SourceForge SVN repo. Submodules the kernel. 项目地址: https://gitcode.…

阅读更多 →
AssetRipper:如何快速从 Unity 游戏中提取 3D 模型和纹理资源?完整提取指南 2026/9/20 22:06:24

AssetRipper:如何快速从 Unity 游戏中提取 3D 模型和纹理资源?完整提取指南

AssetRipper:如何快速从 Unity 游戏中提取 3D 模型和纹理资源?完整提取指南 【免费下载链接】AssetRipper GUI application to analyze game files 项目地址: https://gitcode.com/GitHub_Trending/as/AssetRipper 你手上有一个 Unity 导出的游戏…

阅读更多 →
Wox AI 命令完全指南:把保存的 Prompt 变成可复用的查询命令 2026/9/20 22:06:24

Wox AI 命令完全指南:把保存的 Prompt 变成可复用的查询命令

桌面应用AI 应用插件系统 【免费下载链接】Wox A cross-platform launcher that simply works 项目地址: https://gitcode.com/gh_mirrors/wo/Wox 点击查看 免费下载 导读 Wox 的 AI 命令(AI Command)把一段保存好的 prompt 变成可重复使用…

阅读更多 →
三个问题定下 YOLO 多目标跟踪部署:BoxMOT 完整跟踪部署实践 2026/9/20 22:06:24

三个问题定下 YOLO 多目标跟踪部署:BoxMOT 完整跟踪部署实践

三个问题定下 YOLO 多目标跟踪部署:BoxMOT 完整跟踪部署实践 【免费下载链接】boxmot BoxMOT: Pluggable Python and C SOTA multi-object tracking modules with support for axis-aligned and oriented bounding boxes 项目地址: https://gitcode.com/GitHub_Tr…

阅读更多 →
R2R本地部署教程:一条命令跑起你的私有AI文档系统 2026/9/20 22:06:24

R2R本地部署教程:一条命令跑起你的私有AI文档系统

R2R本地部署教程:一条命令跑起你的私有AI文档系统 【免费下载链接】R2R SoTA production-ready AI retrieval system. Agentic Retrieval-Augmented Generation (RAG) with a RESTful API. 项目地址: https://gitcode.com/GitHub_Trending/r2/R2R R2R 是一个…

阅读更多 →
如何用RapidOCR识别多语言图片文字:3步跑通指南 2026/9/20 22:03:24

如何用RapidOCR识别多语言图片文字:3步跑通指南

如何用RapidOCR识别多语言图片文字:3步跑通指南 【免费下载链接】RapidOCR 📄 Awesome OCR multiple programing languages toolkits based on ONNX Runtime, OpenVINO, MNN, PaddlePaddle, TensorRT and PyTorch. 项目地址: https://gitcode.com/GitH…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞