参考论文:Scenario-Adaptive Feature Interaction for Click-Through Rate Prediction 链接:https://dl.acm.org/doi/pdf/10.1145/3580305.3599936 代码地址:https://github.com/qwerfdsaplking/SATrans 会议:KDD 2023
近期研究已证明:利用统一的多场景模型相比单场景模型更适用于场景复杂的大规模商业平台。然而大部分多场景模型都面临场景区分建模不充分、随着场景数量增加效果下降,缺乏可解释性等问题。并且现存的所有多场景模型在对各场景区分建模时,都没有考虑过显示特征交互问题,这限制模型的表达能力且影响到模型性能。
本文针对多场景模型内的特征交互问题,提出场景自适应特征交互框架SATrans(Scenario-Adaptive Feature Interaction framework)。SATrans将场景间的差异建模为特征相关性的区别,基于Transformer结构学习高阶特征交互,并将场景信息嵌入self-attention结构中以不活跨场景的分布变化。
SATrans将基于self-attention的交互层堆叠成骨干网络,并由两个场景特定的组件组成:(1)场景编码器,将场景特定的特征转换为固定长度的embedding表征向量;(2) 场景自适应交互层(SAI),通过场景自适应自注意力机制进行高阶特征交互。整体结果如下图
对于给定的输入特征集合
,将其转换成稀疏特征向量:
,其中M代表场景特定的特征数量,N代表所有特征数量。之后先将场景特定特征
喂入场景编码器以获得场景embedding表征s,然后将所有特征x投影到和embedding layer相同的低维空间并获得dense embedding表征e。接着是多场景自适应交互层,在场景embedding的指导下通过自注意力机制组合高阶特征。通过堆叠L交互层,可以对(L + 1)阶的场景自适应特征交互进行建模。
最后连接交互层的输出,通过线性层和sigmoid函数来预估CTR。而SATrans的核心是如何设计有效的场景编码器和场景自适应交互模块。
给定场景特定特征
,场景自适应编码器用于将场景特征编码成固定长度的embedding表征,以指导每个SAI层中的特征交互,其中维度𝐿取决于SAI层的具体结构。为了提高场景embedding的质量,本文考虑三种信息来源:1)场景专业信息,区分不同的场景; 2)共享知识,编码场景之间的共性; 3)结构位置,表示自注意力网络中涉及场景嵌入的位置(例如,查询或关键嵌入时当前层的深度)。本文针对不同的信息来源提出了三种类型的实现。
**独立嵌入(IE,Independent Embedding)**:此方法首先将连接的场景特征稀疏向量
转换为one-hot稀疏特征
,然后使用embedding矩阵将其投影为低维向量 s。这种做法将所有场景特征字段的每种可能组合视为一个场景,并使用独立的embedding来表示每个场景,这意味着场景之间不存在知识共享。然而当特征组合数量增加时,embedding矩阵可能会很大,这导致参数效率低下且不灵活。
编码网络(EN, Encoding Network): 为了更灵活地编码场景特征并嵌入共享知识,本文考虑利用共享编码网络来转换场景特征。 对于每个场景特征字段,稀疏特征向量首先通过embedding矩阵映射到低维,连接embedding向量并通过非线性激活层,再将此向量输入到共享编码网络来获得最后的场景embedding。
具有结构位置ID的编码网络(ENP, Encoding Network with Structural Position IDs): 除了场景特征之外,还将位置ID作为额外特征,为 SAI 层中的每个结构位置生成唯一的场景embedding。
由以上,获得了相同低维空间的特征表征e,以及交互层中每个位置的场景表征s。可以基于此对场景自适应高阶组合特征进行建模。假设第 i 个特征的输入表示为 hi,并且第一个交互层中的 hi=ei。首先引入多头自注意力机制来确定每个特征组合的重要性。以第i个特征为例,计算第i个特征与第j个特征在相关自注意头h的交互定义为:
问题变成了如何设计场景自适应注意力函数,文中提出下图三种方式
Ali-CCP 和 Ali-Mama 数据集上的AUC表现
WeChat-MS 上的表现