华为:Scenario-Aware Hierarchical Dynamic Network for Multi-Scenario Recommendation
背景与引言
问题:
在CTR任务预估中,多场景推荐系统可以加强信息的共享和改善总体的表现。但是现有的大多数方法只考虑了粗略的显式场景建模,这种显式场景建模依赖于人为规则定义的场景信息,如:场景ID,忽略了场景内部的数据差异,缺少考虑隐式场景的建模。
根据模型的结构,现有的多场景模型可以分为:
- Tower-based model基于塔模型的建模(如上图左)
- Dynamic Weight model动态权重建模(如上图中)
塔模型使用共享底层网络来对场景的共享信息来建模,再在上面堆叠子塔网络来捕获场景特定的信息。但是这种设计会相互孤立塔之间的联系,阻碍了场景之间的更加有细粒度的联系的建模,同时泛化性和兼容性差。
这种显式建模忽略了场景内部的数据差异性
比如不同的特征字段(如时间、年龄)中,样本数量和点击率的分布就会不一样,如上图所示,这就是一种隐式场景。这些特征会在某些维度数据分布相似的地方隐式地将数据分为很多子场景。模型需要更加精细地在这些隐式场景建模
解决:
为了解决这个问题,提出了Scenario-Aware Hierarchical Dynamic Network for Multi-Scenario Recommendation,可以自适应感知隐式场景的模式,联合进行显式和隐式的场景建模。
- 设计了一个基于动态权重的面向场景的模块来捕获场景特定的信息,包含一个显式场景识别模块,一个隐式场景识别模块。
- 使用场景识别多头注意力从不同的角度对隐式场景建模,学习隐式场景的重要信息。多个面向隐式场景的层同步部署。
方法:
分为三个部分
Scenario-Oriented Module
根据给定的场景情况,使用基于再参数化的方法来自适应产生参数。该Module在显式和隐式的场景下可以自适应建模。由几个线性层组成
分别是输出和输入,
分别是权重和偏置,L是线性层的数量
在不同场景下,权重和偏置是自适应产生的
SC是给定的场景条件,Reshape函数将SC分割成L个
Explicit Scenario-Aware Module
该部分为模型图中黄色部分。首先,模型需要对显式场景进行粗略的建模。
首先是对所有特征进行Embedding处理,包括场景和普通特征
接着对普通特征进行拼接并通过一个共享的FC层来实现降低维度和特征交互,得到一个全局表征
在左侧,场景embedding经过一个FC层来生成显式场景的条件信息
FC层的公式:
SC准备好后,将全局表征输入到**Scenario-Oriented Module,**再载入各层的权重参数到Module的FC层中,输出得到显式场景表征
Implicit Scenario-Aware Module
大多数隐式场景的产生都是由于特征结合,如拼接、求和等,这些结合并不一定对推荐有正向作用,所以识别正向的隐式模式是非常重要的。该模块提出一个多头注意力结构,如模型图中绿色部分,公式如下
显式场景的embedding通过FC层后再经过一个Reshape函数分割出每个头的权重
再经过一个softmax层进行权重归一化
,G是多头的数量,I是普通特征的数量。然后再把归一化权重与普通特征Embedding相乘
个人理解是从场景特征中普通特征在该场景下的分布权重,相乘改变embedding中各个特征权重,G代表G个隐式场景
再把IE通过FC层输出得到G个隐式场景的条件信息,最后通过Scene-Oriented Module得到隐式输出
Output Layer
对多头隐式输出拼接再经过FC层再接个Sigmoid就是输出的CTR预估
Loss就是BCE
总结与细节
动态权重模型重点是对特征对场景自适应并动态权重处理。
假设普通特征的embedding是(,100),W1是(100,8),b1是(,8),Es就先截出808的长度,然后reshape
**
动态权重模型重点是对特征对场景自适应并动态权重处理。
假设普通特征的embedding是(,100),W1是(100,8),b1是(,8),Es就先截出808的长度,然后reshape
如有侵权,请联系