MiniOneRec
首个生成式推荐全开源框架,让大模型直接学会推荐,破解传统推荐系统的Scaling Law难题
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
首个生成式推荐全开源框架,让大模型直接学会推荐,破解传统推荐系统的Scaling Law难题
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一个电商平台的场景:用户小王最近买了相机,平台不仅仅推送「三脚架」「滤镜」这类关联商品,而是生成一段自然的推荐理由:「根据你喜欢的风光摄影风格,我们为你挑选了这套 ND 滤镜组合,配合便携三脚架特别适合户外拍摄。」这不是科幻,而是 MiniOneRec 正在探索的方向——生成式推荐(Generative Recommendation)。
MiniOneRec 是首个完全开源的生成式推荐框架,由研究者 AkaliKong 发布于 GitHub,目前已在学术和工业界引发关注。它将大语言模型(LLM)的生成能力引入推荐系统,实现从「找商品」到「懂需求」的范式跃迁。相比传统的协同过滤和双塔模型,生成式推荐能用自然语言解释推荐逻辑,为多模态推荐、冷启动推荐等难题提供了新的解决思路。

图1:MiniOneRec 项目 Logo
传统推荐系统的本质是匹配:找到用户历史行为与商品特征的交集。这种方式在数据丰富的场景下表现优异,但存在三个根本局限:
第一,泛化能力差。 协同过滤只能在训练数据覆盖的「用户-商品」对上工作,对于训练集里从未出现过的商品或用户,推荐效果断崖式下降。第二,表达能力受限。 协同过滤的 embedding 向量维度固定(通常 64-256 维),难以表达商品丰富的语义信息。第三,推理效率低。 双塔模型需要在推理时计算全部候选商品的 embedding,百万级商品库的在线推理延迟是工程痛点。
大语言模型的崛起改变了这一切。LLM 存储了人类知识的海量语义表示,具备强大的零样本和少样本泛化能力。如果能把 LLM 引入推荐系统,理论上可以让推荐模型继承 LLM 的世界知识,理解商品之间的语义关联,甚至生成推荐理由。但直接将 LLM 当作推荐模型面临核心挑战:推荐的动作空间是离散的、商品 ID,而 LLM 的输出空间是自然语言 token,直接让 LLM 输出商品 ID 会产生海量无效候选项。MiniOneRec 的核心贡献,正是解决这个问题。
MiniOneRec 的技术路线可以概括为三步走:

图2:MiniOneRec 整体技术框架
MiniOneRec 引入 SID(Semantic Item Discovery) 机制。核心思路是:先用冻结的文本编码器(text encoder)将商品的标题 + 描述编码为稠密向量,然后用三层 RQ-VAE( Residual Quantized - Variational AutoEncoder) 将这个向量量化为离散 token。
具体而言:商品文本经过 encoder 得到 embedding,RQ-VAE 的每一层负责学习一个 codebook(码本),将 embedding 沿维度分解为若干层的量化结果。假设 embedding 维度为 D,RQ-VAE 三层分别量化 D/3 维,最终将商品表示为 3 个离散 token 的序列——这就是该商品的 SID。
这样做有什么好处?LLM 天然能处理 token 序列,SID 将商品 ID 从离散符号「翻译」成了 LLM 能理解和生成的语言形式。更重要的是,RQ-VAE 的量化过程保留了商品的语义信息——语义相近的商品在 token 空间中也更接近。
SID 构造完成后,MiniOneRec 用有监督微调(SFT) 来训练推荐模型。具体做法是将用户的行为历史(按时间顺序排列的商品 SID 序列)视为 token 序列,让 LLM 预测下一个商品的 SID——这是一个标准的 next-token prediction 任务。
在 SFT 阶段,MiniOneRec 还加入了语言对齐目标(Language Alignment Objectives):在自然语言描述和 SID 之间做双向映射。例如:
这种双向对齐确保推荐模型既能继承 LLM 的语言知识,又能将知识锚定在具体的商品离散编码上。
从代码实现看,sft.py 使用 HuggingFace Transformers 库,以 AutoModelForCausalLM 为基础加载 LLM(如 Qwen2.5-base 系列)。训练支持 DeepSpeed ZeRO-2 优化(配置见 config/zero2_opt.yaml),支持 bitsandbytes 的 4-bit 量化以降低显存占用,支持 Accelerate 框架实现多 GPU 并行。batch_size、learning_rate、epoch 等超参通过命令行传参指定。
SFT 之后,MiniOneRec 引入推荐导向的强化学习(RL) 阶段,基于 GRPO(Group Relative Policy Optimization)算法。相比 PPO,GRPO 不需要单独的价值网络(value model),而是在同一 prompt 下生成多个候选推荐,对组内奖励做归一化,显著降低了训练复杂度和显存占用。
在 RL 阶段,MiniOneRec 使用受约束的 beam search 生成候选推荐:确保每个 beam 输出的 SID 都对应有效商品,避免 LLM 产生「幻觉商品」。奖励函数融合了二元正确性奖励和排序感知的惩罚项:对概率高但实际错误的商品加重惩罚。实验表明,GRPO 阶段能显著提升推荐的多样性和准确性。

