人工智能实时增量学习在云音乐直播推荐系统中的实践网易云音乐技术团队

同时,直播业务是云音乐的衍生品,其推荐不同于音乐推荐,主要表现为用户意图不明确、直播用户行为稀疏、实时性要求高以及存在debias。

本文主要聚焦于直播推荐系统实时化,以场景的算法特色为切入点介绍直播场景的优化目标,从多个角度说明为什么直播需要实时化。同时,本文概述了推荐系统实时性的基本组成和基本解决方案。推荐系统实时性主要由特征实时性、模型实时性和系统实时性组成。具体地,本文也以云音乐直播场景的实时化演进来详细介绍我们是如何去搭建整个直播实时化系统,并解决实时化过程中带来的困难与挑战。最后,本文也给出了在大规模场景下的线上效果和分析。

大多数平台的直播场景,同时开播场次有限,对召回诉求不强,本质是一个对实时直播的精排或者粗排+精排的过程。

相比于传统的个性化推荐每天更新用户的推荐结果,实时推荐基于用户最近几秒的行为实时调整用户的推荐结果。实时推荐系统让用户当下的兴趣立刻反馈到了推荐结果的变化上,可以给用户所见即所得的视觉体验,它牢牢地抓住了用户的兴趣,让用户沉浸在其中。直播推荐系统更是对实时化需求非常高,大致可以从几个角度来介绍,Item推荐角度、数据指标、业务环境。

直播推荐是对实时在线主播的排序,是存量主播的一小部分。从下面这张平台主播开播分布情况图(图4)可以看出,我们平台存量主播有百万量级,而当天开播主播只有万量级,同时每个主播开播的时段不一,有凌晨、早上、下午、晚上,且每个时段开播主播咖位也不同,一般来说晚上开播主播更多,咖位更大。

直播推荐的item就是主播,是活的货物,这不同与歌曲推荐中的歌曲,信息流推荐中的图文或者视频,主播是一个不断变化的item,如下面这张图可以看出用户每次进入直播间看到的直播内容和主播状态都不一样,主播可能在pk、表演、聊天;而歌曲或者视频是一个完全静态的item,且每次推荐展示都是从头开始播放;所以直播推荐的不仅仅是一个item,更是status。

所以不管是从推荐的item、主播数据指标还是大环境,直播推荐都急需要一个实时化的推荐系统。

推荐系统实时化性由特征实时性、模型实时性和系统实时化组成,需要利用特征实时化去实时获取数据分布;模型实时化去实时拟合数据分布;最后基于实时系统去获取最新模型和数据。

抛开系统实时来说,算法同学当然更关心的是特征实时性和模型实时性。具体来说;

推荐系统依赖强大的数据处理能力

这是一个比较常见的特征实时化的实现框架图,主要包括日志系统、离线画像、实时画像,通过storm、flink、kafka完成实时数据的处理和传输,并存储在hbase和redis中,最后落盘到hdfs中。实时样本的处理中间环节是通过快照系统来解决样本的穿越问题和一致性问题。

但特征实时性再强,影响的范围也仅限于当前用户,要想快速抓住系统级别的全局的数据变化和新产生的数据pattern,就必须加强“模型”的实时性。

云音乐直播业务的实时化一直都是分成两条腿在走,一个特征实时,一个是模型实时。我们最初主要是通过不断增加各个维度的实时特征来提升系统的实时化能力,来实时反应主播、用户、上下文在当前的变化,使得模型能够跟上当前的实时变化来预估未来的趋势。另外在提升特征实时化的同时,我们也一直在对模型结构做升级迭代,业务最初采用的是特征工作+简单的单模型逻辑回归,这个方式的核心就在于实时数据、实时交叉特征打点志的建设。迭代到现阶段,我们采用的是ESMM+DFM+DMR模型,通过ESMM联合训练模型来解决SSB问题和转化样本的DataSparsity,DMR结构来捕捉用户长期和短期的兴趣。但是,现阶段还存在一些问题,特征够快了,模型够复杂了,可模型更新不够快,无法更快的抓住全局层面的新的数据pattern和趋势。

