在线学习在爱奇艺信息流推荐业务中的探索与实践

▌概述

爱奇艺的信息流推荐业务每天会产生数十亿规模的feed浏览,如此大规模的数据给模型训练带来了很大的挑战。同时,信息流这类用户与推荐系统的强交互场景也引入了很多有趣的研究课题。对于信息流推荐产品来说,用户和产品交互性高,用户兴趣变化也很快。若模型不能及时更新,排序模型部署上线后,性能会缓慢下降。而对于排序模型来说,如何用较低成本完成百亿样本、千亿参数DNN排序模型的及时更新是需要解决的首要问题。

引入在线学习是解决此类问题的首选方式。在线学习(Online Learning)能捕捉用户的动态行为模式,实现模型的快速自适应,它对数据pipeline的稳定性、流式样本的分布纠偏、模型训练的稳定性以及模型部署的性能都提出了很高的要求,成为提升推荐系统性能的利器。在线学习为爱奇艺多个信息流推荐场景都带来了明显的效果增益,对新内容的分发也起到了明显正向的作用,验证了“唯快不破”的真理。

本文就来介绍一下爱奇艺技术团队我们的相关成功实践。基于学术界和工业界的经验,探索出一套比较适合工业化实践的W&D深度排序模型的在线学习范式,实现了消费流式数据、DNN模型的实时训练和及时更新。

在短视频信息流推荐和图文信息流推荐方面,完成了AB实验和全流量上线,推荐效果和用户体验较之前的离线模型都获得了较大的提升,短视频信息推荐消费指标+1.5%,图文信息流推荐消费指标+3.8%。此外,数据证明在线学习的上线对于新内容的分发有比较明显的助益,也能在新内容上线当天进行快速试探,判别内容的优劣。以图文信息流推荐为例,新Feed的平均分发量增益在10%以上,而且这些feed的点击率也有明显提升。

▌信息流推荐排序模型目前的挑战

目前,业界主流的信息流个性化推荐的排序模型目前基本都已转向DNN模型,如W&D、DeepFM等,相比以往以GBDT/LR/FM为典型模型的浅层模型来说, 产生了下面几个新的问题:

1. 模型更重

模型的宽度和深度,决定了模型参数空间的规则。DNN模型是多层感知模型。亿级别的ID特征(UserID、ItemId、用户行为序列等)和Dense特征(统计特征、Session特征、多模态Embedding特征)输入,经过一个1024个激活Cell的Hidden Layer, 模型参数可以很容易达到千亿级别。

2. 训练成本更高

有更多的训练数据,迭代次数更多,DNN模型才能收敛到最佳状态。从样本准备到整个模型训练完成,周期更长,模型更新效率不高。而且训练需要的硬件资源更多,目前基本是GPU训练平台为主,即使换成CPU,还是需要数十倍的CPU资源才能匹配GPU训练的效率。

3. 训练收敛性问题

训练一个百亿样本,千亿参数的DNN模型要想要达到理想的效果,会遇到很多超参数调优问题,如batch size,、学习率、正则系数、优化器的选择等。这些参数组合的变化都可能会影响模型的最佳潜能。

从上面可以看出,要完成一个DNN模型的实时更新并非易事。而在传统机器学习时代,只需要给模型最新的数据,通过在线学习算法(如FTRL)做到模型的实时更新,实现了浅层模型的实时更新[3,4,6]。在线学习需要的数据,训练资源都明显低于离线训练场景。

▌DNN模型的在线学习挑战

DNN模型的在线学习不能直接硬搬LR+FTRL,主要的挑战如下几方面:

1. 解决OOV问

目前已有的DNN模型基本都加入了ID特征来加强模型的记忆性。如何将新的ID快速加入模型的词典,并通过在线学习更新其权重以及如何快速淘汰老的ID,避免在long running场景下,模型词典文件不会快速膨胀而不够用,是一个较大的挑战。

2. 非凸模型的在线梯度下降的收敛问题

目前还不能确定Adam家族是否还能应对DNN模型的在线学习场景,过一遍数据是否能收敛。

3. 正样本delay 实时数据分布不是真实分布时需要纠偏

