专栏名称: 京东零售技术
京东零售那些事,有品、有调又有料的研发资讯,带你深入了解程序猿的生活和工作。
目录
相关文章推荐
码农翻身  ·  对阿里离职员工万字长文,我的一点儿想法 ·  16 小时前  
稀土掘金技术社区  ·  我又写出了被 Three.js ... ·  3 天前  
程序员的那些事  ·  被微软裁员后,3 人自杀! ·  4 天前  
京东零售技术  ·  京东零售基于Flink的推荐系统智能数据体系 ... ·  3 天前  
51好读  ›  专栏  ›  京东零售技术

京东零售基于Flink的推荐系统智能数据体系 |Flink Forward Asia 峰会实录分享

京东零售技术  · 公众号  · 程序员  · 2025-06-10 18:31

正文

请到「今天看啥」查看全文


接下来,我们探讨样本的整体开发架构,其主要分为流式与批式两种方式。
在流式样本开发方面,主要操作是将曝光、点击等用户行为数据中的关键信息与特征数据进行关联( Join ),关联后的数据向后发送,从而形成流式样本。这些流式样本会按小时级或分钟级进行落盘存储,如此便生成了增量样本,增量样本可用于模型的增量训练。
而批式样本的生成,是将用户行为表与特征表进行拼接,拼接后即形成批式样本。由于批式样本通常涵盖较长时间跨度的数据,因此这类样本又被称为离线样本。在训练模型(例如精排模型)时,仅使用几天或一周的数据往往是不够的,通常需要一个月、两个月甚至几年的数据。
在进行流式或增量训练时,会基于这个离线样本训练出初始模型(Model),然后再依据增量数据做进一步拟合(Fit)。在实时训练过程中,则会基于增量模型,继续对实时样本进行拟合。

3.2 样本特定场景

我们来分析在样本构建过程中所涉及的各类场景,对于离线样本,通常会面临样本冷启动以及样本特征回溯的问题;而针对实时样本,可能遭遇的问题包括延时反馈以及样本采样方法的选择。

3.3 离线样本架构

这里我们主要介绍下离线样本拼接,接下来我们看样本的离线架构,它与前文提及的架构大致相似,主要操作是将用户行为的离线label表与离线特征表进行批式拼接,进而生成天级样本表,随着日复一日的积累,这些天级样本表会形成月级样本,以此便可开展全量训练。然而,在此过程中会出现一些问题。例如,在全新的业务场景下,可能初始并无可用样本,此时就需要将诸如订单、点击等标签( Label )的计算工作全部重新计算;此外,完成这部分操作后,还可能涉及生成特征(Feature )宽表,这同样是基于全量数据且以月级为周期的特征处理,在进行这些数据计算和关联( Join )操作时,对算力的要求极高。
关于特征回溯,其操作与上述过程类似,即把 FN + 1 的新表与已有样本进行关联( Join )。但此过程涉及特征计算,需要完整计算新表近一个月或几个月的特征数据,并且还需与之前的样本表进行行对齐。需要补充说明的是,在进行样本表关联( Join )时,必须借助唯一标识组件 ID,如 Request ID 来实现对齐,如此关联后的样本表才能作为特征回溯的样本表。

3.4 实时样本架构-分阶段窗口

接下来分析实时样本架构,它基于分阶段的窗口机制实现。首先,从 Kafka 接收用户行为的关键数据,经数据解析后,与同样经过解析(如 PB 解析)的特征数据进行拼接,在曝光与特征拼接环节,尽管这一过程实际速度很快,但为确保拼接的成功率,我们设置了五分钟的时间窗口,也就是说,只有当特征成功拼接到曝光数据后,数据才会继续向后传递,此时间窗口为五分钟;随后是曝光与点击的拼接环节,该环节时间窗口可设置为十分钟,即曝光发生后,若十分钟内未产生点击行为,相应数据将被视为负样本。再之后是曝光点击样本与加购和下单行为的拼接,此环节时间窗口设定为二十分钟。需注意的是,五分钟、十分钟和二十分钟这些时间窗口并非固定不变,而是可根据具体业务场景灵活配置。例如,在结算页场景中,用户决策时间相对较短;而在搜索或推荐场景下,用户考虑时间可能较长。
此外,时间窗口还可依据品类和品牌进行针对性配置。以电商场景为例,购买食品时,用户可能十分钟内就会下单,整个链路的时间窗口或许设置为十分钟至二十分钟即可,但购买家电时,用户考虑时间较长,一天可能都不够。当然,针对这种情况,虽可通过离线方式进行数据回补,但我们当前聚焦实时处理,期望通过分阶段窗口机制,尽可能快速地为模型提供样本。
再来看延时反馈问题。延时反馈本质上是为模型提供三个标签,即正标签、负标签以及一个修正标签。当数据到来时,先赋予其负标签,随后进入等待流程,通过判断时间,若发现时间已过特定期限,确定该数据实际应为正标签,但之前发送时可能误判为负标签,此时对这部分数据进行修正,即修正标签,并将其发送至实时样本流中。另外,在离线训练时,我们能够随意对样本数据进行 Shuffle 操作,这样可有效避免因数据不均衡给模型带来的问题。然而,实时场景下由于数据是流式传输,无法进行 Shuffle。因此,我们采用了一种配置策略,即将离线处理得到的部分数据与实时数据按一定Mix策略进行混合,然后发送至实时样本中。

3.5 实时样本架构-OnlineEvaluation

下面我们来看实时样本的 Online Evaluation 模块,该模块主要应用于模型评估场景。实时样本的情况与上页 PPT 结尾部分大致相似,但在此过程中会涉及采样策略。在上页 PPT 结尾,我们提到将数据全部发送至Kafka,而实际操作中,我们会对数据进行95%和5%的采样。其中,95%的数据用于模型训练,5%的数据用于评估(Evaluation)。 在评估环节,又细分为实时评估与离线评估。之所以如此划分,是因为离线评估虽然不够实时,但实时评估在一定程度上无法起到全面指导的作用(实时评估有三种标签)。为综合两者优势,我们将评估工作分为离线和实时两部分,在进行离线评估时,只有当模型的 AUC 达到预先配置的数值,才会将模型推向线上应用;若未达到该数值,模型将立即重新进行训练。而在实时评估过程中,我们会持续监控模型数据,一旦模型准确率下降,系统便会马上发出警报,同时考虑是否需要对模型进行回滚操作。






请到「今天看啥」查看全文