云音乐直播算法团队通过探索与实践,总结出了一个相对成熟且行之有效的实时增量模型的训练框架。

增量模型是在离线模型的基础上做进一步迭代,在不改变原有模型的网络结构,增量更新模型参数,来快速抓住系统级别的全局的数据变化和新产生的数据pattern。

我们现有的离线主模型是一个深度兴趣ESMM-DFM模型;该模型是借用Wide&Deep的思想,在ESMM框架下,增加特征交叉模块、用户兴趣模块,最后通过RestNet-DNN来加快模型收敛。

业内常见的样本归因方式,一般有两种,一个是facebook提出的负样本cache归因法,第二个就是twitter提出的样本矫正法。

Twitter的做法:两条样本都会保留,都会去更新模型,这样实时性最高,但是非常依赖样本矫正策略。

在现有的工程框架下,我们更倾向于构造类似于facebook的负样本cache策略,但是直接迁移使用会存在问题,我们尝试在首页直播模块落地,但是整体样本labeljoin率只有70%。

如我们上文给出的实时增量学习的技术架构图,右侧的离线训练过程是不会丢弃的,因为增量学习需要依赖离线模型做模型热启动重启。离线模型热启动重启的主要原因有两点:

(1)防止模型会因为一些局部的pattern而被带偏,基于离线模型热启动可以对其进行矫正。

(2)如果模型训练是longrunning的,会导致模型词表OOV的概率会越来越大,无法将新的ID快速加入到模型的词典并且快速淘汰老的ID。通过离线模型热启动重启,可以同步更新模型词表,防止OOV。

(3)场景使然,如4.2所述,首页直播场景存在严重的息屏现象,导致实时样本需要做进一步的累计归因,这样获得的样本均为当前时刻的累计样本,所以模型更新均需要在离线日更模型上做梯度下降。

因此,我们设计了天级别的离线模型热启动重启和15min样本级别的重启,以解决上述三个问题。这样既可以解决模型longruning带来的oov问题和局部pattern有偏的问题,更重要是保证进入模型训练的样本label都是准确的。

样本和特征作为机器学习的基石,其质量的好坏直接决定了模型效果的上限,所以做好样本和特征的质量保障,对实时增量学习的效果提升至关重要。上文4.2样本归因一节中,我们着力于保证进入模型训练的样本准确性。本节主要以具体case为切入点,分别从样本偏差特征和低频特征两个角度,介绍我们的解决方案。

由于增量的样本远远少于离线训练样本,所以全量特征的频次过滤条件不一定适用于增量特征的频次过滤条件。比如,全量时,某些特征的频次过滤数量设置为1000,但在增量时,应该设置得小一些。全量时,使用天级别积累的样本进行训练,但在增量时,则使用15分钟或者1小时内的样本进行训练,若仍然使用与之前全量相同的频次过滤条件,会过滤掉近1小时内频次不足1000的特征,即使在后一小时内,这些特征的频次增加到1000,也无法再追回已训练样本中的这些缺失特征值。

对于这类低频特征,我们采用了两种方式来解决,第一种方式就是硬准入策略,我们设置了两种特征频次过滤条件,全量更新时采用阈值较大的全量阈值;实时增量时,采用阈值相对较小的增量阈值。并且在构建增量样本时,之前在全量样本构建过程中被全量阈值过滤的特征,其频次会被保留,等到下一次增量到来时,若全量中被过滤的这些特征再次出现,则会将全量+当前增量的频次作为当前特征的频次。这样的话,某个特征的频次达到准入门槛后,才会进入模型训练。这样方式带来线上点击率相对提升0.94%,有效观看率相对提升0.23%。

优点:可以解决本次样本中的特征由于频次过低导致学出来的权重不够置信的问题。

缺点:仍然会过滤掉某些低频特征,损失一部分有效信息。特征在达到准入阈值之前,出现的前n次都被忽略了。

