向AI转型的程序员都关注了这个号👇👇👇
机器学习AI算法工程 公众号:datayx
1、引言
对于预测性的系统来说,特征工程起到了至关重要的作用。特征工程中,挖掘交叉特征是至关重要的。交叉特征指的是两个或多个原始特征之间的交叉组合。例如,在新闻推荐场景中,一个三阶交叉特征为AND(user_organization=msra,item_category=deeplearning,time=monday_morning),它表示当前用户的工作单位为微软亚洲研究院,当前文章的类别是与深度学习相关的,并且推送时间是周一上午。
传统的推荐系统中,挖掘交叉特征主要依靠人工提取,这种做法主要有以下三种缺点:
1)重要的特征都是与应用场景息息相关的,针对每一种应用场景,工程师们都需要首先花费大量时间和精力深入了解数据的规律之后才能设计、提取出高效的高阶交叉特征,因此人力成本高昂;
因此自动学习特征间的交互关系是十分有意义的。目前大部分相关的研究工作是基于因子分解机的框架,利用多层全连接神经网络去自动学习特征间的高阶交互关系,例如FNN、PNN和DeepFM等。其缺点是模型学习出的是隐式的交互特征,其形式是未知的、不可控的;同时它们的特征交互是发生在元素级(bit-wise)而不是特征向量之间(vector-wise),这一点违背了因子分解机的初衷。来自Google的团队在KDD 2017 AdKDD&TargetAD研讨会上提出了DCN模型,旨在显式(explicitly)地学习高阶特征交互,其优点是模型非常轻巧高效,但缺点是最终模型的表现形式是一种很特殊的向量扩张,同时特征交互依旧是发生在元素级上。
微软亚洲研究院社会计算组提出了一种极深因子分解机模型(xDeepFM),不仅能同时以显式和隐式的方式自动学习高阶的特征交互,使特征交互发生在向量级,还兼具记忆与泛化的学习能力。
论文地址 https://arxiv.org/pdf/1803.05170.pdf.
相关阅读
1.现在诸如DeepFM和Deep&Wide等模型都可以自动学习隐式的高维交互特征,并结合了低维特征,但是有一个缺点就是它们的高维特征都是在bite-wise的层面上进行交互的。本篇论文提出了一种压缩交互网络(Compressed Interaction Network(CIN)),能够学习显式的交互特征并且是在vector-wise的级别,CIN带有一些CNN和RNN的特点,最终作者将整个模型命名为"eXtreme Deep Factorization Machine(xDeepFM)"。
2.本文提出的模型有两个优点:
能够显式的学习有明确边界的高维交互特征
能够学习隐式的低维和高维特征
个人理解这里作者对implicit和explicit的理解是交互特征的维度是否明确,在这里翻译为隐式和显式。
介绍
1.简单介绍了单值离散特征和多值离散特征,然后介绍三个手动提取交互特征的缺点:
挖掘出高质量的交互特征需要非常专业的领域知识并且需要做大量的尝试,很耗时间。
在大型的推荐系统中,原生特征是海量的,手动挖掘交叉特征几乎不可能。
挖掘不出肉眼不可见的交叉特征
2.然后介绍了经典的FM模型,用提取隐向量然后做内积的形式来提取交叉特征,扩展的FM模型可以提取随机的高维特征,但是主要的缺陷是:
会学习所有的交叉特征,其中肯定会包含无用的交叉组合,另外一篇论文指出引入无用的交叉特征会引入噪音并降低模型的表现。
3.介绍了引入了DNN的组合模型,"Factorisation-machine supported Neural Network (FNN)",它在DNN之前使用了预训练的field embedding。
4.介绍了PNN(Product-based Neural Network),在embedding layer和DNN Input之间插入了一层product layer,不依赖于pre-trained FM。
5.FNN和PNN的缺点都是忽略了低维交互特征,Wide&Deep和DeepFM模型通过混合架构解决了这种问题,但是它们同样存在缺点:
它们学习到的高维特征是一种implicit fasion,没有一种公式可以明确推论出最终学习出来的交叉特征到底是多少维的
另一方面,其DNN部分是在bit-wise的层面下进行学习的,而经典的FM架构是在vetor-wise层面学习的
6.本文提出的方法基于DCN(Deep & Cross Network)模型,其目标是有效率的捕捉到边界明确的交叉特征。
Embedding Layer
介绍一些基于"univalent","multivalent"进行embedding的基础知识,这里不介绍了:
这种架构是bit-wise层面的,意思是说,即使是同一个filed embedding,不同的element之间也会互相影响。
PNN和DeepFM基于上面的缺点进行了改进,除了DNN component,还添加了two-way interation layer到架构中,这样就既有vector-wise也有bit-wise的component了。PNN和DeepFM的区别就是DeepFM是把product layer直接作为结果连到输出层,而PNN是把product layer放在DNN和embedding layer之间
Explicit High-order Interactions
这里主要介绍了Cross Network(cross net)也是本文主要借鉴的一种模型,下面是该模型的架构:
通过推导可以看出其实**每一个隐含层都是x0的一个scalar multiple,**这当然不是代表隐含层是x0的线性表达,只是说因为每一层原生x0都会参与计算,因此对x0非常敏感。但是其缺点为:
crossnet的输出是一种特殊形式,即x0的scalar multiple
交互特征仍然是bit-wise层面的
本论文设计了一种新的cross network, 称为Compressed Interaction Network (CIN), 设计的时候主要考虑了下面三个方面:
交互特征是在vector-wise层面的(主要基于crossnet改进了这点)
高维交互特征是显式的
网络的复杂度不会因为交互层级的增加而增加
下面介绍了一些在CIN的中的概念:
既然在CIN中是vector-wise层级的,那么每一个unit是一个vector,因此field embedding的输出是一个mxD的矩阵(D:embedding size,m:filed size),CIN的第k层是一个Hk x D的矩阵(Hk代表的是CIN中每一层的向量数量,H0=m),下面是第CIN第k层的h-emb的计算公式:
图(a)和(b)表示了如何从这一层的隐藏层(Hk x D)和X^0层(m X D)来产生下一层隐藏层的(Hk+1 x D),图示所示计算方法是为了更好的展现为什么模型有CNN的思想,先通过X0和Xk的第i列做一个outer product(matrix multiplication)得到一个Hk x m的矩阵(0<=i<D), 然后W就像是CNN中的filter,来过滤产生每个feature map的第i列,这样CNN中的"compressed"在CIN中就指代 Hk x D矩阵压缩为Hk+1 x D矩阵。
需要注意的是,**CIN的输出是除了X0以外每一层的feature map的sum pooling横向拼接的结果。**然后根据所需要进行的任务套一个激活函数就行了,比如sigmoid:
总结
对于这种高维稀疏特征来说,基于FM思想的模型例如DeepFM,Deep&Wide,PNN等比LR不知道高到哪里去了
并不是混合模型就一定好,但是单用DNN component一般效果比较差
这种用于高维稀疏特征的混合模型一般在比较浅层的比如2-3层的网络结构下会取得最好的效果
下面对本论文提出的模型进行了复现
项目下载地址
关注微信公众号 datayx 然后回复 fm 即可获取。
AI项目体验地址 https://loveai.tech
模型架构 = FM + CIN + DNN
1.数据准备
训练集和测试集需为.csv文件
支持数值型特征映射为embedding,也支持数值型特征直接作为DNN输入
支持多值离散特征的处理,可自行配置为sum or mean,分隔符请用"|"
cat特征需要自行先用labelEncoder转换一下
具体配置在Config.py文件中,也可结合ex_data中的例子作为参考。
转换完成后的训练数据示例:
2.模型训练
先在Config中指定单值离散,多值离散,连续型特征
默认激活函数"relu",默认optimizer"Adagrad"
默认DNN网络结构 [128,64,32]
默认CIN卷积核维度 [10,10,10] ,输出维度 [1]
默认使用 DNN + CIN + FM,可在Config中配置
默认建立vocabulary的最低词频 10
3.模型实验
- Batch_size : 4096 , epochs: 2000
- 指标为"logloss"
- 数据为 “2018中国高校大数据挑战赛” 初赛数据
模型基于DeepFM加入了CIN component (压缩交互网络),对原有的结构进行了vector-wise和边界明确的交互填充
优点:表达能力更强,可以发掘出vector-wise的交互特征,精度更高
缺点:训练速度变得很缓慢
阅读过本文的人还看了以下文章:
不断更新资源
深度学习、机器学习、数据分析、python
搜索公众号添加: datayx
长按图片,识别二维码,点关注
AI项目体验
https://loveai.tech