跳到正文

推荐不准的算法改进

从模型、负样本和 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. 问法 1 · 场景切入

    假设你现在做一个电商首页推荐,用户来了几次都不点,你觉得推荐不精准。从算法层面,你会先动哪个环节?比如负样本怎么构造、Embedding怎么优化,说说你的思路。

  2. 问法 2 · 层层追问

    推荐不精准一般怎么排查?……那从算法上你能想到哪些改进点?……比如负样本,除了随机采样还有别的招吗?……模型结构上呢,序列模型或者多兴趣模型有没有搞头?

  3. 问法 3 · 直球架构

    推荐系统不精准,从算法层面改进,你列举具体的方案和机制。包括但不限于模型结构、负样本构造、Embedding质量、损失函数这些,每个方向说一个典型方法并解释为什么有效。

同模块相关题目