作者:波克
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)=\frac{\lambda t^n e^{-\lambda t}}{n!}$$
其中 n 为以后呈现的次数,t 为以后的步数,λ 为单位工夫发生率,是泊松散布的主要参数,T 为训练总步数。$\vec{N}$ 为特色最低门限(即起码在 T 工夫内呈现的次数)。
因而咱们能通过前 t 步的特色呈现的次数 n,将 t 时刻当做单位工夫,则 $\lambda = \frac{n}{t}$。依据泊松散布,咱们能够算出残余 $\frac{T-t}{t}$ 工夫内事件产生大于等于 $\vec{N}-n$ 次的概率
$$P_{\lambda_{i}}(N(\frac{T-t}{t})> \vec{N}-n)$$
每次该特色呈现时,都可按该概率 $P_{\lambda_{i}}$ 做伯努利采样,特色在 t 步进入零碎的概率用下式计算:
$$ 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 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.
- 淘宝搜寻模型如何全面实时化?首次利用于双 11
- 蚂蚁金服核心技术:百亿特色实时举荐算法揭秘.
- 在线学习在爱奇艺信息流举荐业务中的摸索与实际.
- 蘑菇街首页举荐视频流——增量学习与 wide&deepFM 实际(工程 + 算法)
本文公布自网易云音乐技术团队,文章未经受权禁止任何模式的转载。咱们长年招收各类技术岗位,如果你筹备换工作,又恰好喜爱云音乐,那就退出咱们 staff.musicrecruit@service.ne…