1. 多模态生成推荐系统概述
推荐系统作为信息过滤的核心技术,在电商、视频平台、社交媒体等领域发挥着关键作用。传统推荐系统主要分为协同过滤和内容推荐两大范式,而近年来序列推荐(Sequential Recommendation)因其对用户行为时序建模的优势成为研究热点。然而,随着数据规模的扩大和用户需求的多样化,传统方法面临三个核心挑战:
- 存储瓶颈:基于ID的推荐系统需要为每个物品存储高维嵌入向量,百万级物品库的存储开销可达数十GB
- 语义缺失:协同信号仅反映用户行为模式,无法捕捉物品本身的语义特征
- 模态单一:现有方法多聚焦文本模态,难以处理图像、视频等富媒体内容
生成式推荐(Generative Recommendation)通过将物品表示为离散语义编码序列,理论上可以缓解上述问题。但实际应用中,这类方法在大规模场景下的推荐质量往往不及传统序列推荐模型。我们通过分析发现,性能瓶颈主要来自两方面:
关键发现:当前生成式推荐系统在以下维度存在明显局限:
- 模态利用不充分(仅文本)
- 协同信号与语义信息割裂
2. MSCGRec框架设计
2.1 整体架构
MSCGRec(Multimodal Semantic and Collaborative Generative Recommender)的创新架构包含三个核心组件:
多模态编码层:
- 文本模态:基于LLAMA的预训练文本编码器
- 图像模态:提出的RQ-DINO自监督量化模块
- 协同模态:SASRec序列推荐模型的物品嵌入
残差量化器:
class ResidualQuantizer(nn.Module): def __init__(self, levels=3, codebook_size=256): super().__init__() self.codebooks = nn.ModuleList([ nn.Embedding(codebook_size, dim) for _ in range(levels) ]) def forward(self, x): residuals = [x] codes = [] for level in range(self.levels): # 计算最近邻码本条目 distances = torch.cdist(residuals[-1], self.codebooks[level].weight) code = torch.argmin(distances, dim=-1) codes.append(code) # 计算残差 quantized = self.codebooks[level](code) residuals.append(residuals[-1] - quantized) return torch.stack(codes, dim=1) # [B, L]每个量化层级包含256个码本向量,通过3级残差量化生成层次化编码
序列建模层:
- 采用T5架构的编码器-解码器模型
- 创新性地引入双路径位置编码:
- 物品间位置编码(处理用户历史序列)
- 物品内位置编码(处理多模态编码序列)
2.2 自监督图像量化
传统图像量化方法(如VQ-VAE)依赖像素级重建损失,可能保留对推荐无用的高频细节。我们提出基于DINOv2的改进方案:
教师-学生框架:
- 教师模型:ViT-S/14的EMA权重
- 学生模型:相同架构但加入残差量化层
量化感知蒸馏:
\mathcal{L}_{RQ-DINO} = \text{CE}(f_s(\hat{z}^s_L), f_t(z^t)) + \alpha_3\|z^s - e_{c_l}\|^2其中$\hat{z}^s_L$为量化后的学生表征,$e_{c_l}$为码本向量
训练技巧:
- 使用iBOT的masked图像建模损失
- 加入KoLeo正则化防止表征坍缩
- 码本更新采用EMA策略(动量=0.99)
实验表明,该方法在PixelRec数据集上使NDCG@10提升17.3%,显著优于传统后量化方案。
3. 关键技术实现
3.1 协同信号融合
传统生成式推荐通过辅助损失对齐语义与协同信号,我们创新性地将协同特征视为独立模态:
特征提取:
- 使用SASRec模型处理用户交互序列
- 取最后一层物品嵌入作为协同表征
模态拼接:
[文本编码|图像编码|协同编码] + [模态类型嵌入]通过可学习模态标识区分不同信号源
动态掩码:
- 训练时以75%概率随机掩蔽某一模态
- 使用特殊[MASK]标记处理缺失情况
3.2 约束序列学习
为应对大规模物品库的编码组合爆炸问题,我们提出两项优化:
有效编码约束:
- 构建前缀树(Trie)存储所有有效编码序列
- 在训练时限制softmax计算仅在有效子节点进行:
\mathcal{L}_{rec}^{(i,l)} = -z_c + \log\sum_{c'\in Ch(v_{c_{<l}})} \exp(z_{c'})
光束搜索改进:
def constrained_beam_search(model, prefix, beam_size=20): live_beams = [([], 0)] # (tokens, score) for _ in range(max_len): new_beams = [] for tokens, score in live_beams: logits = model.predict(tokens) # 仅保留有效后续编码 valid_codes = trie.get_children(tokens) topk = logits[valid_codes].topk(beam_size) for code, logp in zip(topk.indices, topk.values): new_beams.append((tokens+[code], score+logp)) live_beams = sorted(new_beams, key=lambda x: -x[1])[:beam_size] return live_beams[0][0]
该方法使模型参数利用率提升32%,在Amazon Beauty数据集上Recall@1提高11.1%。
4. 实验与效果验证
4.1 实验设置
数据集:
| 数据集 | 用户数 | 物品数 | 交互数 | 稀疏度 |
|---|---|---|---|---|
| Beauty | 724K | 203K | 6.4M | 99.996% |
| Sports | 408K | 151K | 3.4M | 99.994% |
| PixelRec | 8.8M | 407K | 158M | 99.996% |
基线模型:
- 序列推荐:GRU4Rec, SASRec, FDSA
- 生成式推荐:TIGER, LETTER, ETEGRec
- 多模态方法:MQL4GRec
评估指标: Recall@K, NDCG@K, MRR@K (K∈{1,5,10})
4.2 主要结果
在Amazon Beauty数据集上的性能对比:
| 模型 | Recall@1 | NDCG@10 | MRR@10 |
|---|---|---|---|
| SASRec | 0.0050 | 0.0158 | 0.0110 |
| TIGERt | 0.0045 | 0.0122 | 0.0090 |
| ETEGRec | 0.0054 | 0.0150 | 0.0111 |
| MSCGRec | 0.0060 | 0.0168 | 0.0123 |
关键发现:
- 首次实现生成式推荐超越传统序列推荐
- 多模态融合带来平均12%的性能提升
- 图像量化质量直接影响推荐效果
4.3 消融实验
| 变体 | Recall@10 | Δ |
|---|---|---|
| 完整模型 | 0.0315 | - |
| w/o 位置编码 | 0.0311 | -1.3% |
| w/o 约束训练 | 0.0291 | -7.6% |
| 仅文本模态 | 0.0173 | -45.1% |
| 仅图像模态 | 0.0158 | -49.8% |
Shapley值分析显示各模态贡献度:
- 协同特征:42.7%
- 文本:31.5%
- 图像:25.8%
5. 工程实践建议
在实际部署中,我们总结出以下经验:
码本训练技巧:
- 分阶段训练:先固定码本训练编码器,再联合微调
- 码本退化处理:定期统计各码本使用频率,对低频条目重置
推理优化:
# 使用TorchScript加速序列生成 @torch.jit.script def jit_predict(history: Tensor, model: nn.Module): with torch.no_grad(): return model(history)冷启动解决方案:
- 新物品:通过模态编码生成初始表征
- 新用户:混合内容推荐与热门推荐
特别注意事项:
- 图像量化器的训练数据需与业务场景匹配
- 协同模态可能引入马太效应,需定期去偏
- 编码长度需权衡存储开销与表达能力
6. 扩展应用
该框架可延伸至以下场景:
跨域推荐:
- 共享部分模态编码空间
- 通过迁移学习加速新领域适配
可解释推荐:
{ "item": "A12345", "semantic_codes": { "text": ["服饰", "运动", "耐克"], "image": ["运动鞋", "白色", "气垫"] } }实时推荐:
- 增量更新编码器
- 流式处理用户行为序列
未来可探索方向包括结合大语言模型进行提示增强、开发更高效的量化架构等。MSCGRec已在实际业务中验证了其有效性,为下一代推荐系统的发展提供了新思路。