10 mins
多目标模型

介绍多目标模型的基本概念、常见优化方法及其在排序与推荐任务中的实践与案例分析。

排序的依据h2

排序模型预估点击率、点赞率、收藏率、转发率等多种分数,融合这些预估分数(比如加权和),最后根据融合的分数做排序、截断

Share Bottom多目标模型h2

输入层:拼接四类特征,用户特征(如用户画像、历史行为)、物品特征(如内容类型、标签)、统计特征(如热门度、曝光量)、场景特征(如时间、地点)。

神经网络层:对拼接后的特征进行深层特征提取。

输出层:通过 4 个独立的 “全连接层 + Sigmoid 激活函数”,分别输出点击率、点赞率、收藏率、转发率的预测概率。

目标值是0、1,预测概率为0-1,实际上就是多个二元分类任务,既然如此损失函数就可以使用交叉熵。

我们把四个损失函数的加权和作为总的损失函数:

i=14αi.CrossEntropy(yi,pi)\sum_{i=1}^4 \alpha_i . CrossEntropy(y_i,p_i)

权重αi\alpha_i是根据经验设置的,在收集的历史数据上训练神经网络的参数,最小化损失函数,损失函数越小,说明模型预测的结果越接近于真实值,做训练的时候,对损失函数求梯度,做梯度下降更新参数

训练中存在的困难h2

类别不均衡,比如每100次曝光,约有10次点击,90次无点击,再比如每100次点击,约有10次收藏,90次无收藏

解决方案:负样本降采样,也就是保留一部分负样本,这样让正负样本数量平衡,也节约了计算

预估值校准h2

预估值需要校准之后才能用于排序,设正负样本数量分别为n+n_{+}nn_{-}(以点击为例,曝光后如果点击即为正样本,否则为负样本),负样本数量通常远大于正样本,在训练的时候,通常对负样本做降采样,抛弃一部分负样本。

使用α.n\alpha.n_{-}个负样本,α(0,1)\alpha \in (0,1)是采样率,由于负样本变少,预估的点击率大于真实点击率。

α\alpha越小,负样本数越少,模型对点击率的高估就会越严重。

真实点击率:ptrue=n+n++np_{true}=\frac{n_{+}}{n_{+}+n_{-}}(期望)

预估点击率:ppred=n+n++α.np_{pred}=\frac{n_{+}}{n_{+}+\alpha.n_{-}}(期望)

上述两式结合得到:ptrue=α.ppred(1ppred)+α.ppredp_{true}=\frac{\alpha.p_{pred}}{(1-p_{pred})+\alpha.p_{pred}}

在线上做排序的时候,首先让模型预估点击率ppredp_{pred},然后用上述公式做校准,最后拿校准之后的点击率作为排序依据。

MMoEh2

输入层:拼接用户特征、物品特征、统计特征、场景特征,覆盖了分析用户行为或内容推荐的核心维度。

专家层:3 个独立(不共享参数)的 “神经网络专家”(3只是一个超参数,通常会是4个或者8个),每个专家专注于学习特定子任务或特征模式(例如不同专家可分别擅长用户偏好分析、物品属性建模、场景适配性判断)。

输出层:每个专家输出对应的特征表示(x1,x2,x3)(x_1,x_2,x_3),为后续多任务预测或特征融合提供基础。

带门控机制的专家混合

门控层:上图包含了2个门控网络,通过 “神经网络 + Softmax 激活函数” 输出专家权重(p1,p2,p3)(p_1,p_2,p_3)(q1,q2,q3)(q_1,q_2,q_3)

上述2个门控网络代表着,最终会输出两种目标预估值,如下图

特征层:输入三个特征向量x1x_1x2x_2x3x_3

权重融合层:对特征向量做加权平均,其中p1p_1p2p_2p3p_3为点击率任务的特征权重,q1q_1q2q_2q3q_3为点赞率任务的特征权重

任务输出层:两个独立的神经网络分别基于融合后的特征,输出 “点击率” 和 “点赞率” 的预测结果。

极化现象与解决办法h2

极化现象:Softmax输出值其中一个接近于1,其余接近0

如上图,第1号专家神经网络没有被用到,那么MMoE退化成了一个简单的多目标模型,不会对专家做融合

解决办法:如果有n个专家,那么每个softmax的输入和输出都是n维向量,在训练时,对softmax的输出使用dropout。

为什么这样就能解决极化?

