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

MiniOneRec 开源框架技术解析:LLM 生成式推荐

MiniOneRec 是基于大语言模型的开源推荐框架,采用 RQVAE 构建 SID 索引,结合 SFT 与 RL(GRPO)进行训练。框架通过 SID 与文本描述对齐利用 LLM 世界知识,实验验证了模型 Scaling 效应及混合奖励机制的有效性。关键组件包括分词器、LLM 对齐、SFT 预测及带可验证奖励的强化学习,支持序列推荐任务并具备跨领域迁移能力。

remedios发布于 2026/4/8更新于 2026/10/1981 浏览

MiniOneRec 框架解析

MiniOneRec 是一个基于大语言模型的开源推荐框架,主要包含 SID 构建(RQVAE)、SFT(0.5b~7b)和 RL(受限解码 + 混合奖励)三个核心阶段。实验证明了 LLM 的 Scaling 特点,模型越大效果越好,且对齐 SID-text 对性能提升至关重要。

代码结构

SFT 训练流程

前置:数据集

  • SidSFTDataset: 输入用户最近交互过的 item 列表,预测下一个交互 item。
  • SidItemFeatDataset: sid2title 或 title2sid 任务。
  • FusionSeqRecDataset: 带意图识别的商品推荐。

TokenExtender: SID

SID 索引示例存储在 JSON 文件中,例如 Industrial_Scientific.index.json。indices 是一个字典,如 indices["0"]=["<a_236>", "<b_231>", "<c_226>"]。函数 get_new_tokens 返回 SID 的子 token 集合。注意代码逻辑中读取的是所有实体的 SID token 集合,而非码本 token 集合,部分未见过实体可能分配给未使用的 SID 索引 token。

只对新 token 的 embedding 做训练

通过冻结所有参数,打开 embedding 参数的 requires_grad,并利用 register_hook 控制梯度保留。直接对张量切片设置 requires_grad 属性不可行,需使用 hook 将旧 vocab 部分的梯度置零。

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[:original_vocab_size].zero_()
        return grad

    embedding_layer.weight.register_hook(mask_grad)
    print(f"Unfrozen {len(new_tokens)} new token embeddings (indices {original_vocab_size} to {len(tokenizer)-1})")

RL 训练流程

数据集

  • SidDataset: 输入用户历史交互 item SID 序列,预测下一个 item SID。
  • RLTitle2SidDataset: title2sid 和 description2sid 任务,返回 prompt-completion pairs。
  • RLSeqTitle2SidDataset: 输入用户交互序列(带 title)预测下一个 item SID。

奖励模型

使用 SASRec 作为奖励模型基础。

建模细节

框架组成

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

Task

序列推荐任务。先分词:用户 u 有历史交互商品序列 $H_u=[i_1, i_2, ..., i_T]$。每个商品 $i_t$ 通过 RQVAE 编码为 3 层 SID ${ c_0^{i_t}, c_1^{i_t}, c_2^{i_t} \u007d$。后训练 LLM $π_θ$ 读取历史序列预测下一个商品。推理时使用 k beams search。

Item Tokenization

采用标准 RQVAE。为避免码本坍缩,使用第一个训练 batch 的 k-means 中心作为 codebook 初始化码本。代码中包含 Sinkhorn-Knopp algorithm 代码,这也是缓解码本坍缩的 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。最终采用 beam search 方法。
  2. 稀疏排序信号: 使用 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

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

消融实验

  • Language-SID 重要性: 对比不做对齐、仅 RL 对齐、仅 SFT 对齐等不同配置。
  • 采样策略: 直接 topk、采 1.5 倍 budget+ 筛选、beamsearch(效果最好)。
  • 奖励设计: 01 奖励、SASRec 模型 logits(效果差,存在 reward hacking)、NDCG。
  • 是否预训练: 预训练效果更好。

相关代码

sft_gpr 模块实现了 GPR-inspired SFT with Value-Aware Fine-Tuning (VAFT),基于模拟物品价值实现加权损失。

目录

  1. MiniOneRec 框架解析
  2. 代码结构
  3. SFT 训练流程
  4. RL 训练流程
  5. 建模细节
  6. 框架组成
  7. Task
  8. Item Tokenization
  9. Align with LLM
  10. RL with verifiable rewards (RLVR)
  11. 训练配置
  12. 评估
  13. Transferability
  14. 消融实验
  15. 相关代码

更多推荐文章

查看全部
  • 使用 NCC 和 PKG 将 Node.js 项目打包为跨平台可执行文件
  • OpenClaw 飞书机器人权限配置与安全实践
  • 结构化的力量:ChatGPT 如何实现高效信息管理
  • Midjourney 线上入口与中文环境使用指南
  • Vheer:免费免登录 AI 绘画视频生成与智能编辑工具
  • VS Code 中 GitHub Copilot 高效使用指南:安装与配置
  • Qwen3.5-9B 对比 GPT-oss-120B:混合架构与基准测试全解析
  • Mac mini M4 部署 OpenClaw + Ollama 本地大模型接入飞书机器人
  • 中国网络安全领域十大先驱人物回顾
  • 强化学习:演员评论家 Actor-Critic 算法
  • C++ 类与对象进阶:类型转换、静态成员、友元及内部类
  • LLM 存储优化实战:解决大量 QA 与长对话记忆问题
  • OpenClaw 技术架构详解:构建个人 AI 助手系统
  • AI 时代的技术民主化与个人创作实践
  • 未来哪些行业与岗位面临机器人替代风险?
  • Anaconda 开始菜单快捷方式丢失及 mkmenus 报错修复
  • nanobind C++/Python 高性能绑定实战指南
  • 基于混合粒子群 - 蚁群算法的多机器人多点送餐路径规划
  • C++11 核心特性:列表初始化、新式声明与 STL 演进
  • C++ 四种类型转换详解:static_cast、reinterpret_cast、const_cast 与 dynamic_cast

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如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