工业界推荐系统时长预估的常用方案
背景
介绍几种工业界比较常用的时长建模方案。
Weighted Logloss
Weighted Logloss是YouTube论文1提出的一种方法。将时长
实际中一般将loss中分母的
线上预估时,需要将预估的
时长归一化
长视频的消费时长往往更高,所以Weighted Logloss中长视频的比重更大,更倾向于优化长视频的效果。所以,为了消除视频本身长短带来的偏差,可以先将训练样本按video duration分桶,比如0-1分钟的一档,1-5分钟的一档等等,然后每档内部按消费时长分段,最后将消费时长归一化到0到1内的值,用这个归一化后的值做label进行训练。
最优解
这里如果用Weighted Logloss是否可以呢?
那么,
另外,时长归一化在后面的几种方法里都可以叠加使用。
CREAD
CREAD是快手的论文2中提出的方法。将消费时长从小到大排序,比如是
实际上,训练时除了m个分类任务,还增加了两个其他损失,一个是还原时长与真实时长的偏差(采用Huber
loss),另一个是
Earth Mover’s Distance
传统的多分类任务,label中只有一个是正类,其他是负类,类别之前没有关系。但是在某些任务中,类别之间是有一定关系的。下图是收入预估的一个例子,adult是真实label,AB两种分布的loss是一样的,但明显B比A更合理一点。在时长预估上也有同样的道理,把时长分成10个区间,真实label在区间5,做多分类任务,我们希望5区间的预估概率最高,向左向右的概率平滑的降低。论文3使用的是Squared EMD
Loss:
论文3不是做时长预估的,我们这里为时长预估任务稍微改动一下。
和CREAD类似,将消费时长从小到大排序,比如是
线上预估时,可以通过以下公式还原成时长,和CREAD其实一样。
EMD和CREAD的实现其实本质一样,只是出发角度不同。
Distill Softmax
和EMD有点类似,只不过EMD从预估值分布角度考虑,而Distill Softmax是从label角度考虑,直接将时长做成了平滑的多分类soft-label。比如,把时长分成10个区间,真实label在区间5,本来的多分类label是[0,0,0,0,1,0,0,0,0,0],这里对时长做了平滑,希望5区间的预估概率最高,向左向右的概率平滑的降低,做成[0.001,0.005,0.03,0.1,0.7,0.1,0.05,0.008,0.005,0.001]。
具体做法,时长先做下laplace分布变换,得到每个区间的概率值,越靠近真实label的区间概率越大。
import numpy as np |
损失函数就是多分类交叉熵:
线上预估时,可以通过以下公式还原成时长,和EMD一样。
Distill Softmax也能和EMD一起用,既先做soft-label变换后,再使用EMD。
参考
- [1][Recommending What Video to Watch Next: A Multitask Ranking
System](https://dl.acm.org/doi/10.1145/3298689.3346997)
- [2][CREAD: A Classification-Restoration Framework with Error
Adaptive Discretization for Watch Time Prediction in Video Recommender
Systems](http://arxiv.org/abs/2401.07521)
- [3][Squared Earth Mover’s Distance-based Loss for Training Deep Neural Networks](http://arxiv.org/abs/1611.05916)