广告的场景如CPA类广告,转化类正样本delay现象比较明显。在爱奇艺短视频推荐场景下,视频的label逻辑不只与点击相关,还要关联到时长。用户在观看一个视频结束后,才会上报时长日志。若点击没有关联到时长,是不能作为正样本的,需要等待时长日志到来。

▌DNN模型的在线学习业界的解决方案

DNN模型的在线学习其实已经在业界很多公司落地,阿里 XPS平台上通过在线学习训练和更新的小时级XNN深度模型,在2017年的双11期间应用在淘宝猜你喜欢和天猫推荐场景[7]。阿里蚂蚁金服团队也在2018年基于类似底层平台上线了在线学习深度模型。[1]

以阿里XPS为例,基于C++实现了动态扩缩容的embedding lookup算子,底层是基于C++实现的XPS-ArrayHashMap,支持ID特征的增删, 自适应的解决了OOV问题。其针对DNN模型,提出了XNN深度学习算法,自适应于streaming data的深度模型训练。

▌现有的模型结构及训练范式介绍

参考已有的业界的实践,我们基于公司的深度模型训练平台,实现了在线学习在短视频信息流和图文信息流推荐的成功落地,下面介绍关于爱奇艺的实践方案:

1.主模型结构

这是一个W&D模型变种,但是Wide侧和Deep侧是各自经过一个FM后再进行结果融合:

  • Deep的输入包括Embedding特征和Dense特征, Wide侧包括GBDT叶子节点,ID类的Sparse 特征, Embedding特征和Dense特征;

  • GBDT的输入主要是以统计特征为代表的Dense特征, 是一种基于模型的显示特征组合;

  • DNN的优化器是Adam, Wide侧优化器是FTRL;

  • 基于公司内部的深度学习平台训练离线模型。

2.现有的模型迁移到在线学习的局限

  • DNN部分迁移到在线学习,可能不像wide侧线性模型那么容易收敛。对于DNN深度模型的在线学习优化,目前还没有成熟的优化器,FTRL更适合线性简单模型;

  • GBDT不适合增量/在线学习;

  • 在线学习训练持续running的情况下,Wide侧的输入ID特征,在线学习训练持续running的情况下, oov几率会显著提升。

▌训练范式

1.在线学习+离线模型热启动的范式

爱奇艺技术团队通过实践探索,形成了一个比较成熟的在线学习框架——在线学习+离线模型热启动的范式。这里来先介绍下框架:

  • 左侧是在线学习,右侧是离线学习:离线训练仍然保留,它基于7天历史数据训练,主要是用于在线学习模型每天的热启动重启。在线学习消费Kafka实时数据流,实时训练模型;

  •  数据实时化:在线学习的数据流从用户行为数据到模型训练样本的生产都是在线进行的,实现了样本、特征和时长数据的在线Join, 数据流都通过Kafka 向后传递;

  • 模型训练实时化:在线训练任务消费训练数据的Kafka Topic,且只消费一次(one pass)。模型除了每天基于最新离线模型热启动重启一次,当天都是long running的;

  • 模型同步:模型按小时例行化导出模型文件同步给引擎,这里的同步效率可以自行调节。

以图文信息流推荐为例,在线学习引入前后的整体数据流图如下:

2.数据实时化难点

  •  多路实时数据的在线Join,包括用户行为数据, 特征等。

  • 样本归因。因为行为上报的天然串行化,会导致Label的滞后性:用户展示行为<< 用户点击行为<< 用户播放日志。同一个用户在同一个feed上产生的展示数据和点击数据先后到达时,需要确定如何归因样本label和更新模型。

样本归因实践

一个视频item上的负样本一般会先到达,后续同样视频上的正样本到达,对于这两个样本在流式到达时如何处理并更新模型,目前有两种范式:

  1. Facebook的做法[34]:负样本会先cache, 等待潜在的正样本到达,若后续正样本到达,则只保留正样本,更新模型一次。

  2. Twitter的做法[3]:两条样本都会保留,都会去更新模型,这样实时性最高。

我们对两种方法都进行了尝试,结论是后者更适合现有的工程架构,通过loss修正效果上并不弱于前者。

2.实践逻辑及困难解决

负样本Cache策略:最终确定的Cache窗口为10分钟,基于impression和vv的时间差分布统计,10分钟的窗口内有点击的impression和vv的join成功率达90%+。

