图片来自网络
文章作者:沈伟臣 阿里巴巴
编辑整理:Hoh Xil
内容来源:作者授权发布
出品社区:DataFun
注:欢迎转载,转载请在留言区内留言。
导读:本文由来自昆士兰大学,格里菲斯大学和国立交通大学联合发表在 ICDE2020 上的一篇文章,题目为:
Sequence-Aware Factorization Machines for Temporal Predictive Analytics
主要提出了一种同时结合了特征交互中的顺序依赖和保持 DNN 的非线性表达能力的 FM based 模型 SeqFM,在建模特征交互和动态行为序列时使用了多视图的自注意力机制。
下面将从论文背景,模型结构,实验对比以及个人总结几个方面为大家介绍这篇文章~
——背景和动机——
背景
在广告和推荐场景中,通常存在着大量的稀疏类别型特征变量。基于因子分解机的方法 ( DeepFM,DCN,xDeepFM 等 ) 能够有效的捕获稀疏类别变量之间的高阶特征交互,减轻了算法工程师手工构造交叉特征的压力。 然而,除了类别特征和稠密值特征外,还有大量动态的行为序列类型的特征。现有的基于 FM 的模型在处理这样的序列时,大多忽略了行为之间的顺序,即将其当作一个行为集合进行建模处理,因此无法有效捕获动态行为序列特征的序列依赖性和内在的模式。 因此提出 Sequence-Aware FM 模型,通过建模数据中的序列依赖关系来对蕴含时序特征的数据进行建模分析。
举例说明 SeqFM 与传统的 FM-based 方法的区别
本文使用了一个简单的例子来说明 SeqFM 相比于传统的 FM based 方法的改进,假设用户购买过 [裤子,外套,显示器,鼠标]。
由于目前大部分 FM-based 模型大多假设了序列数据是无序的,即这些属于动态特征的序列中的每一个 item 都被同等的对待了,因此模型很难区分当用户接下来会购买腰带还是键盘,因为序列集合中都有和这两个相似的商品,动态特征的序列属性难以被捕获。
SeqFM
如上图所示,SeqFM 使用了一个多视图学习机制。 由于静态特征和动态特征中包含了不同的信息,使用三个不同的视图来进行特征交互的建模。
由于使用 CNN 或者 RNN 来进行序列建模计算时间和存储需求都较高,SeqFM 在每个视图内部采用了 self attention 机制。
对于动态视图和交叉视图,使用 mask self attention 单元分别保留动态特征序列的时间方向属性并屏蔽不相关的特征交互。
在通过 multi view self attention 机制编码特征之间的高阶交互后,使用一个参数共享的残差连接神经网络从特征交互中提取更多的隐含信息,最后输出模型得分。
——Sequence-Aware FM 模型——
这里特征划分为两大部分,静态特征 ( 如用户画像特征,用户性别 ) 和动态特征
( 如用户历史上有过行为的商品 )。
这里需要注意的是动态特征是按时间顺序构造的。在特征矩阵
中,若行号 i<j 那么特征
对应的行为总是发生在
对应的行为之前。
使用表示动态特征序列的最大长度,如果实际长度大于
,那么取最近的
个特征。如果少于
,那么在矩阵
中从上到下 ( 从行为发生时间远到近 ) 填充零向量。
SeqFM 的形式化表示为:
其中是全局偏置项,中间
为对应的一次项线性特征
为本文提出的多视图自注意力因子分解机制。
下面详细介绍 SeqFM 模型的细节。
1. Embedding Layer
将特征划分为静态特征和动态特征
,分别经过 embedding 后得到
和
。
2. Static View With Self-Attention
其中
,分别是由输入的 embedding 矩阵
经过线性变换得到。
这里关于 self attention 原理和实现有疑问的同学可以参考我之前写的另一篇文章,里面有详尽的说明:
AutoInt:使用 Multi-head Self-Attention 进行自动特征学习的 CTR 模型
https://zhuanlan.zhihu.com/p/53462648
3. Dynamic View with Self-Attention
在 Dynamic View 中,由于个动态特征中天然具有序列依赖关系,第 i 个动态特征 (
) 只会和处于位置
的前序特征发生交互。
也就是说特征交互在 dynamic 视图中是具有方向性的,只存在前向特征交互。 为了实现这样的功能,采用了 masked self attention 机制
其中 是一个常量矩阵,其作用是只允许动态特征
和
的交互发生在 j≤i 的时候。
对于矩阵中的元素,当且仅当 i≥j 的时候
取0,其余均取
。
通过添加注意力 mask 矩阵,对于第 i 个特征,它与第 i+1 个特征开始的后面的特征交互分数为
,第 i-1 及其前面的特征交互分数保持不变。
因此经过 softmax 层后,能够确保第 i 个特征只和相对于它自身的历史特征 j≤i 存在非0的交互得分。
4. Cross View with Self-Attention
这里的 是由
和
垂直拼接而成的,与 Dynamic View 不同的是,这里的 attention mask 矩阵的构造是这样的
cross view self-attention mask 屏蔽了相同类别特征内部的特征交互,只允许跨类别的特征交互 ( 静态特征和动态特征之间 )。
5. Intra-View Pooling Operation
在经过三个视图得到特征交互的表示后,将这些表达向量输入到 intra-view pooling layer 中,这一层将所有的交互向量压缩成一个向量:
其中 表示每个视图内部的特征组个数,
为视图内第 i 个特征向量,
是经过池化操作后得到的压缩表示向量。
6. Shared Residual Feed-Forward Network Work
这里使用一个共享参数的残差全连接神经网络,还使用了 Layer Normalization 和 Dropout 等训练技巧。
残差连接可以将低层的特征传递高高层。
Layer Normalization 归一化可以让网络的训练过程更加稳定以及加速训练。
Dropout 起到了一定的正则化和集成学习的作用。
7. View-Wise Aggregation
在输出得到最终的 logit 之前,通过水平拼接三个视图产生的隐向量得到最终的聚合向量:
这里得到的 ,是一个一维的长向量。
8. Output Layer
通过一个向量内积操作得到最终的得分:
——实验对比——
1. 离线实验
作者在不同的任务和不同的数据集上均进行了大量实验,验证了本文提出的 SeqFM 的有效性,也验证了本文提出的 SeqFM 在处理动态序列特征时相比于传统的基于 FM 的方法简单的将所有动态特征作为普通无序集合特征处理对于时序预测分析更有帮助。
实验选取的 baseline 方法对比目前较为主流的方法,如 Wide&Deep,NFM,xDeepFM 及 DIN 等,在分类任务中选取了 recsys2019 挑战赛和淘宝的公开数据集,具有一定代表性。
分类任务
排序任务
回归任务
2. 关键组件的重要性
这里 SV,DV,CV 分别代表本文中提出的三种不同的视图,RC 代表残差连接,LN 代表 Layer Normalization。
这里 ↓ 标记里严重的 ( 相对5% ) 指标相对下降。
去掉 Static View 下跌很容易理解,相当于丢失了很多基础的特征组合。
去掉 Dynamic View 后在分类任务中有非常严重的指标下跌 Trivago ( 10% )和 Taobao ( 12% )。作者给出的解释是这些数据集中包含大量的点击行为日志,这些动态特征序列携带着每个用户的长期偏好信息。
去掉 Cross View 后的下跌说明了 Cross View 中静态特征和动态特征之间的自注意力机制对于模型的最终表现是有贡献的。
去掉 Residual Connections 说明了残差连接确实有助于将低层的信息继续传递给高层并且得到有效的保留。
去掉 Layer Normalization 说明特征的归一化会带来更好的结果。
——个人总结——
本文提出的 SeqFM 是第一个同时结合了特征交互中的顺序依赖和保持 DNN 的非线性表达能力的 FM based 模型,之前的工作大多侧重于建模特征的高阶交互或捕捉动态行为序列中蕴含的信息。
SeqFM 中的 Static View 应该可以替换成其他特征交互组件,如 FM,CrossNet 及 CIN 等,具有一定扩展性。
相比于传统的直接将序列特征拼接静态特征输入全连接网络,SeqFM 分别在动态序列特征内部和静态特征与动态特征之间进行了特征交互,保留了更多的信息。
建模动态特征使用 mask self-attention,相比于 rnn basd 方法提升了计算效率也避免了可能存在的长期依赖问题。不过没有将 SeqFM 和一些 rnn basd 方法进行对比。
本文不是第一个使用 self attention 对序列建模的方法,没有将 SeqFM 和使用 self attention 的其他序列建模方法进行对比实验。
Shared FFN 在减少模型参数的同时不知道相对于非共享参数对模型效果的影响如何,这里如果有进行过对比就更好了。
——参考资料——
Sequence-Aware Factorization Machines for Temporal Predictive Analytics
https://arxiv.org/abs/1911.02752
作者在论文里给出了代码链接,不过访问好像问题,大家可以先关注下 deepctr的代码仓库,之后我会更新在这里:
https://github.com/shenweichen/deepctr
——作者介绍——
沈伟臣,阿里巴巴算法工程师,硕士毕业于浙江大学计算机学院。对机器学习,强化学习技术及其在推荐系统领域内的应用具有浓厚兴趣。
对作者感兴趣的小伙伴,欢迎关注作者的个人公众号 [ 浅梦的学习笔记 ]:
——END——
文章推荐:
Graph Neural Network:GCN 算法原理,实现和应用
DataFun:
专注于大数据、人工智能领域的知识分享平台。
一个「在看」,一段时光!👇