Code前端首页关于Code前端联系我们

马蜂窝推荐排序算法模型如何实现快速迭代

terry 2年前 (2023-09-27) 阅读数 63 #数据结构与算法

Part.1 马蜂窝推荐系统架构

马蜂窝推荐系统主要由召回(match)、排序(rank)和重排序(Rerank)组成。整体架构图如下: 马蜂窝推荐排序算法模型是如何实现快速迭代

在召回阶段,系统从海量内容库中筛选出符合用户偏好的候选集(百级、千级);在排序阶段,在此基础上,根据具体的优化目标(如点击率)对候选内容进行更精准的计算和选择,精准筛选出每一条内容,然后筛选出少量的优质内容从候选内容中数百或数千条内容中选择用户最感兴趣的内容。

本文我们将重点介绍马蜂窝推荐系统的核心之一——排名算法平台,及其整体架构;为用户呈现更精准的推荐结果,为支持模型快速高效迭代的过程中,排名算法平台及其经验在实践中发挥什么作用?

第二部分排序算法平台演进

2.1整体架构

目前马蜂窝排序算法在线模型排序平台主要由、通用模型生产模块、监控模型生产模块和替换模型组成分析模块由三部分组成。各模块结构及平台整体工作流程如下图所示: 马蜂窝推荐排序算法模型是如何实现快速迭代

2.1.1 模块功能

(1)通用数据处理模块

核心功能是特征构建和训练样本构建也是整个排序算法的基础和关键部分。数据来源包括点击流量日志、用户画像、内容画像等,底层数据处理依赖于Spark离线批处理和Flink实时流处理。

(2)可互换模型生产模块

主要负责训练集的构建、模型训练、在线配置的生成,实现模型的无缝同步上线。

(3)监控分析模块

主要包括上游依赖数据监控、推荐池监控、特征监控分析、模型可视化分析等功能。