如上述“硬准入”的方案的缺点所述,硬准入会过滤掉某些低频特征,损失一部分有效信息。特征在达到准入阈值之前,出现的前n次都被忽略了,只有达到一定阈值后再进入训练的设计方案会破坏样本完整性,如全量频次99,增量频次1,阈值过滤100,则该特征出现的前99次都被忽略,仅会训练该特征出现的一次,导致模型训练的稳定性差。所以我们需要更加平滑的方式。

对于“软准入”方案,业界有两种比较常见的做法,基于泊松分布的特征频次估计和动态L1正则方案。

基于泊松分布的特征频次估计

在离线shuffle后的特征满足均匀分布,但对在线数据流,特征进入训练系统可看做泊松过程,符合泊松分布:

$$P(N(t)=n)=\frac{\lambdat^ne^{-\lambdat}}{n!}$$

$$P_{\lambda_{i}}(N(\frac{T-t}{t})>\vec{N}-n)$$

每次该特征出现时,都可按该概率\(P_{\lambda_{i}}\)做伯努利采样,特征在t步进入系统的概率用下式计算:

$$P=\prod_{i=1}^{t-1}{(1-P_{\lambdai})P_{\lambdat}}$$

通过真实线上数据仿真,它能接近离线频次过滤的效果,其λ是随每次特征进入时动态计算的。它的缺陷是:当t越小时,事件发生在t内的次数的variance越大,所以会以一定概率误加或丢弃特征。未来总的训练步数T在在线学习中是未知的。频次过滤与优化器相分离,导致不能获得优化器的统计信息。

动态L1正则方案

正则化是结构风险最小化策略的实现,是在经验风险上加一个正则化项或罚项,正则化项一般是模型复杂度的单调递增函数,模型越复杂,正则化值就越大。L1范数是指向量中各个元素绝对值之和,也叫“稀疏规则算子”(Lassoregularization)。范数作为正则项,会让模型参数θ稀疏化,既让模型参数向量里为0的元素尽量多。在经典的FTRL实现中,L1正则对每个特征都是一致的。但是过大的L1虽然可以过滤掉极低频的特征,但由于约束太强,导致部分有效特征也被lasso,影响模型性能。

$$L_{1}(w_{i})=L_{1}(w_{i})*(1+\frac{(max((),0))}{N})$$其中C是惩罚倍数,N为特征最低门限,这两者皆为超参,freq(feaid)是当前特征出现的频次(包含当前增量中出现的频次以及历史总频次)。

我们也在线上环境,尝试使用了动态调节L1正则的方案,最后实现在原有硬准入方案的基础上,线上ABTest效果点击率相对提升1.2%;有效观看率相对提升1.1%。

当然除了模块带来的效果提升,我们整个实时增量模型方案上线,也取得比较喜人的结果。结合上述样本归因的处理、离线模型热启动重启以及特征准入方案,我们最终在首页直播模块推荐场景取得转化率:平均24天相对提升+5.219%;点击率:平均24天相对提升+6.575%的效果。

并且我们针对不同的模型更新频率进行了多种方案的测试,如下图,ABTestt1组为离线日更模型,每天更新替换模型文件;t2组为2小时更新模型,模型每两个小时增量训练;t8组为15分钟更新模型,模型每15分钟增量训练模型。经过我们多次测试,发现模型更新越快效果更佳也更佳稳定。