基于Cache 窗口的Join逻辑示意图如下

假定时间窗口大小t1是20min,cache保留窗口t1’是10min:

第一个时间窗口,我们结合t1和t1'来统计信息,即label的归因;

第二个时间窗口,我们结合t1',t2和t2'来统计label。

没有cache, 每条最新样本都去更新模型,这样会存在False Negative或者说无法确定Label的样本也更新了模型这样的问题。Twitter 2019最新的一篇论文[6]提出了如何在进行纠正,主要包括以下四种方法:

  • 样本重要性采样(importance sampling):机器学习模型一般是假设样本符合一个特定数据分布,模型训练就是一个搜索最佳的数据分布参数的过程。观察到实时样本流样本分布由于包含了FN样本,其实是一个有偏的分布。类似于强化学习等场景,会使用到重要性采样方法对给予每个观察到的样本权重进行纠正,近似一个无偏数据分布。

  •  FN矫正:模型拟合当前观察到的有偏分布b, 经过论文推导,无偏预测p(y|x) 和有偏预测b(y|x)的关系如下。因此用包含FN的实时样本训练模型b后,预测时用下面的公式进行矫正即可。

  • PU loss (Positive-unlabeled loss): 本质就是认为所有观察到的负样本都是unlabeled. 因此对loss进行了如下改造,核心思想就是在观察到一个实例的正样本到达时,除了使用正样本进行梯度下降,还会对相应的负样本进行一个反向的梯度下降,抵消之前观察到的FN样本对loss的影响。

  • 延迟反馈Loss: 使用一个额外的模型去建模当前样本的真实Label确定时的时间延迟,基于当前样本距离上次展示的时间距离去评估当前样本的Label,是一个true label的概率。这个时间延迟模型和pCTR模型联合训练,优化loss如下,其中Wd就是时间延迟模型的参数。

我们尝试了上面的第二种和第三种方法,目前线上使用的版本是第三种方法,论文实验中效果最好的是第二种方法,这个可能和业务数据分布不一致有关。

模型实时化

在线学习场景下模型结构虽然和基线一致,但训练方式和离线训练存在一些不同:

1. GBDT不适合在线学习

我们固定了GBDT部分,实验期间GBDT不再更新,用作特征抽取器。所以这里需要定期更新,目前我们是按月更新,通过AB实验看,更新是有一定收益的,所以这也促使我们正在实验DNN的高阶特征交叉方式来替换掉GBDT。

2. 模型会基于离线模型进行热启动重启

因为GBDT固定,因此模型的热启动可以做到直接加载最新离线模型的checkpoint,然后开始进行在线学习,持续更新模型参数。

a) 热启动的原因1: 在线学习是one pass的,如果持续long running,模型可能会因为一些局部pattern而被带偏,基于离线模型热启动可以对其进行矫正。

b) 热启动的原因2: 如果模型训练是long running的,会导致OOV概率越来越大。实验期间深度学习训练平台还不能做到自适应的动态ID增删[1],因此需要显示的手动重启,扩大ID空间。训练平台最新的版本已经支持了动态增加,后续会进行long running实验。

3. 数据源不同。训练采用和离线一样的训练框架,但是数据源是Kafka, 每条训练数据只进行一次梯度下降。

效果调优经验分享

  •  典型的在线学习对于训练数据的消费是One Pass的,而离线模型的训练是multi-pass。从优化角度讲,深度模型的在线学习是要解决在线非凸优化问题。FTRL本身是一个适合在线学习的优化器。离线模型的wide侧实际上已经是FTRL, 只有DNN部分是Adam。我们尝试过把DNN部分的优化器也变为FTRL,但效果是负向的,FTRL比较适合稀疏线性模型的在线学习;

  •  按小时例行的更新模型 vs 当模型性能超过基线时才更新模型:前者对于点击率的指标更有利,该策略下uctr正向明显。持续更新模型,能推出用户最近感兴趣的内容,点击率容易高;

  • 模型长期不热启动重置,效果是呈现下降的趋势;

  • 在线训练消费样本的轮数,我们做了下实验对比,过多遍会更好一些,这可能要结合实际业务数据进行优化。

实践效果

实践证明,在线学习对于推荐效果和用户体验都有比较明显的提升,爱奇艺短视频信息流推荐消费指标提升1.5%, 图文推荐信息流消费指标相对提升3.8%。

