MiniOneRec 框架解析
MiniOneRec 是一个开源的生成式推荐框架,核心思路是通过 RQVAE 构建序列 ID(SID),利用大语言模型(LLM)的世界知识进行文本对齐,并结合 SFT 与强化学习(RL)优化推荐效果。该框架验证了模型规模扩展性(Scaling Law)在推荐任务中的有效性,并强调了 SID 与文本描述对齐的重要性。
核心架构
框架主要包含四个环节:
- Tokenizer:使用 RQVAE 将商品编码为多层 SID。
- LLM-Text 对齐:利用 LLM 预训练知识连接 SID 与文本特征。
- SFT:监督微调进行 Next Token Prediction。
- RL:基于 GRPO 的强化学习优化奖励信号。

数据与分词
序列推荐任务
用户历史交互序列 $H_u = [i_1, i_2, ..., i_T]$ 经过 RQVAE 编码,每个商品被转换为 3 层 SID:${c_0^{i_t}, c_1^{i_t}, c_2^{i_t}}$。推理阶段采用 Beam Search。
Item Tokenization
标准 RQVAE 实现中,为避免码本坍缩,代码采用了第一个训练 batch 的 k-means 中心作为 codebook 初始化。此外,还引入了 Sinkhorn-Knopp algorithm(类似 LC-Rec 的做法)来缓解坍缩问题。实践中,直接聚类往往也能取得不错的效果。
数据集类型
代码路径 MiniOneRec/data.py 定义了多种数据集类:
- SidSFTDataset:输入用户最近交互 item 列表,预测下一个交互 item。
- SidItemFeatDataset:处理 sid2title 或 title2sid 任务。
- FusionSeqRecDataset:带意图识别的商品推荐。
训练策略详解
SFT 微调
入口文件为 MiniOneRec/sft.py。训练流程如下:
- 传入主干 LLM(base_model)。
- SID token 被映射到普通 tokens 中,而非 special tokens。
- 参数冻结策略:通常冻结 LLM 原有参数,仅训练新传入的 SID token embedding。但需注意,不能直接对 Tensor 切片设置
requires_grad=False,需配合 Hook 机制。
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()
embedding_layer.weight.shape[] > original_vocab_size:
embedding_layer.weight.requires_grad =
():
grad[:original_vocab_size].zero_()
grad
embedding_layer.weight.register_hook(mask_grad)
(
)