THE END
1.通俗理解机器学习模式对比——离线在线与增量学习的差异#机器学习 #离线学习 #在线学习#增量学习 #模型训练 #数据更新 #预测准确率 第一节:机器学习模式的类比与核心概念 1.1 机器学习模式的类比 机器学习模式可以被视为不同的“烹饪方法”,离线学习像是准备一顿大餐,需要所有食材一次性备齐;在线学习则像是开一家快餐店,需要根据顾客的实时反馈调整菜单;增量学习则更https://blog.csdn.net/qq_37148940/article/details/117913147
2.携程基于LSTM的广告库存预估算法使用离线与在线增量训练相结合的训练方式,使模型更具活力,每天在优选出的广告库存模型基础上进行微调,可以不断维持模型提供精准的预估能力。 作者简介 Paul,携程高级研发经理,关注广告投放技术架构、大数据、人工智能等领域; Xunling,携程资深后端开发工程师,关注广告服务、性能优化,对AI技术有浓厚兴趣。 https://www.51cto.com/article/755143.html
3.从100w核到450w核:字节跳动超大规模云原生离线训练实践动手点关注干货不迷路 本文整理自字节跳动基础架构研发工程师单既喜在 ArchSummit 全球架构师峰会上的演讲,主要介绍字节跳动离线训练发展的三个阶段和关键节点,以及云原生离线训练中非常重要的两个部分——计算调度和数据编排,最后将结合前两部分分享字节跳动在实践中沉https://maimai.cn/article/detail?fid=1767401397&efid=R2_kM5y-yEUDCK88FZWrGA
4.华为技术HuaweiTech总第096期算力:分布式的多级云架构,让算力无处不在 分布式的多级云架构涵盖了公有云、本地云和边缘云的协同分工,实现公有云做全量训练,本地云做增量训练和中心推理,边缘云负责推理(如图2),为运营商大模型部署带来了三重收益。 图2:公有云和私有云协同训练,打造个性化的模型 成本更节省。大模型的预训练需要在一段时间内https://www.huawei.com/cn/publications/huaweitech/202401
5.推荐系统入门篇流式训练:、流式训练模块的主要作用是使用实时训练样本来更新模型。推荐算法中增量更新部分的计算,通过流式计算的方式来进行更新。在线训练的优势之一,是可以支持模型的稀疏存储。训练方面,在线模型不一定都是从零开始训练,而是可以将离线训练得到的模型参数作为基础,在这个基础上进行增量训练。 https://www.jianshu.com/p/27021ab18d52
6.深度学习的类增量学习算法综述腾讯云开发者社区近年来, 深度学习模型在众多领域取得了广泛成功. 现有的深度学习模型大多部署在静态环境下, 依赖提前收集好 的数据集进行离线训练, 模型一经确定, 便无法进一步更新. 然而, 现实中开放动态的环境往往存在以流形式不断到来的数据, 包括随时间演进不断产生的新类别数据. 因此,https://cloud.tencent.com/developer/article/2318581
7.大疆教育平台增量训练任务指的是基于已有模型生成的预训练模型,增加数据集进行再次训练的过程。有以上两种方法创建增量训练任务。 增量训练一般情况下使用默认预训练模型继续训练即可,也可以在上图下拉列表中选择已有模型在2000步、4000步、6000步、8000步、最终形成的预训练模型的基础上进行训练,增量训练的数据集标签需与原模型的标签https://edu.dji.com/hub/docs?uuid=13f64464-f42d-47ea-abc5-b14c2c309de5&t=708
8.2020届计算机科学方向毕业设计(论文)阶段性汇报推荐系统与用户进行多步交互的过程可以建模为马尔科夫决策过程并使用强化学习算法训练推荐策略,但在真实的工业界场景中,在线上进行强化学习模型的训练成本极高。本课题希望使用推荐系统与用户交互的历史数据离线训练强化学习算法,并探讨这一模式的问题解决方式。 https://zhiyuan.sjtu.edu.cn/html/zhiyuan/announcement_view.php?id=3709
9.数博文本理解平台支持识别模型的离线训练;支持基于语料库的测试集生成;支持模型的版本管理;支持模型的增量训练 知识自动加工 支持包括领域实体、关系、属性和事件的自动提取;支持通过SDK、WebService、Restful API等多种方式集成模型 应用场景 知识提取 支持对各领域现存的大量文本资料的基于规则的数据要素提取,以及基于深度学习的数据要素提http://www.beidasoft.com/multi/520.html
10.离线机器学习模型训练集构建袋鼠社区离线机器学习模型训练集构建 - 离线机器学习模型训练集构建是机器学习项目中的关键步骤,特别是在资源有限或者数据安全性要求较高的情况下,离线训练集的构建尤为重要。以下是构建离线机器学习模型训练集的一般步骤和注意事项:数据收集:确定数据源:根据模型需求,确定合https://www.dtstack.com/bbs/article/15786