下图给出了短视频信息流产品推荐当天累积测试集的离线模型和在线学习每个小时推出的在线模型的auc/wauc对比,在线学习在当天测试集上表现优于离线模型。

1.累积测试集每个小时实时样本流不放回抽样1.5% 加入累积测试集。T-1小时的模型预测T+1 hour的数据,在线学习AUC是基于每个小时测试集的累积预测结果计算。

2.离线模型:基于历史7天数据训练的离线模型,同时用于当天在线学习的热启动。

在图文信息流推荐产品上,我们论证了实时特征+在线学习的组合更能发挥出实时特征的最大化效果。下图是三个实验的多天在线AUC走势,可见实时特征+在线学习的AUC明显高于基线,优于实时特征+离线训练的组合。

后续优化

  1. 作为特征交叉组合的GBDT组件不太适合在线学习,后续切换模型为端到端的深度模型,去掉对GBDT的依赖。

  2. 探索更适合在线学习范式的深度模型和优化器,如[2]中的方法,在线学习的过程中自适应调整模型的深度,模型结构由浅向深的进行进化,避免模型过深带来的收敛慢和模型过浅带来的欠拟合。

  3.  尝试对实时数据流中的ID进行频次过滤,高维数据中大部分特征都是稀疏的,有必要进行低频过滤,离线有做这方面的内容,但在线学习还没有进行实践,如[1, 5]中的方法: 柏松分布或Bloom Filter。

  4. 探索更高频率的更新模型,如半小时、分钟级。

参考文献:

1. 蚂蚁金服核心技术:百亿特征实时推荐算法揭秘. https://zhuanlan.zhihu.com/p/53530167

2. Doyen Sahoo, Quang Pham, Jing Lu, Steven C. H. Hoi.2018. Online Deep Learning: Learning Deep Neural Networks on the Fly. In Proceedings of the Twenty-Seventh International Joint Conference on Artificial Intelligence. Pages 2660-2666.

3. Cheng Li, Yue Lu, Qiaozhu Mei, Dong Wang, and Sandeep Pandey. 2015. Click-through Prediction for Advertising in Twitter Timeline. In Proceedings of the 21th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (KDD '15). ACM, New York, NY, USA, 1959-1968.

4. Xinran He, Junfeng Pan, Ou Jin, Tianbing Xu, Bo Liu, Tao Xu, Yanxin Shi, Antoine Atallah, Ralf Herbrich, Stuart Bowers, and Joaquin Quiñonero Candela. 2014. Practical Lessons from Predicting Clicks on Ads at Facebook. In Proceedings of the Eighth International Workshop on Data Mining for Online Advertising (ADKDD'14). ACM, New York, NY, USA, , Article 5 , 9 pages.

5. H. Brendan McMahan, Gary Holt, D. Sculley, Michael Young, Dietmar Ebner, Julian Grady, Lan Nie, Todd Phillips, Eugene Davydov, Daniel Golovin, Sharat Chikkerur, Dan Liu, Martin Wattenberg, Arnar Mar Hrafnkelsson, Tom Boulos, and Jeremy Kubica. 2013. Ad click prediction: a view from the trenches. In Proceedings of the 19th ACM SIGKDD international conference on Knowledge discovery and data mining (KDD '13), Rayid Ghani, Ted E. Senator, Paul Bradley, Rajesh Parekh, and Jingrui He (Eds.). ACM, New York, NY, USA, 1222-1230.

6. Sofia Ira Ktena, Alykhan Tejani, Lucas Theis, Pranay Kumar Myana, Deepak Dilipkumar, Ferenc Huszár, Steven Yoo, and Wenzhe Shi. 2019. Addressing delayed feedback for continuous training with neural networks in CTR prediction. In Proceedings of the 13th ACM Conference on Recommender Systems (RecSys '19). ACM, New York, NY, USA, 187-195.

7.  双12根本不在话下,阿里首次揭秘扛过双11的千亿级特征分布式机器学习平台XPS. https://mp.weixin.qq.com/s/TFTf1-x4s35iebiOEMXURQ

end

也许你还想看

为什么下一条小视频还是很有趣

 扫一扫 

下方二维码,更多精彩内容陪伴你