跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

MiniOneRec 论文解读:生成式推荐框架

MiniOneRec 论文解读:生成式推荐框架 摘要 MiniOneRec 是一个开源框架,包含 SID 构建(RQVAE)、SFT(0.5b~7b)和 RL(受限解码 + 混合奖励)。实验证明了 LLM 的 Scaling 特点,模型越大效果越好。从结果来看,对齐 SID 与文本是重要的。 建模框架 框架包含四个主要部分: Tokenizer(RQVAE) LLM-text 对齐(利用 LLM…

游戏玩家发布于 2026/4/6更新于 2026/9/98K 浏览

MiniOneRec 论文解读:生成式推荐框架

摘要

MiniOneRec 是一个开源框架,包含 SID 构建(RQVAE)、SFT(0.5b~7b)和 RL(受限解码 + 混合奖励)。实验证明了 LLM 的 Scaling 特点,模型越大效果越好。从结果来看,对齐 SID 与文本是重要的。

建模框架

框架包含四个主要部分:

  1. Tokenizer(RQVAE)
  2. LLM-text 对齐(利用 LLM 的世界知识)
  3. SFT next token prediction
  4. RL(GRPO)

任务

序列推荐任务。先分词:一个用户 u,有一个时间顺序的历史交互商品序列 Hu=[i1, i2, …, iT]。每个商品 it 通过 RQVAE 编码为一个 3 层的 SID {c0_it, c1_it, c2_it}。后训练:LLM πθ,读取历史序列预测下一个商品。推理的时候使用 k beams search。

Item Tokenization

使用标准 RQVAE。为了避免码本坍缩,使用第一个训练 batch 的 k-means 中心作为 codebook 的初始化码本。代码中实现了 Sinkhorn-Knopp algorithm(LC-Rec 也做了),这也是缓解码本坍缩的 trick。

Align with LLM

对齐 LLM 世界知识和 SID 信号。

  • 任务一:序列推荐任务
  • 任务二:对齐 SID 和文本描述任务

注:GitHub 中更新了新技术 GPR-inspired SFT with Value-Aware Fine-Tuning (VAFT),实现了基于模拟物品价值的加权损失,但目前无实验结果。

RL with verifiable rewards (RLVR)

  1. 混合动态采样(SID 空间小,容易采样到相同的 SID)
  2. 稀疏排序信号

混合动态采样方法:论文提到 over-sample 疯狂采样构造不重复集合,以及 beam search。最终方法采用 beam search。 稀疏排序信号:用 NDCG 作为奖励,如果是正确商品,分数再加 1。

训练细节

  • 商品描述:Qwen3-Embedding-4B 编码
  • 分词器:RQVAE,单卡训练,batchsize=20480,lr=1e-3,epochs=10000
  • SFT:AdamW,Qwen2.5-Instruct。8 卡训练,单卡 batchsize=128,10 epochs+early stop(patience=1),lr=3e-4,cosine decay。
  • RL:GRPO,2 epoch,KL 权重β不变=0.1,lr=1e-5,batchsize=512
  • 推理:beam search width=16

评估

数据集:亚马逊 Office+Industrial。指标:HitRate + NDCG。

  1. Scaling:训练 + 评估损失随模型增大而减小。
  2. Baseline 对比:LLM 系列和非 LLM 系列对比,说明世界知识重要;Ours 和 LLM 系列对比,说明 RL 重要。

Transferability

SID pattern discovery 实验:在 Industrial 上训练,在 Office 上评估,证明 RL 的有效性。未做 SFT 是因为 SFT 容易领域过拟合影响迁移。

消融实验

  1. Language-SID 的重要性

    • 不做 language-SID 对齐
  • 做 language-SID 对齐,但不 SFT 推荐任务,只在 RL 上做推荐任务
  • SFT 只做推荐任务,RL 做 language-SID 对齐
  • 采样

    • 直接 topk
    • 采 1.5 倍 budget+ 筛选
    • Beam search(效果最好)
  • 奖励设计

    • 01 奖励
    • SASRec 模型 logits(效果很差,reward hacking,SASRec 协同信息和推荐信息不一致)
    • NDCG
  • 是否预训练:预训练效果更好。

  • 代码实现

    代码结构

    • 数据:MiniOneRec/data.py

      • Tokenizer:给普通分词器多包装一层,处理连续的 bos/eos 特殊字符串。
      • SidSFTDataset:输入用户最近交互过的 item 列表,预测用户下一个交互的 item。
      • SidItemFeatDataset:sid2title 或者 title2sid 任务。
      • FusionSeqRecDataset:带意图识别的商品推荐。
    • SFT:MiniOneRec/sft.py

      1. 运行 train.py,传入要训练的主干 LLM 即 base_model。
      2. 传入 SID token,MiniOneRec 是传入到了普通 tokens 中,而非 special tokens 中。
      3. 考虑是否冻结 LLM 自带的 token 的 emb 和各种参数,只训练新传入的 SID 的 token emb。
      4. 处理数据集,有三种类型:SidSFTDataset、SidItemFeatDataset、FusionSeqRecDataset。
      5. 训练。

    TokenExtender: SID

    • SID 索引示例:MiniOneRec/data/Amazon/index/Industrial_Scientific.index.json
    • 是一个 json 文件,{"0": ["<a_236>", "<b_231>", "<c_226>"], ...}。
    • 函数 get_new_tokens 返回 self.new_tokens,就是返回 SID 的子 token 集合。

    如何只对新 token 的 emb 做训练 先冻结所有参数,然后打开 embedding 参数的 requires_grad,然后通过 register_hook 来控制哪些 token 的梯度保留。

    print("Freezing LLM parameters, only training new token embeddings")
    for param in model.parameters():
        param.requires_grad = False
    
    if sid_index_path and os.path.exists(sid_index_path) and new_tokens:
        embedding_layer = model.get_input_embeddings()
        if embedding_layer.weight.shape[0] > original_vocab_size:
            embedding_layer.weight.requires_grad = True
    
    def mask_grad(grad):
        # grad shape: [vocab_size, hidden_dim]
        grad[:original_vocab_size].zero_()
        return grad
    
    embedding_layer.weight.register_hook(mask_grad)
    print(f"Unfrozen {len(new_tokens)} new token embeddings "
          f"(indices {original_vocab_size} to {len(tokenizer)-1})")
    

    RL 部分

    代码入口:MiniOneRec/rl.py

    • 数据集
      • SidDataset:输入用户历史交互的 item SID 序列,预测下一个 item 的 SID。
      • RLTitle2SidDataset:title2sid 和 description2sid 任务,返回 prompt-completion pairs。
      • RLSeqTitle2SidDataset:输入用户交互序列(带 title)来预测下一个 item 的 SID。
    • 奖励模型:SASRec。

    SFT_GPR

    MiniOneRec/sft_gpr.py GPR-inspired SFT with Value-Aware Fine-Tuning (VAFT):实现了基于模拟物品价值的加权损失。

    目录

    1. MiniOneRec 论文解读:生成式推荐框架
    2. 摘要
    3. 建模框架
    4. 任务
    5. Item Tokenization
    6. Align with LLM
    7. RL with verifiable rewards (RLVR)
    8. 训练细节
    9. 评估
    10. Transferability
    11. 消融实验
    12. 代码实现
    13. 代码结构
    14. RL 部分
    15. SFT_GPR

    更多推荐文章

    查看全部
    • JavaScript 生成 UUID 的常见方案与避坑指南
    • 大模型技术框架与核心应用学习指南
    • Python 脚本打包成 EXE 的 6 种主流方案对比与选型指南
    • C++ 继承机制:同名成员隐藏规则与默认函数详解
    • MySQL 数据类型详解:数值、字符串与时间类型实战
    • Llama 开源家族演进:从 Llama-1 到 Llama-3 技术解析
    • 基于 BlueBubbles 与 OpenClaw 的本地 iMessage AI 集成方案
    • Linux 进程创建与终止:fork 原理与退出机制实战
    • Java 队列:原理、实现与高频实战
    • Llama.cpp 模型量化与 Ollama Docker 部署实战指南
    • 数据结构在不同领域的应用场景解析
    • ScrapeGraphAI:利用大语言模型实现智能网页数据提取
    • 黑客、骇客与白帽:网络安全角色的定义与职责解析
    • WebRTC 流媒体协议技术详解
    • 生产环境 Python Docker 镜像选择 Slim 版本
    • Kali Linux 2025 部署与 OpenVAS 安全扫描实战
    • Java 使用 Spire.Doc 实现 HTML 转 XML 与 XPS
    • Flutter 三方库 whatsapp_bot_flutter 在鸿蒙系统下的适配与实战指南
    • LangChain 开发环境准备:AI 大模型私有部署技术指南
    • GLM-4.7-Flash 本地 Copilot 工具构建实战教程

    相关免费在线工具

    • 加密/解密文本

      使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

    • RSA密钥对生成器

      生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

    • Mermaid 预览与可视化编辑

      基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

    • 随机西班牙地址生成器

      随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

    • Gemini 图片去水印

      基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

    • curl 转代码

      解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online