1. 项目概述
在推荐系统领域,用户历史行为序列建模一直是个极具挑战性的课题。传统方法如SIM(Search-based Interest Model)和Twin模型采用两阶段架构,但这种设计存在一个根本性缺陷:第一阶段产生的误差会直接传递到后续阶段且无法修正。HiSAC(Hierarchical Sparse Activation Compression)这篇论文提出了一种创新性的解决方案,通过层次化稀疏激活压缩技术,实现了对超长用户行为序列的高效建模。
核心突破点在于:将用户历史行为特征压缩为层次化的语义表示,同时通过软路由注意力机制保留长尾兴趣特征。这种设计既解决了计算效率问题,又避免了传统硬路由导致的量化误差放大现象。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心设计思路解析
2.1 多模态特征提取架构
模型首先使用冻结参数的CLIP模型分别提取图像和文本特征:
- 图像特征提取:CLIP视觉编码器处理商品图片
- 文本特征提取:CLIP文本编码器处理商品标题/描述
- 特征融合:通过QFormer(Querying Transformer)实现跨模态特征对齐
这种设计充分利用了CLIP强大的预训练表征能力,同时通过QFormer实现模态间的信息交互。实际部署时需要注意:
- CLIP模型保持冻结可显著降低训练成本
- QFormer需要针对电商场景进行微调
- 特征维度建议设置为768或1024以平衡效果与计算开销
2.2 残差量化VAE(RQ-VAE)设计
论文采用两层次残差量化变分自编码器构建码本:
python复制class RQVAE(nn.Module):
def __init__(self, num_layers=2, codebook_size=512):
self.quantizers = nn.ModuleList([
VectorQuantizer(codebook_size)
for _ in range(num_layers)
])
def forward(self, x):
residuals = x
quantized_out = 0
for quantizer in self.quantizers:
quantized, _ = quantizer(residuals)
quantized_out += quantized
residuals = x - quantized_out
return quantized_out
关键参数选择依据:
- 码本层数:2层(实验证明更多层数收益递减)
- 每层码本大小:512(平衡表征能力与内存占用)
- 残差连接设计:有效缓解量化过程中的信息损失
3. 层次化投票机制详解
3.1 树形结构构建
为降低计算复杂度,模型将用户历史序列映射到码本索引后构建计数树:
- 初始化根节点包含所有历史行为
- 根据码本索引进行层次化聚类
- 每个节点维护子节点的出现频次统计
mermaid复制graph TD
A[根节点:1000次] --> B[服装类:850次]
A --> C[电子类:120次]
A --> D[其他:30次]
B --> E[上衣:600次]
B --> F[裤子:200次]
B --> G[配饰:50次]
3.2 Top-K稀疏化策略
实际操作中的关键步骤:
- 从根节点开始深度优先遍历
- 在每个层级保留计数最高的K个子节点
- 剪枝低频分支(典型K值取32-128)
注意事项:K值过大会增加计算负担,过小会导致信息损失。建议通过A/B测试确定业务场景最优值。
4. 软路由注意力创新设计
4.1 传统硬路由的缺陷
硬路由直接索引码本特征会导致:
- 量化误差放大(尤其对低频item)
- 长尾兴趣丢失(如突然购买的袜子)
- 特征空间不连续(相邻item可能被划分到不同簇)
4.2 软路由实现方案
创新性地计算历史行为与码本的相似度权重:
- 计算每个历史item特征与码本codeword的余弦相似度
- Softmax归一化得到注意力权重
- 加权求和生成压缩后的历史表征
数学表达:
$$
w_{ij} = \frac{\exp(\text{sim}(h_i,c_j)/\tau)}{\sum_k \exp(\text{sim}(h_i,c_k)/\tau)}
$$
$$
\text{output} = \sum_{i,j} w_{ij} \cdot \text{Emb}(h_i)
$$
其中$\tau$为温度系数(通常取0.1-0.5),Emb为可训练的ID特征嵌入。
5. 实验部署关键要点
5.1 离线训练流程
-
多模态特征提取阶段:
- 批量大小:1024
- 学习率:3e-5(仅微调QFormer)
- 训练epoch:20-30
-
RQ-VAE训练阶段:
- 码本更新使用EMA策略(动量0.9)
- 采用codebook reset机制防止dead codes
- 建议使用Perceptual Loss增强视觉特征保留
5.2 在线服务优化
实际部署中的工程技巧:
- 层次化投票采用C++实现加速
- 软路由注意力实现SIMD向量化计算
- 特征缓存设计:
- 高频item特征预加载
- 低频item特征动态加载
- 响应时间控制在50ms以内
6. 效果对比与业务价值
6.1 量化指标对比
| 模型 | Recall@50 | 存储节省 | 推理耗时 |
|---|---|---|---|
| SIM | 0.128 | 1x | 120ms |
| Twin | 0.135 | 0.8x | 150ms |
| HiSAC | 0.152 | 0.3x | 65ms |
6.2 业务场景适配
特别适合以下场景:
- 超长用户行为序列(>1000个item)
- 多模态内容推荐(图文/视频)
- 需要捕捉突发兴趣变化
- 资源受限的移动端部署
7. 常见问题排查指南
7.1 码本训练不收敛
可能原因:
- 学习率设置不当
- 码本初始化不良
- 特征尺度不一致
解决方案:
- 采用K-means初始化码本
- 添加特征LayerNorm
- 逐步增加码本大小
7.2 长尾item效果差
优化策略:
- 调整软路由温度系数
- 添加长尾item保护机制
- 引入side information辅助
7.3 线上效果波动
诊断步骤:
- 检查特征分布漂移
- 验证码本覆盖率
- 监控投票树平衡度
8. 扩展应用方向
该方法可迁移到:
- 视频推荐中的帧级兴趣建模
- 电商搜索query理解
- 跨域推荐的特征共享
- 实时个性化广告投放
在实际业务落地中,我们发现将用户行为按时间分桶(如最近1天/7天/30天)分别建模,再分层融合可以进一步提升效果约3-5%。另一个实用技巧是在软路由注意力中加入时间衰减因子,让近期行为获得更高权重。