各个模块的功能以及它们之间的交互都通过JSON配置文件集成,通过更改配置即可在线完成模型训练,大大提高了开发效率,为排序算法的快速迭代提供了坚实的基础。基础。?集配置和模型配置:

  • 训练集配置包括指定使用哪些特征进行训练;指定用于训练数据的时间段;场景、页面、通道等规范上下文函数、用户函数、元素函数和交叉函数的选择。

    这里我们还配置了交叉特征的计算方式。比如有一些向量特征和用户特征,还有一些向量特征和内容特征。如果我们想使用两个向量的余弦相似度或者欧氏距离作为模型的交叉特征,这个交叉特征的选择和计算方法可以直接通过配置实现,并且可以在线使用同步在线配置。 。

    (3) OnlineConfig

    是指在训练数据构建过程中自动生成供在线使用的在线配置,包括特征配置(上下文特征、用户特征、内容特征、交叉特征)、模型路径、特征版本。

    (4) CtrConfig

    指默认的CTR配置,用于平滑用户和内容的CTR特征。

    2.1.3 特征工程

    从应用角度来看,特征主要包括三类,用户特征(user feature)、内容特征(item feature)和上下文特征(context feature)。

    如果按照获取方式可以分为:

    • 统计功能:包括用户、内容、特定时间段内的点击/曝光/CTR等。
    • 向量特征(嵌入特征):基于标签、目的地等信息,利用用户点击行为历史,使用向量特征,通过Word2Vec等进行训练;
    • 交叉特征:基于标签或目标向量,构建用户向量或物品向量,从而获得用户与物品之间的相似度特征

    2.2 排序算法平台V1

    排序算法平台V1阶段JSON文件配置,该平台可以实现特征选择、训练集选择和场景特定的XGBoost模型训练、XGBoost模型离线AUC评估、在线配置文件生成和在线自动同步等。优化提供了更加科学、准确的依据。 马蜂窝推荐排序算法模型是如何实现快速迭代

    2.3.1 数据验证(DataVerification)

    在算法平台V1阶段,如果模型离线效果(AUC)效果很好,但在线效果没有达到预期,我们很难解决定位问题并影响模型迭代。

    通过问题的排查和分析,我们发现线上效果没有达到预期的一个很重要的原因可能是当前模型的训练集是基于数据存储的每一个点击负载表年已编译。天。由于数据上报延迟等原因,本次离线点击曝光表中的部分上下文特征与实时点击曝光行为之间可能存在误差,导致线下和线上特征存在一定的不一致。

    针对这种情况,我们添加了数据验证的功能,对离线构建的训练集和在线打印的实时特征日志进行不同维度的对比分析。

    具体方法是根据线上实时点击曝光日志(包括使用的模型、特征以及模型预测得分信息),为每条实时点击曝光记录添加唯一的ID,并对线下的点击进行聚合。唯一的 ID 也保存在曝光表中。这样,对于一条点击负载记录,我们可以将离线构建的训练集中的特征与线上实际使用的特征关联起来,比较线上和线下模型的AUC、线上和线下模型的预测分数,以及函数的函数。对比一下情况,发现一些问题。

    比如之前的模型迭代过程中,模型的离线AUC很高,但是在线效果并不理想。通过数据验证,我们首先对比了线上和线下模型的AUC,发现效果不一致。然后我们比较在线和离线模型的预测分数,找到在线和离线预测分数差异最大的TopK样本。对其线下特征和线上特征进行对比分析。最后发现数据上报延迟导致部分线上线下上下文特征不一致,以及构建线上XGBoost和DMatrix时选择的Value参数缺失问题,导致线上线下的预测分数出现偏差楷模。修复上述问题后,在线UV点击率提升16.79%,PV点击率提升19.10%。

    通过数据验证功能和解决策略,我们快速定位问题原因,加速算法模型的迭代开发进程,提升在线应用效果。

    2.3.2 模型解释(ModelExplain)

    模型解释可以打开机器学习模型的黑匣子,增加我们对模型决策的信心,帮助理解模型决策,为改进模型提供灵感。关于模型解释的一些概念,我推荐两篇文章供大家理解:《Why Should I Trust You Explaining the Predictions of Any Classifier》、《A Unified Approach to Interpreting Model Predictions》。

    在当前的开发中,我们总是在欺骗模型的准确性和模型的可解释性。简单模型可解释性好,但准确率低;复杂模型提高了模型的准确性,同时牺牲了模型的可解释性。用简单模型解释复杂模型是当前模型解释的核心方法之一。

    目前我们的在线模型排名使用的是XGBoost模型。然而,在XGBoost模型中,传统的基于特征重要性的模型解释方法只能给出每个特征的一般重要性度量,不支持模型的局部输出解释,也不支持单样本模型输出解释。 。在这种背景下,我们的模型解释模块使用了新的模型解释方法Shap和Lime,它不仅支持特征的重要性,还支持模型的局部解释,这使得我们能够了解某个特征的重要性单个样本。 。特定值可以在多大程度上对模型的输出产生积极或消极的影响。

    下面通过一个真实场景的简化例子来介绍模型解释的核心功能。首先介绍一下不同函数的含义: 马蜂窝推荐排序算法模型是如何实现快速迭代马蜂窝推荐排序算法模型是如何实现快速迭代

    我们的模型语句对单个样本给出如下分析:

    • U0-I1
    马蜂窝推荐排序算法模型是如何实现快速迭代

    • 马蜂窝推荐排序算法模型是如何实现快速迭代
    • U_0-I3
      马蜂窝推荐排序算法模型是如何实现快速迭代

    如图,该模型适用于单个样本U0❿❿ U0- _I3_ 预测值为 0.094930 , 0.073473, 0.066176。对于单个样本的预测,从图中特征条纹的长度就可以看出各个特征值的正负作用。红色代表正面影响,蓝色代表负面影响。该值由下表中的 shap_value 值决定: 马蜂窝推荐排序算法模型是如何实现快速迭代马蜂窝推荐排序算法模型是如何实现快速迭代

    其中,logit_output_value = 1.0 / (1 + np.exp(-margin_output_value)), logit_base_value = 1.0 / (1 + _egin_value_value) )) ,output_value是XGBoost模型的输出值; base_value是模型的预期输出;约等于整个训练集中模型预测值的均值; shap_value 是衡量该特征对预测结果的正面和负面影响的指标。

    模型预测值logit_output_value,0.094930>0.073473>0.066176,所以排序结果为I1>I>❿ I3,U0 - 预测值I1为0.094930,特征doubleFlow_article_ctr_7_v1=_I1_ctr有0.062029的正向作用,使得预测值在基值的基础上有所提高。同理,ui_cosine_70=0.894006 的正效应为 0.188769。

    直观上我们可以看到,内容的7天点击率以及用户与内容相似度越高,模型预测值就越高,这也符合预期。在实际场景中我们还会有更多的功能。

    Shap模型语句的核心功能是支持局部单样本分析。当然,它也支持全局分析,例如特征重要性、特征正负效应、特征交互等。下图是对特征doubleFlow_article_ctr_7_v1的分析。可以看出,内容的7天点击率小于阈值,对模型的预测有负向影响,大于阈值,对模型的预测有正向影响。 马蜂窝推荐排序算法模型是如何实现快速迭代

    第三部分短期计划

    近期,排名算法平台将持续提升训练模型的线上应用效果,并注重实时性特征,以反映线上的快速变化。

    目前排名算法平台使用的XGBoost模型的优点是不需要太多的特征工程,包括特征缺失值处理、连续特征离散化、交叉特征构建等,但也存在很多缺点,包括:

    1. 难以处理高纬度的迹线特征
    2. 需要将完整的数据集加载到内存中进行模型训练,不支持在线学习算法,难以实现实时模型的更新。

    为了解决这些问题,我们未来会构建Wide&Deep、DeepFM等深度模型,如下图所示: 马蜂窝推荐排序算法模型是如何实现快速迭代

    另外,目前的模型每次都是预测单个项目的得分,然后排序并采取刷子。结果,(学习排名,准时)。未来我们希望能够一次一个地向用户推荐结果(学习排名,好玩),给用户带来更加实时、准确的推荐结果。 ? 版权所有权利归作者所有。如需商业转载,请联系求作者授权。非商业转载请来源。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门