标题:SAMD: An Industrial Framework for Heterogeneous Multi-Scenario Recommendation 地址:https://dl.acm.org/doi/pdf/10.1145/3580305.3599955 会议:KDD 2023 公司:蚂蚁 代码:https://github.com/yangli268038/SAMD
以往我们关注的多场景模型主要是针对数据分布相似的同质场景,平等地将知识迁移到不同场景中。本文关注不同场景之间的异构性,从而提出场景感知的模型无关元蒸馏方法SAMD。SAMD通过建模场景关系和异构知识提取,在异构场景中提供场景感知和模型无关的知识共享。
文末有省流版哦~
如图3所示,SAMD包含以下几个组件:场景相似性表征、场景感知元网络和异构知识提取。
首先获取各个场景的通用知识,因此基于各个场景的历史数据训练一个通用模型,即总的模型(白话说就是用所有数据先训练一个模型,如DNN),损失函数采用常规的交叉熵损失函数。
如前文所述,包含显示和隐式两种相似性表征。如图3所示,显式表征反映场景的固有属性,可以将其定义为场景的静态属性。用户连接的场景之间存在潜在的关系。场景-用户-场景的这种互补的潜在关系可以看作是一种隐含的相似性。(白话说:显示就是场景自带的,固有的属性;隐式就是通过用户连接反应的场景之间的关系)
给定当前场景的m个属性,则显示表征ER可以表示为下式,其中e为各个属性的embedding,表示拼接,W为权重,τ是激活函数,然后显示相似度可以通过衡量不同场景的显示表征ER来得到相似度。
为了充分利用隐含的相似性,通过通过swing算法构建场景和用户的关系。根据不同场景下共现用户的数量来衡量隐含相似度。如果场景i和j经常与同一用户交互,可能存在潜在的连接。为了缓解活跃用户带来的偏差,利用用户的权重因子来缓解活跃用户建立的链接的强度。场景之间i和j的相似性可以定义为下式,其中表示和场景i交互的用户的集合,w是活跃度权重,表示用户u访问场景的集合,α是平滑系数
通过对相似度Sim进行排序,可以得到对于场景i而言最相似的G个场景,然后可以计算隐式表征为下式,即将相似的G个场景的显示表征做池化和非线性化后得到隐式表征。
最后将显示表征和隐式表征拼接后得到最终表征
如图4所示,元网络首先使用基于场景表征的软聚类来挖掘场景之间的潜在关系。然后,元网络建立了场景和迁移策略之间的映射连接,指导异构知识的提取。
不同的场景之间会存在一些共性信息和一些差异性信息,单纯使用场景表征无法表达这些信息,软聚类用于挖掘不同场景之间的关系。令聚类个数为K,则聚类中心的表征矩阵为,然后将不同场景的表征映射到不同的聚类中,其中。然后,对每个emb做softmax归一化
经过softmax后,相当于得到了当前场景属于不同聚类的概率,然后基于这些概率对聚类中心进行加权求和得到当前场景的聚类表征,公式如下,
在得到场景emb和聚类表征后,元函数以这两个为输入得到迁移策略,公式如下,其中g()为全连接元网络(白话说就是做维度变换),场景emb和聚类emb拼接后得到2d的维度,g()通过θ进行维度变化。为前面训练的通用模型的层数,为场景子模型i的层数,则进一步进行非线性变换和维度转换得到场景化i的迁移策略。
Note: 作者希望通过这种方式,在场景中不仅可以迁移通用模型中的公共知识,还可以基于场景关系迁移相似性信息,但问题是这边是否需要考虑不同场景的负向迁移问题。
与logits层的蒸馏相比,深度神经网络的中间特征包含更多的信息。因此,SAMD采用基于特征的蒸馏来利用通用模型中所有层的信息。基于特征的蒸馏的损失函数可以表示为下式,其中表示有层的场景i的子模型,为有层的通用模型, 表示迁移权重,表示子模型i的第m层,将模型某一层的输出转换成更易迁移的形式,如attention map,FSP矩阵等,L()为损失函数,如L1/L2或MMD等。
如图5所示,为了利用通用模型中所有层的信息,迁移权重w可以采用三种方式。
image.png
本文是针对多场景推荐提出的方法,主要的思路是在场景知识迁移的时候考虑不同场景之间的关系。