OneRev V2 学习笔记
OneRec V2
Kuaishou OneRec Family
| 版本 | 论文/报告标题 | 发布时间 (arXiv) | 核心架构 | 解决的关键痛点 |
|---|---|---|---|---|
| OneRec V1 | OneRec Technical Report | 2025. 06 | Encoder-Decoder | 范式验证:证明了“推荐”可以重构为“生成”任务。 |
| OneRec V2 | OneRec-V2 Technical Report | 2025. 08 | Lazy Decoder-Only | 计算效率:解决 V1 编码太慢的问题,实现工业级低延迟。 |
| OneRec-Think | OneRec-Think: In-Text Reasoning for Generative Recommendation | 2025. 10 | Think-Ahead (CoT) | 深度理解:让模型在推荐前先“思考”理由,增强可解释性。 |
| OpenOneRec | OpenOneRec Technical Report | 2025. 12 | Qwen-based | 开源与通用:打破数据孤岛,发布基础模型。 |
分为两组:
-
**OneRec V1/V2: ** 主攻端到端,低延时,在线推荐,V2 是对 V1 的改进。
OpenRec V2 改进了 V1 的 encoder-decoder 结构,总计算量(应该指推理的 FLOPS)减少 94%,训练资源减少 90%。模型参数可以从 0.5B 扩展到 8B,同时符合 scaling law。
-
**OneRec-Think / OpenOneRec ** 主攻逻辑推理、语义理解,让模型不仅知道推荐什么,还知道为什么推荐。前者在业务上有实际的部署和验证;后者则完全基于 Qwen,倾向于在学术界给出一个通用的范式。
以下主要介绍 OneRec V2 的模型结构和推理过程。
Tokenizer
这一步和 OneRec V1 相同。目的是给每个 video 赋予一个 token,用低维特征表示高维稀疏特征。
相似物品数据集构建
我们希望构造一个数据集 ,里面包含若干个物品对,表示这些物品之间是相似的。
考虑用现有模型或方法从两方面提取:
-
User2Item: 当用户点击了 ,并且是正向的,那么从用户最近点击的 50 个正向物品中,选一个与 最相似的物品 ,构造相似物品对 加入 中。
-
Item2Item: 使用现有方法(如 Swing retrieval model),可以直接提取出若干相似物品对加入 。
对比学习
对于每个 video,提取以下特征:
- 视频封面 + 5 帧图像
- 标题 + Tag + 图像转文字 (OCR) + 语音转文字 (ASR)
将特征输入 miniCPM-V-8B ,得到 1280 个 512 维的特征向量:
然后使用交叉注意力机制压缩信息。具体地:
其中 。 最后压缩成了 个 维的特征向量:
表示对应位置上的矩阵做 Attention 计算,只不过三个矩阵不一定来自同一个序列,所以称为 Cross 。
注意到前一层计算的结果直接作为下一层的 ,所以只需确定 和各个 的参数即可。
论文中取 ,表示最后得到 个特征向量,模型包含 个 Transformer 层。
最后对提取出来的向量计算对比损失。同时还加了一个 LLaMA3 对特征向量解码,与 video 标题做对比,也算入损失中,让特征保持语义,推理的时候无需 LLaMA3 这一步。
RQ-Code
对提取出来的特征,每次进行 K-means 聚类,然后特征减去聚类中心(共 8192 个),依次迭代,共 3 层。将聚类中心编码作为码表,得到 8192x8192x8192 的三位编号,作为 video 的语义 token ,实现了用低维表示高维稀疏特征。
Multi-Scale Feature Engineering
这一步和 OneRec V1 相同。
User Static Pathway
用户个人数据特征:uid,年龄,性别等统一到 64 维特征向量,拼接后塞进 MLP 。
其中,
Short-term Pathway
提取用户最近的 条交互数据,包含视频编号、作者、tag、交互行为等等,总之是拼在一起然后塞进 MLP,得到 个 维的特征 ,这里不再赘述。
Positive-feedback PathWay
提取用户最近的 条 high-engagement 交互数据,类似的方式得到 。
Lifelong Pathway
这个有点复杂,总之得到了 ,其中 。
总结
对于每个用户,从四个方面得到了 个特征向量。
Context Processor
这一步与 V1 不同,V1 使用一个 Encoder 来处理特征向量,这里换成了更轻量的 Context Processor,优化了繁琐的 Encode 计算。
Lazy Decoder Block
适配
首先,