现在主流的推荐链路可以划分为“召回–>粗排–>精排–>重排”四个阶段,也可以简化成“召回–>排序”两个阶段。
模型从0–>1的演进和1–>n的阶段不同,面临的问题也不同,这里主要关注1–>n的提升,分为突破瓶颈期和bad case解决两个部分。
突破瓶颈期
突破瓶颈期最核心的因素是识别什么是模型瓶颈,然后去定向优化解决。所以这里线介绍几个识别瓶颈的方法:
识别瓶颈
各个维度审视现在模型整体结构潜在的问题或者不足,明确哪些问题可以在现有模型下解决?哪些问题需要调整模型解决?
其中最有效的手段就是 case 查询。
查case
对于提升业务来说,查预测的case进行分析,将错误的case分门别类,针对没勒问题分析提出解决方案, 比单纯优化算法不断使用复杂算法来的有用的多。
解决瓶颈
针对原有模型的优化
-
看相关论文,技术方案 查看原始论文、技术博客等应用该模型的人的优化方案,尤其是工业界应用的优化方案。 对论文中模型的应用,特别是纯学术界的方案,更应该主要注重借鉴思路,给现有模型做加法,因为实际业务数据庞大,并且问题场景复杂,直接照搬带来的变化过大,效果变化时很难具体定位原因。 -
每次尝试之后总结业务特点 针对有效的尝试,思考效果是否发挥到了极致; 对于无效的优化,思考为什么没有效果。 -
快速迭代 通常可以任务一个人的业务贡献正比于探索过的idea的数目。
调整模型的优化
根据“没有免费的午餐理论”没有一个模型适合所有的场景,所以当真正的应用的时候,发现模型效果不如预期的时候,可能是模型不适用的原因。
BAD CASE解决
思考权重能否快速调整,召回策略能否快速调整,只有系统级别支持细粒度的权重调整策略,灵活的召回侧裂,才能够保证策略的快速迭代。
具体bad case 分析
确认bad case的细节,什么情景下推送了什么case,现象的普遍程度,bad case之前是否有异常行为。 具体实践步骤: (1)确认用户id,bad case推送的物品id等; (2)查看实际线网日志,确认拿到的特征数据是否正常; (3)本地运行推荐结果,打印每个推荐环节的结果:召回的坏比率,精排的坏比率;-- 查看是否一致 (4)精细化debug:
- 确认线上服务是否挂掉,特征推送是否正常。
- 召回问题:确认多路merge策略,如果是某一个主要召回的问题,确认召回逻辑,判断是否特征缺失,架构出现问题,还是模型问题。
- 粗排问题:粗排一般是双塔模型,打印和bad case TopN相似的物品,如果有偏,需要处理样本,重新训练。
- 精排问题:打印模型权重,查看梯度回传是否消失;
(5)确认其他干扰因素:如相关策略是否耦合测试,
|