标题:ADL: Adaptive Distribution Learning Framework for Multi-Scenario CTR Prediction
地址:https://dl.acm.org/doi/pdf/10.1145/3539618.3591944
会议:SIGIR 2023
公司:菜鸟网络
1.导读
本文主要针对多场景建模提出的相关方法,通常我们是通过专家只是或者业务策略手动进行分组分场景,通过专家知识来分组可能会忽略数据底层的分布,针对这个问题,本文提出自适应分布学习ADL:一个由聚类过程和分类过程组成的端到端框架。
- 作者设计了一个具有自定义动态路由机制的分布自适应模块。路由算法没有为预定义的数据分配引入先验知识,而是自适应地为每个样本提供一个分布系数,以确定它属于哪个聚类。
- 每个聚类对应于一个特定的分布,以便模型能够充分捕捉这些不同聚类之间的共性和区别。
2.方法
image.png
2.1 模型总览
如图1所示,它是一个端到端的框架,由聚类过程和分类过程组成。将具有各种特征(如用户画像、历史行为、商品特征等)的多源数据输入到embedding层。然后分布自适应模块通过自定义路由机制确定样本属于哪种潜在分布
C_j(j\in \{1,...,K\})。之后是经典的多分支网络结构,经过共享层MLP和cluster层来学习簇的共性和区别。
2.2 分布自适应模块
使用分布学习模块DLM进行动态路由,在分布学习中,希望的是聚类内具有较小的内部距离,而聚类间具有较大的距离。基于将聚类和期望最大化(EM)算法纳入深度学习的胶囊网络[1]的相关工作,作者将这一想法引入到分布学习中。使用余弦相似度来度量,同一分布内的两个向量余弦相似度大,对应的角度小,反之余弦相似度小,角度大。计算每个数据和每个分布中心之间的相似性,来确定属于哪个分布,算法过程如图所示
- 对于每个batch的样本在每一轮中,首先计算每个embedding向量
\overrightarrow{e_i}和分布中心向量
\overrightarrow{c_j}的余弦相似度分数
s_{ij},其中b表示第几个batch
s_{i j}=\left|\overrightarrow{\mathbf{c}}_{j}^{b}\right|\left|\overrightarrow{\mathbf{e}}_{i}\right| \cos \theta=\overrightarrow{\mathbf{c}}_{j}^{b} \cdot \overrightarrow{\mathbf{e}}_{i}
r_{ij}=softmax(s_{ij})=\frac{exp(s_{ij})}{\sum_{j=1}^K{s_{ij}}},即计算每个样本对聚类中心的倾向关系
\begin{array}{c}
\overrightarrow{\mathbf{c}}_{j}^{b}=\operatorname{norm}_{2}\left(\sum_{i=1}^{n} r_{i j} \overrightarrow{\mathbf{e}}_{i}\right), \\
\operatorname{norm}_{2}\left(\overrightarrow{\mathbf{c}}_{j}^{b}\right)=\frac{1}{\left\|\overrightarrow{\mathbf{c}}_{j}^{b}\right\|_{2}} \overrightarrow{\mathbf{c}}_{j}^{b},\left\|{\overrightarrow{\mathbf{c}_{j}}}^{b}\right\|_{2}=\left(\sum_{j=1}^{K}\left|\overrightarrow{\mathbf{c}}_{j}^{b}\right|^{2}\right)^{\frac{1}{2}} .
\end{array}- 每次更新的分布中心都继承自上一轮batch,并使用指数加权移动平均得到这轮更新后的分布中心
\overrightarrow{c_j}^b=norm_2(\beta * \overrightarrow{c_j}^{b-1}+(1-\beta) * \overrightarrow{c_j}^b)
2.4 多分布网络
本文采用常见的多分支网络结构,包含共分享信息的分支和特定簇的分支,即以往我们将每个场景分到不同的分支,这里就是把不同的聚类分到不同的分支。
共享信息的分支的参数为
W_s,聚类相关的分支对应的参数为
W_j,则最终第j个聚类对应的分支的参数为
W_m=W_s \otimes W_j,
\otimes表示主元素相乘,然后得到预测结果
\hat{y}=sigmoid((W_m)^{\top}x_i),然后使用交叉熵损失函数
3.结果
image.png
4.总结
本文主要是针对多场景问题提出的方法,通常我们是认为分组,分场景,然后进行建模,那本文是通过分布进行聚类,自动将M个业务场景的数据分为K类,然后进行多场景建模。整体的流程和常规聚类类似,实验结果看着提升也不是特别明显,但是感觉是一个不错的思路吧。