这道题问的是推荐不精准怎么从算法层面改进,我觉得本质是在问:你怎么从数据、表征、模型结构这几个环节,把用户真实意图从噪音里尽可能干净地抽出来。我按落地时最常碰到的几个方向展开说。
先说负样本构造。推荐里有个天然偏差:曝光才有点击,但没曝光的不一定是用户不喜欢的。如果只用曝光点击当正样本,未曝光当负样本,模型学到的其实是「曝光偏好」而不是「真实偏好」。我常用的一个思路是 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检验。
所以我觉得,推荐不精准的改进不是堆模型,而是先诊断数据偏差,再选合适手段,最后在线上验证时小心统计陷阱。