Softmax输出的n个数值被“临时屏蔽”的概率都是10%,这样每个专家被随机丢弃的概率都是10%,打破“权重只集中在少数专家”的局面。

预估分数融合h2

  • 简单的加权和:pclick+w1.plike+w2.pcollect+...p_{click}+w_1.p_{like}+w_2.p_{collect}+...

  • 点击率乘以其他项的加权和:pclick.(1+w1.plike+w2.pcollect+...)p_{click}.(1+w_1.p_{like}+w_2.p_{collect}+...),其中,比如pclick.plikep_{click}.p_{like}即曝光之后,点赞的概率

  • 海外某短视频APP的融分公式:(1+w1.ptime)α1.(1+w2.plike)α2...(1+w_1.p_{time})^{\alpha_1}.(1+w_2.p_{like})^{\alpha_2}...,其中,ptimep_{time}表示预估短视频的观看时长,αi\alpha_{i}是超参数,线上做A/B测试选出合适的超参数

  • 国内某短视频APP的融分公式:根据预估时长ptimep_{time},对n篇候选视频做排序,如果某段视频排名是第rtimer_{time},则它得分1rtimeα+β\frac{1}{r_{time}^{\alpha}+\beta},对点击、点赞、转发、评论等预估分数做类似处理,最终融合分数:w1rtimeα1+β1+w2rlikeα2+β2+...\frac{w_1}{r_{time}^{\alpha_1}+\beta_1}+\frac{w_2}{r_{like}^{\alpha_2}+\beta_2}+...

  • 某电商的融分公式:电商的转化流程从曝光->点击->加购物车->付款,模型预估有pclickp_{click}pcartp_{cart}ppayp_{pay},最终融合分数为pclickα1.pcartα2.ppayα3.priceα4p_{click}^{\alpha_1}.p_{cart}^{\alpha_2}.p_{pay}^{\alpha_3}.price^{\alpha_4}

视频播放建模h2

与图文笔记排序的主要依据(点击、点赞、收藏、转发、评论)不同,视频播放建模的模型主要考虑的是视频的播放时长和完播,播放时长是一个连续性变量,可能会有人打算直接使用回归模型拟合播放时长,但其实这样做的效果不好!

播放时长h3

播放时长数据往往是“长尾分布”,即大部分视频被观看几秒,少数视频被观看数分钟甚至更久,且受比如“用户-视频-场景”这种多维度因素影响(比如用户习惯、视频类型、观看设备等),直接回归很难捕捉这种非线性、高维度的复杂关系。

YouTube 时长建模思路:以share bottom多目标为例,我们只关心最后一个全连接层的输出值zz,接着进入Sigmoid函数,输出是一个概率值p=exp(z)1+exp(z)p=\frac{exp(z)}{1+exp(z)},做训练,需要一个同样在0-1之间的目标值y(y=fract1+ty=frac{t}{1+t},其中tt为实际观测的播放时长,如果没有点击,则t=0t=0)来计算交叉熵损失CE(y,p)=y.logp+(1y).log(1p)CE(y,p)=y.logp+(1-y).log(1-p)

如果p=yp=y,那么exp(z)=texp(z)=t,我们可以把exp(z)exp(z)作为播放时长的预估

完播率h3

  • 回归方法:比如视频时长10分钟,实际播放了4分钟,那么实际播放率为y=0.4y=0.4,让预估播放率pp拟合y:loss=y.logp+(1y).log(1p)loss=y.logp+(1-y).log(1-p),线上预估完播率,模型输出p=0.73p=0.73,意思是预计播放73%,和点赞率、收藏率、转发率、评论率一样,代表了用户对于物品的兴趣

  • 二元分类方法:需要人为设定完播指标,比如完播80%,那么如果视频长度10分钟,播放大于8分钟作为正样本,播放小于8分钟作为负样本,做二元分类训练模型,线上预估完播率,模型输出p=0.73p=0.73,意思是正样本的概率为73%

注意h3

在实践中,我们不能直接把预估的完播率用到融分公式中,从直觉上来说,视频越长,完播率会越低,如果直接用完播率,则会对长视频不公平

我们使用函数f(duration)f(\text{duration})拟合完播率,我们要利用函数f对预估的完播率 pp 做调整,这样可以公平对待长短视频的完播率

线上预估完播率 pp,然后做调整

pfinish=pf(duration)p_{finish}=\frac{\text{p}}{f(\text{duration})}

Comments