DPP算法的具体实现比较复杂,这里主要介绍两个关键点:
①基于多样性和相关性构建矩阵L,该矩阵的行列式等价于最终要度量的目标。如何去定义相关性和多样性?
- 多样性(diversity)是指两个item相似不相似,如果很相似就不多样。利用两个item各自的item embedding计算内积,即表示两个item的相似度。
- 相关性(relativity)是一个候选item与当前用户的匹配程度。在不同环节的实现有差异:在粗排层的DPP,一般是基于user embedding和item embedding计算内积。在精排层的DPP,需要精排的CTR或CVR预估结果,因为这些预估结果反映了当前用户对候选item的喜爱程度。
基于上述定义的相关性和多样性就可以构建矩阵L:用户与itemi的相关性 ( 偏好程度 )、用户与itemj的相关性 ( 偏好程度 )、itemi与itemj的多样性三者乘积。通过最大化矩阵L,就可以实现相关性和多样性的联合度量。
②如何优化求矩阵L行列式的复杂度,该行列式的原始计算复杂度是三阶,线上难以支撑这样的运算性能消耗,可以通过贪婪算法把计算复杂度进一步降低至一阶。
- 先进行矩阵分解,基于分解的结果将计算复杂度降低到二阶。
- 用增量的方式更新参数,绕过求解线性方程组的部分,将复杂度进一步降低到一阶。
由此,行列式的求解过程由三阶降低到一阶,满足了线上的性能,上图最下方给出的paper就是相关方向的论述。
4. 线上收益
在线上做多样性的相关实验,我们较关注的系统和数据两部分,都有明显收益:
- 系统收益,作为一个ugc平台,会考量推荐系统分发覆盖了多少创作者、覆盖了多少作品以及内容的时效性,从上图右侧三条曲线可见,在加入多样性的控制后,三个指标都有稳步的提升。
- 数据收益,有关播放时长、关注渗透、点赞渗透相关的指标都有1~2个点的提升,这也体现了多样性是有必要的,因为它相当于对pointwise进行了简单的listwise化,形象化阐述就是,用户浏览多个session时,多样性调节避免了同质化内容扎堆。
5. 关于DPP还能做更多的是什么?
针对上述基于多样性和相关性构建矩阵L的过程,有两方面可以做进一步优化:
- 多样性本质上是定义什么样的item是相似的,用相似矩阵刻画这种相似关系。在我们K歌平台,会做一些内容的混排,比如音频跟视频的混排,如果在原始的item embedding构建出来的item similarity matrix基础上,加入一些预设的先验信息,判断什么样的item是更相似的,比如音频跟音频间更相似,视频跟视频间更相似,那么它最后的度量目标就加入了对作品类型的考量,这就间接实现了内容的混排。
- 相关性本质上是定义什么样的item更匹配当前用户,之前都是从消费者的角度去考量用户更喜欢什么样的item,而我们作为一个ugc平台,很多时候也要考量什么样的item更适合被分发,比如某item是不是更有平台的画风,更符合我们对内容分发的理解,这时,就是从平台系统或者生产者的角度去理解什么样的item更应该被优先推荐。如果已知一部分item更需要被优先推荐,在构建用户跟item间的相关性分时,可以对relativity score加调节权重进行干预,实现流量分配。比如,如果要使乐器类item比其他item有更高的权重,这时,可以调高乐器类item和用户的匹配权重。
综上可知,DPP不只是一个多样性或相关性的度量,它本身是一种调控方式,具体调控的量和业务场景相关,具有非常大的挖掘空间。
今天的分享就到这里,谢谢大家。