推荐不准的算法改进
从模型、负样本和 Embedding 改进推荐准确性,补充适用边界与工程取舍
原题:当发现推荐系统存在推荐不精准的问题时,可以从哪些算法层面进行改进?例如模型结构、负样本构造、Embedding质量等方面,请列举并说明其作用机制。
向量检索 · OPPO真题
回答与解析
一、负样本构造优化
核心问题:推荐系统天然存在样本选择偏差(SSB),曝光即正样本,未曝光未必是负样本
- Hard Negative Mining:从排序靠后但未点击的样本中挖掘强负例,提升模型区分能力
- 动态负采样:根据训练进度调整采样难度,早期用easy negative稳定训练,后期用hard negative精细优化
- 全局负采样:引入未曝光item作为负样本,缓解"热门item过度打压"问题
二、Embedding质量提升
- 对比学习(SSL):通过Dropout构造正样本对,拉近相似item表征,如S^3-Rec、CL4SRec
- 知识蒸馏:用大模型生成的软标签指导双塔模型,保留细粒度语义关系
- 特征交叉显式化:将ID Embedding与属性Embedding做显式交互(FM/DeepFM),避免纯DNN的隐式交叉不足
三、模型结构改进
| 方向 | 典型方案 | 作用 |
|---|---|---|
| 序列建模 | SASRec、BERT4Rec | 捕捉用户兴趣演化,替代静态用户向量 |
| 图神经网络 | LightGCN、PinSage | 利用高阶连接关系,缓解数据稀疏 |
| 多兴趣建模 | MIND、ComiRec | 单个用户学习多个兴趣向量,解决兴趣漂移 |
| 多塔结构 | 用户塔+物品塔+上下文塔 | 引入实时上下文特征,提升预估精度 |
四、多目标与损失优化
- 多任务学习:MMoE/PLE结构,联合优化点击、转化、停留时长
- 样本加权:对高价值转化样本或长尾item提升权重
- Focal Loss:解决正负样本极度不均衡(如CTR 1%场景)
五、效果验证的统计方法
- 离线:分组t检验比较AUC/Gap,或Bootstrap置信区间
- 线上:随机分流A/B测试,用配对t检验或Mann-Whitney U检验(非正态分布时)判断指标差异显著性
- 注意:需控制第一类错误率,多重比较时用Bonferroni校正
学习建议
掌握假设检验基本原理,熟悉t检验与Mann-Whitney U检验适用场景,结合AB测试实践理解指标显著性判断流程。
口语版讲法(约4分钟)
- 一句话定位:推荐不精准的本质是信号噪音与用户意图捕捉不足
- 负样本构造:从曝光偏差到Hard Negative与动态采样
- Embedding质量:对比学习与知识蒸馏提升表征
- 模型结构改进:序列建模与多兴趣解决漂移
- 落地风险:样本偏差与多目标冲突
这道题问的是推荐不精准怎么从算法层面改进,我觉得本质是在问:你怎么从数据、表征、模型结构这几个环节,把用户真实意图从噪音里尽可能干净地抽出来。我按落地时最常碰到的几个方向展开说。
先说负样本构造。推荐里有个天然偏差:曝光才有点击,但没曝光的不一定是用户不喜欢的。如果只用曝光点击当正样本,未曝光当负样本,模型学到的其实是「曝光偏好」而不是「真实偏好」。我常用的一个思路是 Hard Negative Mining,就是拿那些排在前面但没被点击的样本当强负例,逼模型区分模糊边界。另一个是动态负采样,早期用简单负样本稳定训练,后期切到hard负样本精细调优。还有一个坑是:如果全局负采样做得太猛,热门item会被过度打压,所以得控制采样比例。
再说Embedding质量。我比较看重的两个手段:一个是对比学习,比如用Dropout构造正样本对,拉近相似item的表征,这在长尾场景特别有效。另一个是知识蒸馏,用大模型生成的软标签指导双塔模型,保留细粒度语义关系。举个例子,电商场景里用户搜「男士商务皮鞋」,模型得把「正装鞋」「牛皮鞋」这些相关item的表征拉近,光靠ID Embedding很难做到,对比学习就能帮上忙。
模型结构方面,我觉得最核心的是从静态用户向量转向序列建模。比如用SASRec或BERT4Rec捕捉用户兴趣演化,而不是用一个向量概括所有历史行为。再就是多兴趣建模,像MIND或ComiRec,给每个用户学多个兴趣向量,解决兴趣漂移问题。比如一个用户既喜欢数码又喜欢户外,单向量模型容易两头不靠,多兴趣就能分别建模。
落地的时候有个常见风险:多目标优化容易顾此失彼。比如同时优化点击率和转化率,如果样本加权没做好,模型可能只学点击率,转化率反而不升。我倾向用MMoE或PLE这类结构,给每个目标独立的专家网络,再共享一部分底层,这样能平衡。另外,Focal Loss在处理正负样本极度不均衡时挺好用,比如CTR只有1%的场景。
其实还有一个点值得深挖:在线评估时,如果指标提升不显著,怎么判断是模型真没效果还是实验设计有问题?比如流量切分不均匀、指标非正态分布,这时候用配对t检验可能失效,得换Mann-Whitney U检验。
所以我觉得,推荐不精准的改进不是堆模型,而是先诊断数据偏差,再选合适手段,最后在线上验证时小心统计陷阱。
关键一句:在线评估时指标不显著可能是实验设计问题,而非模型无效
面试官还可能这样问
- 问法 1 · 场景切入
假设你现在做一个电商首页推荐,用户来了几次都不点,你觉得推荐不精准。从算法层面,你会先动哪个环节?比如负样本怎么构造、Embedding怎么优化,说说你的思路。
- 问法 2 · 层层追问
推荐不精准一般怎么排查?……那从算法上你能想到哪些改进点?……比如负样本,除了随机采样还有别的招吗?……模型结构上呢,序列模型或者多兴趣模型有没有搞头?
- 问法 3 · 直球架构
推荐系统不精准,从算法层面改进,你列举具体的方案和机制。包括但不限于模型结构、负样本构造、Embedding质量、损失函数这些,每个方向说一个典型方法并解释为什么有效。