作者:波克
1. 直播事务布景
1.1事务布景
直播引荐事务是嵌入在云音乐 APP 中各个地方,其间就包括最大的几个场景歌曲播放页的直播模块、混合在谈论中的谈论页直播以及云音乐主页的主页六卡直播。 如下图所示,图 1.1 即为播放页上的直播模块;图 1.2 是云音乐主页中主页六卡直播模块;图 1.3 是歌曲谈论页中的直播模块。
不同引荐位的直播承载着不同的内容使命,在主页咱们更倾向让新用户了解直播,让老用户快速地进入直播间观看直播;在歌曲播放页的直播更倾向于引荐给用户与听歌行为相关、与歌曲相关的直播内容;在歌曲谈论页,直播更像是另外一种形态的内容,是交际内容的补充。
一起,直播事务是云音乐的衍生品,其引荐不同于音乐引荐,首要体现为用户目的不明确、直播用户行为稀少、实时性要求高以及存在 debias。
本文首要聚焦于直播引荐体系实时化,以场景的算法特征为切入点介绍直播场景的优化方针,从多个视点阐明为什么直播需求实时化。一起,本文概述了引荐体系实时性的根本组成和根本处理计划。引荐体系实时性首要由特征实时性、模型实时性和体系实时性组成。详细地,本文也以云音乐直播场景的实时化演进来详细介绍咱们是怎么去搭建整个直播实时化体系,并处理实时化进程中带来的困难与挑战。终究,本文也给出了在大规模场景下的线上作用和剖析。
1.2 场景算法特征
大多数渠道的直播场景,一起开播场次有限,对召回诉求不强,本质是一个对实时直播的精排或许粗排+精排的进程。
1.2.1 多方针
在引荐场景中,用户的行为一般都不止一种,而且不同行为的产生有先后顺序和依靠联系。直播引荐场景便是这样一个相关型多方针场景,在哪里建模也都是一个多方针的进程,比方既要点击率又要在观看时间长,又要转化率高,还有些粉丝亲密度的问题。 图 3 是直播的引荐的整个多方针学习进程。
用户在主页阅读直播模块时,先会产生点击,然后进入直播间产生观看,当到达 30s 以上的时分,会产生一个方针使命:有用观看。或许这时用户会喜爱该主播,和主播产生互动,并关注这个主播,更甚者送礼物给主播。用户的每一种行为都可以成为多方针模型里的一个方针,像这种方针之间存在依靠联系的多方针模型就属于相关型的多方针模型。这样流程也可以转化为一张多方针联系图,那么每一个使命和方针便是咱们模型需求去学习的。
1.2.2 实时化
比较于传统的个性化引荐每天更新用户的引荐成果, 实时引荐依据用户最近几秒的行为实时调整用户的引荐成果 。实时引荐体系让用户当下的爱好立刻反应到了引荐成果的改动上,可以给用户所见即所得的视觉体会,它牢牢地捉住了用户的爱好,让用户沉浸在其间。直播引荐体系更是对实时化需求十分高,大致可以从几个视点来介绍,Item 引荐视点、数据目标、事务环境。
Item引荐视点
直播引荐是对实时在线主播的排序,是存量主播的一小部分。从下面这张渠道主播开播散布状况图(图 4)可以看出,咱们渠道存量主播有百万量级,而当天开播主播只有万量级, 一起每个主播开播的时段纷歧,有清晨、早上、下午、晚上,且每个时段开播主播咖位也不同,一般来说晚上开播主播更多,咖位更大。
直播引荐的 item 便是主播,是”活的货品”,这不同与歌曲引荐中的歌曲,信息流引荐中的图文或许视频,主播是一个不断改动的 item,如下面这张图可以看出用户每次进入直播间看到的直播内容和主播状况都纷歧样,主播或许在 pk、表演、谈天;而歌曲或许视频是一个彻底静态的 item,且每次引荐展示都是从头开始播放; 所以直播引荐的不仅仅是一个 item ,更是 status。
数据目标
详细的主播实时功率也能体现这一问题,某一主播在同一天内纷歧起刻功率改动剧烈,存在多个顶峰和低谷,这或许与主播当时体现的状况有关、也或许与直播内容相关。可是关于引荐体系来说,体系是运用前史的数据去拟合预估未来的趋势,假如体系不行实时,无法获取主播实时体现状况,那么体系极有或许会对主播未来的趋势拟合呈现误差,甚至或许是彻底相反的成果。
事务环境
云音乐直播事务与其他事务息息相关,牵一发而动全身。这是因为直播事务不是固定方位的引荐,例如主页直播收到音乐事务风格引荐的影响,会导致直播模块呈现在第3、6、7位。歌曲播放页的直播模块,会收到歌曲的影响,因为一个直播间在不同歌曲的功率是纷歧样的。所以一旦其他事务有所改动,都极有或许对直播事务的数据散布产生巨大的改动。
所以不管是从引荐的 item 、主播数据目标仍是大环境,直播引荐都急需求一个实时化的引荐体系。
2. 引荐体系的实时性
引荐体系实时化性由特征实时性、模型实时性和体系实时化组成,需求运用特征实时化去实时获取数据散布;模型实时化去实时拟合数据散布;终究依据实时体系去获取最新模型和数据。
抛开体系实时来说,算法同学当然更关心的是特征实时性和模型实时性。详细来说;
-
引荐体系的更新速度越快,越可以反响用户最近的用户习惯,越可以给用户进行越有时效性的引荐。
-
引荐体系更新的越快,模型更容易发现最新盛行的数据 pattern,越可以让模型反响找到最新的盛行趋势。
2.1 特征实时性
引荐体系依靠强壮的数据处理才能
-
体系“实时”地收集模型所需的输入特征,使引荐体系可以运用最新的特征进行猜测和引荐
-
用户 T-1 时间产生的行为(播放某首歌、观看某个主播、打赏/付费),需求在T时间实时反应到练习数据中,提供模型学习
这是一个比较常见的特征实时化的完结结构图,首要包括日志体系、离线画像、实时画像,经过 storm、flink、kafka 完结实时数据的处理和传输, 并存储在 hbase 和 redis 中,终究落盘到 hdfs 中。实时样本的处理中间环节是经过快照体系来处理样本的穿越问题和一致性问题。
但特征实时性再强,影响的范围也仅限于当时用户,要想快速捉住体系等级的大局的数据改动和新产生的数据 pattern,就必须加强“模型”的实时性。
2.2 模型实时性
与“特征”的实时性比较,引荐体系模型的实时性往往是从更大局的视点考虑问题。特征的实时性力求用更准确的特征描述一个人,然后让引荐体系给出更契合这个人的引荐成果。而模型的实时性则是希望更快的捉住大局层面的新的数据模式,发现新的趋势和相关性。
要加强模型实时性最重要的做法是改动模型的练习方法,依照实时性强度排序,是悉数样本更新、增量更新、在线学习。 不同的更新方法当然也会带来不同的作用,例如全量更新,模型会运用某时间段内的一切练习样本进行从头练习,再用练习好的新模型代替老版本的模型,这样的练习方法需求的练习样本量、练习时间长、数据推迟长,可是样本的准确性最高。 关于在线学习,更新速度是最快的,是增量更新的进阶版,在每次取得一个新样本的时分就实时更新模型,可是这样的方法会导致一个很严峻的问题,便是模型的稀少性很差,打开过多“碎片化”的不重要特征。 增量更新相对来说是一种 tradeoff 的方法,既可以削减样本练习时间长、数据推迟严峻带来的问题,又可以削减每个样本更新带来的模型练习不稳定的问题,所以咱们的做法也首要采用这种方法。
3. 直播精排模型的实时化演进
云音乐直播事务的实时化一向都是分成两条腿在走,一个特征实时,一个是模型实时。咱们最初首要是经过不断添加各个维度的实时特征来提高体系的实时化才能,来实时反响主播、用户、上下文在当时的改动,使得模型可以跟上当时的实时改动来预估未来的趋势。另外在提高特征实时化的一起,咱们也一向在对模型结构做升级迭代,事务最初采用的是特征作业+简单的单模型逻辑回归,这个方法的核心就在于实时数据、实时穿插特征打点⽇志的建设。迭代到现阶段,咱们采用的是 ESMM+DFM+DMR 模型,经过 ESMM 联合练习模型来处理 SSB 问题和转化样本的 Data Sparsity,DMR 结构来捕捉用户长时间和短期的爱好。可是,现阶段还存在一些问题,特征够快了,模型够杂乱了,可模型更新不行快,无法更快的捉住大局层面的新的数据 pattern 和趋势。
4. 实时增量模型搭建
云音乐直播算法团队经过探究与实践,总结出了一个相对成熟且行之有用的实时增量模型的练习结构。
- 结构左侧部分是实时增量学习,右侧是离线学习: 离线练习依然保存,它依据前史7天的数据练习,首要用于增量模型的热启动重启。增量学习经过消费 Kafka 的实时数据流,经过 ETL 处理后,用于实时练习模型。
- 实时样本累计归因: 实时样本处理完后存储在 HDFS 中,实时数据流处理时,关于样本需求做一个当天前史样本的累计归因,确保样本 label 的准确性,这儿的累计归因取决于运用场景,例如主页场景重复曝光率高需求做;关于重复曝光率低的场景,则无需再做。
- 模型实时练习: 实时增量练习使命的练习数据集都是当天的累计归因过的样本,累计样本随 kafka 流不断添加。模型练习每次都是依据最新的离线模型热启动重启。 这儿的归因样本也取决于落地场景,部分场景无需累计归因。
- 模型同步: 模型依照 15 分钟例行化导出模型文件同步给引擎,这儿的同步功率可以自行调理。
4.1离线模型
增量模型是在离线模型的基础上做进一步迭代,在不改动原有模型的网络结构,增量更新模型参数,来快速捉住体系等级的大局的数据改动和新产生的数据 pattern。
咱们现有的离线主模型是一个深度爱好 ESMM-DFM 模型;该模型是借用 Wide&Deep 的思想,在 ESMM 结构下,添加特征穿插模块、用户爱好模块,终究经过 RestNet-DNN 来加速模型收敛。
- ESMM 联合练习模型,处理 SSB 问题和转化样本的 Data Sparsity
- 引进 DFM 替换 DNN,添加多特征域交互性
- 显性建模 U2I 和 I2I 网络,增强用户和主播的爱好衔接
- Output 层:ResNet-DNN 替换 Sigmoid 加速模型收敛
4.2 样本归因
大多数和转化相关的正样本 delay 现象都很明显,这样会导致实时数据散布不是实在的散布,因为在实时样本被落下来的时分,正样本还没到来。正样本 delay 是因为用户行为上报存在天然串行,导致 label 滞后,用户曝光日志会最先产生,然后才会是点击再是观看日志,整个行为不可逆转。所以这会产生一个问题,同一个用户在同一页面,曝光和点击数据先后抵达时,怎么确认归因样本 label。
业内常见的样本归因方法,一般有两种,一个是 facebook 提出的负样本 cache 归因法,第二个便是 twitter 提出的样本纠正法。
负样本 cache 归因法便是如图所示,负样本会先 cache, 等候潜在的正样本抵达,若后续正样本抵达,则只保存正样本,更新模型一次。cache 的时间窗口一般是有转化时长来确认,确保 95% 以上的转化能完结即可。虽然这样的做法会存在一些样本推迟,可是样本 label 准确性是比较高的。
Twitter 的做法:两条样本都会保存,都会去更新模型,这样实时性最高,可是十分依靠样本纠正战略。
在现有的工程结构下,咱们更倾向于构造类似于 facebook 的负样本 cache 战略,可是直接搬迁运用会存在问题,咱们测验在主页直播模块落地,可是整体样本 label join 率只有70%。
这就涉及到云音乐主页场景都会存在的一个问题,息屏现象。 因为用户进入主页到退出,再到从头回到云音乐主页,是不会从头拉流的,这就导致了用户的点击和观看或许远远大于曝光,cache 是无法等候这么长时间的。假如直接落下实时样本,就会导致样本内呈现同一条特征对应着多个正负样本 label,给模型练习带来太多的噪声。
所以咱们规划了样本累计归因的方法,cache 落样本的方法不变,添加一个离线处理进程,对实时样本和当天前史样本在做一次归因,确保截止当时时间内的样本准确;这样牺牲少数时间,换取高样本准确性,终究使得样本准确性从 70% 提高到 97%。
4.3 模型热启动重启
如咱们上文给出的实时增量学习的技能架构图,右侧的离线练习进程是不会丢掉的,因为增量学习需求依靠离线模型做模型热启动重启。离线模型热启动重启的首要原因有两点:
(1)避免模型会因为一些部分的 pattern 而被带偏,依据离线模型热启动可以对其进行纠正。
(2)假如模型练习是 long running 的,会导致模型词表OOV 的概率会越来越大,无法将新的ID快速参加到模型的词典而且快速淘汰老的 ID。经过离线模型热启动重启,可以同步更新模型词表,避免 OOV。
(3)场景使然,如 4.2 所述,主页直播场景存在严峻的息屏现象,导致实时样本需求做进一步的累计归因,这样取得的样本均为当时时间的累计样本,所以模型更新均需求在离线日更模型上做梯度下降。
因而,咱们规划了天等级的离线模型热启动重启和 15min 样本等级的重启,以处理上述三个问题。这样既可以处理模型 long runing 带来的 oov 问题和部分 pattern 有偏的问题,更重要是确保进入模型练习的样本 label 都是准确的。
4.4 特征准入计划
样本和特征作为机器学习的基石,其质量的好坏直接决议了模型作用的上限,所以做好样本和特征的质量保障,对实时增量学习的作用提高至关重要。上文 4.2 样本归因一节中,咱们着力于确保进入模型练习的样本准确性。 本节首要以详细 case 为切入点,分别从样本误差特征和低频特征两个视点,介绍咱们的处理计划。
Case1: 时间误差特征,例如 week 和 hour 这类型的特征,增量样本中集中于某一两个特征值,和离线练习样本散布彻底纷歧致。
Case2: 低频不相信特征,例如某主播 id 样本只呈现 2 次曝光,1 次点击,1 次转化。 该 id 做维特征喂入模型,从计算意义上说,该 id 点击率50%,转化率100%。
所以咱们规划了一套特征准入计划来缓解这种现象,首要包括 feature freezing、特征硬准入、动态 L1 正则的软准入方法。详细计划,如图所示。
4.4.1 Feature Freezing
机器学习算法有一个独立同散布的根本假定,即模型练习的数据散布要与猜测时的数据散布独立同散布。一些时间特征比方 week 和 hour,在离线批样本中因为被充沛 shuffle 过,运用这些特征练习出来的模型依然能保障练习和猜测独立同散布,可是在实时流式练习中,样本实时顺序抵达的,这类特征无法被充沛 shuffle,使得模型练习一向在练习同一个时间的特征值,而猜测时或许切换到下一个时间的特征值,导致模型泛化才能差。所以,这类时间误差特征不参加模型的参数更新,作为冻住节点,避免这部分特征陷入部分最优。
4.4.2 “硬准入”
因为增量的样本远远少于离线练习样本,所以全量特征的频次过滤条件纷歧定适用于增量特征的频次过滤条件。比方,全量时,某些特征的频次过滤数量设置为 1000,但在增量时,应该设置得小一些。全量时,运用天等级积累的样本进行练习,但在增量时,则运用 15 分钟或许 1 小时内的样本进行练习,若依然运用与之前全量相同的频次过滤条件,会过滤掉近 1 小时内频次缺乏 1000 的特征,即使在后一小时内,这些特征的频次添加到 1000,也无法再追回已练习样本中的这些缺失特征值。
关于这类低频特征,咱们采用了两种方法来处理,第一种方法便是硬准入战略,咱们设置了两种特征频次过滤条件,全量更新时采用阈值较大的全量阈值;实时增量时,采用阈值相对较小的增量阈值。而且在构建增量样本时,之前在全量样本构建进程中被全量阈值过滤的特征,其频次会被保存,等到下一次增量到来时,若全量中被过滤的这些特征再次呈现,则会将全量+当时增量的频次作为当时特征的频次。这样的话,某个特征的频次到达准入门槛后,才会进入模型练习。这样方法带来线上点击率相对提高 0.94%,有用观看率相对提高 0.23%。
优点: 可以处理本次样本中的特征因为频次过低导致学出来的权重不行相信的问题。
缺陷: 依然会过滤掉某些低频特征,丢失一部分有用信息。特征在到达准入阈值之前,呈现的前 n 次都被疏忽了。
4.4.2 “软准入”
如上述“硬准入”的计划的缺陷所述,硬准入会过滤掉某些低频特征,丢失一部分有用信息。特征在到达准入阈值之前,呈现的前 n 次都被疏忽了,只有到达必定阈值后再进入练习的规划计划会损坏样本完整性,如全量频次 99,增量频次 1,阈值过滤 100,则该特征呈现的前 99 次都被疏忽,仅会练习该特征呈现的一次,导致模型练习的稳定性差。所以咱们需求更加平滑的方法。
关于“软准入”计划,业界有两种比较常见的做法,依据泊松散布的特征频次估量和动态 L1 正则计划。
依据泊松散布的特征频次估量
在离线 shuffle 后的特征满足均匀散布,但对在线数据流,特征进入练习体系可看做泊松进程,契合泊松散布:
P(N(t)=n)=tne−tn! P(N(t)=n)=\frac{\lambda t^n e^{-\lambda t}}{n!}
其间 n 为当时呈现的次数,t 为当时的步数, 为单位时间产生率,是泊松散布的首要参数,T 为练习总步数。N⃗\vec{N} 为特征最低门限(即最少在 T 时间内呈现的次数)。
因而咱们能经过前 t 步的特征呈现的次数 n,将 t 时间作为单位时间,则 =nt\lambda = \frac{n}{t}。 依据泊松散布,咱们可以算出剩下 T−tt\frac{T-t}{t} 时间内事件产生大于等于 N⃗−n\vec{N}-n 次的概率
Pi(N(T−tt)>N⃗−n)P_{\lambda_{i}}(N(\frac{T-t}{t})> \vec{N}-n)
每次该特征呈现时,都可按该概率 PiP_{\lambda_{i}} 做伯努利采样,特征在 t 步进入体系的概率用下式核算:
P=∏i=1t−1(1−Pi)Pt P = \prod_{i=1}^{t-1} {(1-P_{\lambda i })P_{\lambda t}}
经过实在线上数据仿真,它能接近离线频次过滤的作用,其 是随每次特征进入时动态核算的。它的缺陷是:当 t 越小时,事件产生在 t 内的次数的 variance 越大,所以会以必定概率误加或丢掉特征。未来总的练习步数 T 在在线学习中是不知道的。频次过滤与优化器相分离,导致不能取得优化器的计算信息。
动态L1正则计划
正则化是结构危险最小化战略的完结,是在经历危险上加一个正则化项或罚项,正则化项一般是模型杂乱度的单调递加函数,模型越杂乱,正则化值就越大。L1 范数是指向量中各个元素绝对值之和,也叫“稀少规则算子”(Lasso regularization)。范数作为正则项,会让模型参数 稀少化, 既让模型参数向量里为 0 的元素尽量多。在经典的 FTRL 完结中,L1 正则对每个特征都是一致的。 可是过大的 L1 虽然可以过滤掉极低频的特征,但因为束缚太强,导致部分有用特征也被 lasso,影响模型功能。
参考蚂蚁的实时流技能文章提到的动态调 L1 正则计划,经过特征频次影响 L1 正则系数,使得不同频次的特征有不同的 lasso 作用。
特征频次和依据 MLE 的参数估量的相信度相关,呈现次数越低相信度越低。假如在纯频率计算基础上参加一个先验散布(正则项),当频率计算相信度越低的时分,越倾向于先验散布,相应的正则系数要更大。以下是经历公式:
L_1(w_i) = L_1(w_i) * ( 1 + ( C * max( N-freq(feaid), 0 ) ) / N )
其间 C 是惩罚倍数,N 为特征最低门限,这两者皆为超参,freq(feaid) 是当时特征呈现的频次(包括当时增量中呈现的频次以及前史总频次)。
咱们也在线上环境,测验运用了动态调理 L1 正则的计划,终究完结在原有硬准入计划的基础上,线上 ABTest 作用点击率相对提高 1.2%; 有用观看率相对提高 1.1%。
5. 线上作用
当然除了模块带来的作用提高,咱们整个实时增量模型计划上线,也取得比较喜人的成果。结合上述样本归因的处理、离线模型热启动重启以及特征准入计划,咱们终究在主页直播模块引荐场景取得转化率:平均 24 天相对提高 +5.219% ;点击率:平均 24 天相对提高 +6.575% 的作用。
而且咱们针对不同的模型更新频率进行了多种计划的测验,如下图,ABTest t1 组为离线日更模型,每天更新替换模型文件; t2 组为 2 小时更新模型,模型每两个小时增量练习; t8 组为 15 分钟更新模型,模型每 15 分钟增量练习模型。 经过咱们多次测验,发现模型更新越快作用更佳也更佳稳定。
线上排序成果实验前后对比展示如下图,部分在 base 模型中无法排到 top 3 的主播可以在实时增量模型中被发现且排到前面来。也印证咱们上文 2.2 节所说,模型的实时功可以更快的捉住大局层面的新的数据模式,发现新的趋势和相关性。
6. 总结与展望
直播引荐事务有着其不同于其他事务的场景特征,引荐的不仅是一个 Item 更是 Status,进而直播引荐需求更快、更高、更强的引荐算法来支持事务的发展。本文是第一篇落地云音乐直播事务的实时增量学习的文章,分享咱们在直播事务中怎么落地实时增量学习,处理模型实时化进程中带来的问题的一些经历。接下来,咱们会继续朝着更快、更高、更强的引荐算法行进,在用户生长、用户付费、主播生长等多个方面继续探究,致力于提供更优的用户体会,更优的线上作用,更好地服务事务。
参考文献
- 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 Conferen
- Xinran He, Junfeng Pan, Ou Jin, Tianbing Xu, Bo Liu, Tao Xu, Yanxin Shi, Antoine Atallah, Ralf Herbrich, Stuart Bowers, and Joaquin Quionero 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.
- 淘宝查找模型怎么全面实时化?初次应用于双11
- 蚂蚁金服核心技能:百亿特征实时引荐算法揭秘.
- 在线学习在爱奇艺信息流引荐事务中的探究与实践.
- 蘑菇街主页引荐视频流——增量学习与wide&deepFM实践(工程+算法)
本文发布自网易云音乐技能团队,文章未经授权制止任何形式的转载。咱们终年接收各类技能岗位,假如你准备换作业,又恰好喜爱云音乐,那就参加咱们staff.musicrecruit@service.netease.com