分享嘉宾:kevinshuang、fivenwu
编辑整理:张振、于洋
出品平台:DataFunTalk
导读:腾讯音乐娱乐集团 ( TME ) 目前有四大移动音乐产品:QQ音乐、酷狗音乐、酷我音乐和全民K歌,总月活超8亿。其中,全民K歌与其他三款产品有明显的差异,具体表现如下:以唱为核心,在唱歌的功能上又衍生出了一些音乐娱乐的功能及玩法,目前有超过1.5亿的月活。推荐在全民K歌各个场景中起着重要作用,极大地影响着平台的内容分发状况及生产者与消费者的关系。本文将主要介绍全民K歌的推荐系统架构及粗排设计,具体从以下几方面展开:
- 业务背景
- 推荐系统架构及挑战
- 粗排模块算法设计
- 多样性调节算法设计
01
业务背景
全民K歌涉及多样化的推荐场景,涵盖内容、直播、歌房、用户等多种形态。
具体的推荐功能如上图所示,主要包括以下几类:
① 基于内容的推荐,包括优质UGC推荐、关注流推荐、同城社交推荐等功能模块。
- 优质UGC推荐,将平台原生原创的优质音视频内容进行推荐
- 关注流推荐,对关注的内容进行混排
- 同城社交推荐,基于同城的社交进行推荐
② 除了内容推荐外,我们也会负责一些其他类型的推荐,包括直播推荐、点歌推荐、歌房推荐和点评推荐,都是在K歌生态下独有的推荐。
02
推荐系统架构及挑战
我们的推荐系统主要分为四个部分,包括召回层、粗排层、精排层及重排层。
1. 召回层
召回层的作用主要是从海量的item中筛选小量级的用户可能感兴趣的内容。在这个模块中最重要、大家了解最多的肯定就是召回模块本身。
一般来说,我们线上的召回方法会分为索引类的召回、泛社交的召回以及模型的召回。
- 索引类的召回:主要根据画像的结果做精准的ID类召回,比如对用户感兴趣的歌曲进行召回,以及用户感兴趣的创作者进行召回。
- 泛社交的召回:主要基于用户在站内丰富的社交关系,比如用户可能会关注一些其他的用户,也可能加入一些家族,我们会根据这些社团的发现结果做泛化召回。
- 模型的召回:基于模型的召回的方法比较多,在后面会展开介绍。
除了召回模块之外,我们在召回层认为另外一个比较重要的是内容的比例筛选,因为我们整体的内容发表量比较大,每天可能有500万的作品在平台内发表,如何从中筛选出合适的内容,需要基于音视频的理解,以及基于我们自己的流量策略来综合发现。
2. 粗排层
粗排层到精排层相当于是一个承上启下的作用,它会把我们召回到的一些万量级的作品进一步筛选到千量级,既要考虑打分的性能问题,又要考虑排序粗排精准度的问题。一般来说,粗排模型会用一些模型蒸馏的方法,包括特征蒸馏或者基于模型本身的结构蒸馏,以及把这些不同的蒸馏方法组合起来等等。在粗排层,除了做粗排的打分外,我们还会重点做生态的控制,特别在一些内容推荐场景或者直播推荐场景中,我们会注重这里面的内容生态,包括时效性,内容的调性,多样性等等。
3. 精排层
粗排层之后就来到了精排层,精排层主要根据千量级的作品进一步的进行精排打分来筛选到百量级的作品。在精排层,我们主要注意以下几方面:
- 一个就是精排模型本身,我们早期也采用了类似LR的线性模型和LightGBM这样的树模型,之后随着深度模型的技术发展,我们所有的场景都切换到了深度模型,并且随着深度网络的设计复杂度,以及样本规模的逐步增加,让早期基于TF训练的一些深度模型引擎,在训练的速度以及对模型大小规模的限制,已经对我们产生了影响。所以我们现在已经过渡到基于参数服务器框架下,训练深度模型。
- 在精排前,除了模型怎么训练构造外,另外两个比较重要的是特征和样本的构造,以及在这个场景下的多目标设计。特别是多目标的问题,可能还涉及到具体的网络结构如何做,以及最后的结果如何融合。
4. 重排层
从精排层排序出百量级的作品后,就会进入到重排层。重排层会基于业务规则进行进一步的干预,比如同一首歌曲的视频不能连续出现,同一个创作者的视频不能连续出现等等。除了基于规则性的限制外,我们也会考虑使用模型化的方法做多样性的打散,并且在第4部分,我们也会具体介绍DPP算法的原理和思想。除了模型方法之外,我们也在考虑通过list wise的方法做内容的重排。
03
粗排模块算法设计
1. 粗排模块定位和方案路线
粗排模型和精排模型不同,它可能既需要解决模型预测的准确性,又需要解决模型预测的效率。接下来,为大家介绍我们整个推荐系统如何在线上真实运转。
粗排模块主要包含两部分:
第一部分是粗排的排序部分,这一部分主要就是为了解决一个大规模item的预排序问题。
第二个部分是多样性控制部分,作为一个UGC平台,我们需要考量内容在整个内容生态中的分发状况,以及均衡的考量生产者跟消费者之间的关系。我们是通过多样性调节算法来间接实现这个目的的。
让我们再回顾下前面所提到的整个召回系统架构,我们可以看到它其实是一个典型的节点架构,从内容发现到召回,到粗排到精排,然后重排,最后把合适的内容推荐给用户。由于我们是一个比较大的UGC生产平台,从一个UGC平台的角度来考虑,我们倾向于分发较为新的作品,因为新的作品的分发会为那些活跃的创作者带来一定的流量激励,使得生产端跟消费端产生联动,促进了一种正向的循环。