图3:MiniOneRec 在 Amazon 数据集上的主实验结果
MiniOneRec 的代码库组织清晰,主要模块如下:
| 模块 | 功能 |
|---|---|
sft.py / sft.sh | SFT 训练入口,支持 DeepSpeed、bitsandbytes 量化、多卡并行 |
rl.py / rl.sh | GRPO 强化学习训练入口 |
convert_dataset.py | 数据集格式转换,将原始交互数据转为训练格式 |
data.py | 数据加载模块,支持多种 Dataset 类型(SFTDataset、SidSFTDataset 等) |
evaluate.py / evaluate.sh | 评测脚本,支持 NDCG、Hit Rate 等推荐系统指标 |
LogitProcessor.py | 自定义 Logit Processor,实现受约束解码(避免生成无效 SID) |
rq/ | RQ-VAE 量化模块,负责 SID 构造 |
核心依赖:PyTorch 2.6.0、Transformers(HuggingFace)、DeepSpeed 0.18.0、bitsandbytes 0.48.1(4-bit 量化)、torchrec(Meta 推荐系统库)、Accelerate(分布式训练)。训练脚本默认使用 torchrun 启动多进程(8 卡并行),并通过 NCCL_IB_DISABLE=1 禁用 InfiniBand 通信以适应非集群环境。
MiniOneRec 作为学术研究框架,存在以下需要注意的问题:
依赖 LLM 预训练知识。 SID 的语义质量直接取决于底层文本编码器和 LLM 的预训练知识。如果推荐场景的商品描述不在 LLM 的知识覆盖范围内,SID 的语义表达会退化。在实际工业场景中,冷门商品、长尾品类的推荐效果可能不稳定。
推理延迟较高。 相比双塔模型的向量检索(毫秒级),LLM 自回归生成 SID 的延迟显著更高。README 中也提到,Instruct 模型版本存在「大量无效商品」的生成问题,可能与 transformers 库版本有关,临时解决方案是切换为 Base 模型(如 Qwen2.5-base)。
数据预处理复杂。 完整的训练流程需要:原始交互数据 → SID 构造 → 数据集转换 → SFT → RL,每一步都需要配置参数和准备数据。对于没有推荐系统经验的开发者,上手门槛不低。
MiniOneRec 的出现代表了推荐系统领域的一个新兴方向:生成式推荐。2024 年以来,Meta、Google、阿里等大厂均在该方向有探索(如 Google 的「TIGERS」系列论文、Meta 的「MambasRec」等)。MiniOneRec 的开源意义在于,它第一次将完整的「SID 构造 + SFT + GRPO RL」三阶段流程做了可复现的开源实现,降低了研究者和工程师的探索门槛。
从技术趋势看,生成式推荐有望在以下场景率先落地:跨域推荐(利用 LLM 理解不同领域的语义关联)、对话式推荐(结合 RAG 架构)、可解释推荐(直接生成推荐理由)。MiniOneRec 的 SID 机制和 GRPO 训练范式,为这些方向提供了可参考的技术原型。
总体而言,MiniOneRec 是一个学术导向的生成式推荐研究框架,适合推荐系统研究者、LLM 应用探索者以及对推荐算法前沿感兴趣的高校团队。对于想直接部署推荐服务的工程师来说,需要结合具体业务场景做大量二次开发。