召回算法
一、推荐系统架构
| 层级 | 功能 | 特点 |
|---|---|---|
| 召回层 | 从海量候选中筛选千级别候选集 | 速度快、覆盖广、精度低 |
| 粗排层 | 对召回结果初步排序,筛选百级别 | 平衡速度和精度 |
| 精排层 | 对候选精细排序 | 精度高、特征丰富 |
| 重排层 | 多样性/新颖性/业务规则调整 | 最终展示 |
| 竞赛特点 | 说明 |
|---|---|
| 召回阶段决定上限,排序阶段决定逼近程度 | |
| 召回不足 → 排序再好也无法推荐未召回的物品 | |
| 竞赛中通常直接做召回+精排,省略粗排和重排 |
二、协同过滤
ItemCF(基于物品的协同过滤)
| 维度 | 说明 |
|---|---|
| 核心思想 | 推荐与用户历史交互物品相似的物品 |
| 相似度计算 | cos(A,B) = |
| N(A) | 喜欢物品A的用户集合 |
| 推荐逻辑 | 对用户历史交互物品,找相似物品,按相似度加权排序 |
| 优势 | 物品相似度可离线计算,在线推荐快 |
| 适用 | 物品数远小于用户数、物品相对稳定的场景(电商) |
| ItemCF改进 | 说明 |
|---|---|
| 惩罚活跃用户 | 活跃用户对物品相似度贡献降低:1/log(1+ |
| 时间衰减 | 近期交互权重更高 |
| 类别过滤 | 只推荐与历史物品同类别的物品 |
UserCF(基于用户的协同过滤)
| 维度 | 说明 |
|---|---|
| 核心思想 | 推荐与目标用户相似用户喜欢的物品 |
| 相似度计算 | cos(A,B) = |
| N(A) | 用户A交互过的物品集合 |
| 推荐逻辑 | 找相似用户 → 取相似用户喜欢但目标用户未交互的物品 |
| 优势 | 可发现惊喜推荐(用户未意识到的兴趣) |
| 适用 | 用户数远小于物品数、用户兴趣稳定的场景(新闻) |
| ItemCF vs UserCF | ItemCF | UserCF |
|---|---|---|
| 推荐依据 | 物品相似度 | 用户相似度 |
| 推荐特点 | 稳定、可解释 | 惊喜、多样性 |
| 在线计算 | 快(离线算好) | 慢(需在线算) |
| 适用场景 | 电商、长尾物品少 | 新闻、用户兴趣变化快 |
三、图嵌入方法
DeepWalk
| 维度 | 说明 |
|---|---|
| 核心思想 | 将用户-物品交互图转为序列,用Word2Vec学习节点向量 |
| 步骤1:随机游走 | 从每个节点出发,随机选择邻居游走,生成多条路径序列 |
| 步骤2:Skip-Gram | 对路径序列用Skip-Gram训练,学习每个节点的向量表示 |
| 步骤3:相似度检索 | 用学到的向量做最近邻检索,找相似物品/用户 |
| 优势 | 可同时学习用户和物品向量,捕捉图结构信息 |
| 劣势 | 随机游走可能偏向高度数节点 |
其他图方法
| 方法 | 改进点 |
|---|---|
| Node2Vec | BFS+DFS混合游走策略,平衡同质性和结构等价性 |
| LINE | 保留一阶(直接邻居)和二阶(共同邻居)相似度 |
| EGES | 阿里出品,融合多种side information的图嵌入 |
四、深度学习召回
YouTube DNN
| 维度 | 说明 |
|---|---|
| 结构 | 双塔模型:用户塔(用户特征→向量) + 物品塔(物品特征→向量) |
| 训练 | Softmax分类(正样本为用户点击物品,负样本采样) |
| 推理 | 用户向量与物品向量内积,取Top-K |
| 优势 | 可融合丰富特征,在线推理快(向量检索) |
| 关键 | 负采样策略、特征工程 |
DSSM(Deep Structured Semantic Model)
| 维度 | 说明 |
|---|---|
| 结构 | 双塔:Query塔 + Doc塔,内积计算相似度 |
| 训练 | Triplet Loss / InfoNCE Loss |
| 优势 | 两塔独立计算,可离线建索引 |
| 劣势 | 两塔交互晚(仅最后内积),特征交叉不充分 |
五、多兴趣召回
动机
| 问题 | 说明 |
|---|---|
| 单向量瓶颈 | 一个用户用一个向量表示,难以表达多兴趣 |
| 示例 | 用户同时喜欢手机和衣服,单向量只能折中 |
| 解决方案 | 用多个向量表示用户不同兴趣 |
MIND(Multi-Interest Network)
| 维度 | 说明 |
|---|---|
| 核心思想 | 用动态路由机制从用户行为序列中提取多个兴趣向量 |
| 动态路由 | 行为序列 → Capsule网络 → K个兴趣胶囊(向量) |
| K值 | 兴趣数量,通常4~8 |
| 训练 | Label-aware Attention:每个兴趣向量与目标物品算注意力,取最相关兴趣 |
| 推理 | 用K个兴趣向量分别检索,合并去重 |
ComiRec
| 维度 | 说明 |
|---|---|
| 核心思想 | 与MIND类似,但用Attention机制提取多兴趣 |
| 优势 | Attention比动态路由更直观、更易训练 |
| 两种变体 | ComiRec-Att(注意力) / ComiRec-DR(动态路由) |
多兴趣召回实践
| 要点 | 说明 |
|---|---|
| 兴趣数量K | 过小无法覆盖多兴趣,过大引入噪声 |
| 检索合并 | 每个兴趣向量取Top-N,合并后取Top-K |
| 与单兴趣对比 | 多兴趣在长尾物品上提升显著 |
| 竞赛价值 | Top-K推荐赛题中的关键上分点 |
六、向量检索
| 方法 | 原理 | 适用场景 |
|---|---|---|
| 暴力搜索 | 遍历所有向量计算距离 | 向量数少(<10万) |
| FAISS-IVF | 聚类后只搜索最近簇 | 通用场景 |
| FAISS-HNSW | 层次导航小世界图 | 高召回率需求 |
| Annoy | 随机投影树 | Spotify开源,适合中等规模 |
七、竞赛实战要点
| 要点 | 说明 |
|---|---|
| 多路召回 | ItemCF + UserCF + DeepWalk + 双塔DNN,多路合并 |
| 召回数量 | 每路召回100~500,合并后1000~3000送入排序 |
| 负采样 | 随机负采样 + 热门物品负采样(热门物品做负样本增加难度) |
| 特征工程 | 用户画像、物品属性、交叉统计特征 |
| 冷启动 | 新用户/新物品用内容特征做召回,不依赖交互历史 |
八、序列感知召回
SASRec(Self-Attentive Sequential Recommendation)
| 维度 | 说明 |
|---|---|
| 核心思想 | 用Self-Attention建模用户行为序列,捕捉长距离依赖 |
| 与RNN区别 | 并行计算,不受梯度消失影响,可捕捉长距离依赖 |
| 位置编码 | 可学习的位置嵌入,保留行为顺序信息 |
| 训练 | BERT式双向或GPT式单向,推荐通常用单向(只看历史) |
| 推理 | 用户序列编码为向量,与物品向量内积检索 |
| 竞赛价值 | 序列推荐赛题中的强baseline |
NextItNet
| 维度 | 说明 |
|---|---|
| 核心思想 | 用空洞卷积(Dilated CNN)建模用户行为序列 |
| 空洞卷积 | 感受野指数级增长,少量层即可覆盖长序列 |
| 优势 | 比SASRec训练更快(CNN并行),推理更快 |
| 适用场景 | 对推理速度有要求的序列推荐 |
九、图神经网络召回
LightGCN
| 维度 | 说明 |
|---|---|
| 核心思想 | 在用户-物品二部图上做图卷积,学习用户和物品的Embedding |
| 简化 | 去掉GCN中的特征变换和非线性激活,只保留邻域聚合 |
| 优势 | 比NGCF更简单但效果更好,参数更少 |
| 层数 | 通常3~4层,过多过平滑 |
| 竞赛应用 | 推荐系统召回的强baseline |
GNN召回 vs 传统召回
| 维度 | ItemCF/UserCF | DeepWalk | LightGCN |
|---|---|---|---|
| 图结构利用 | 一阶邻居 | 随机游走 | 多阶邻居聚合 |
| 特征融合 | 无 | 无 | 可融合side info |
| 冷启动 | 差 | 差 | 较好(有特征时) |
| 训练成本 | 无需训练 | 低 | 中 |
| 召回质量 | 中 | 中 | 高 |
十、召回竞赛实战策略
| 策略 | 说明 |
|---|---|
| 多路召回 | ItemCF + UserCF + DeepWalk + 双塔DNN + LightGCN,每路召回100~500 |
| 召回数量 | 合并后1000~3000送入排序,过多增加排序负担 |
| 负采样策略 | 随机负采样 + 热门物品负采样(热门物品做负样本增加难度) |
| 冷启动处理 | 新用户用内容特征做召回,新物品用物品属性做召回 |
| 序列召回 | SASRec/NextItNet对有行为历史的用户效果更好 |
| 图召回 | LightGCN适合交互数据丰富的场景 |