基于特征
Last updated
Last updated
推荐里的特征向量往往是高维稀疏的,例如CF中feature vector = user_ID + item_ID。对于这些高维稀疏特征来说,抓取特征特征之间的组合关系非常关键:
二阶特征组合:
users like to use food delivery apps at meal-time
app category和time之间的二阶组合
三阶特征组合:
male teenagers like shooting games
gender, age, 和app category之间的三阶组合
对于feature-based的方法来说,能抓取特征的交互作用和关系非常重要。
这个模型主要是将LR和DNN一起联合训练,注意是联合训练,一般的ensemble是两个模型是单独训练的。思想主要是:
LR擅长记忆;DNN擅长泛化(包括抓取一些难以人工设计的交叉特征)
LR部分需要大量的人工设计的feature,包括交叉特征
这篇论文和wide&deep的主要差别是加了残差连接:
这篇论文主要想说明两点:
如果只有raw feature,如果没有人工设计的特征,DNN效果并不够好
如果没有很好的初始化,DNN可能连FM都打不过。如果用FM的隐向量来初始化DNN,则DNN的效果比FM好
这个模型主要是,将FM里的二阶特征组合放到NN里,后面再接几层FC学习更高阶的特征组合。具体方法是:两两特征进行组合,即进行element-wise dot,得到一个K维的向量,然后所有组合的K维向量进行加和,得到一个K维的向量,往后再接几个FC,模型结构图如下:
效果上,该模型完爆了之前没有手工做特征组合的模型和FM:
这个模型主要是针对FM的不同特征的组合的结果的简单加和,变成加权平均,用attention来求权重(有利于提取重要的组合特征;NFM是使用MLP来学习不同特征组合的权重,且没有归一化的过程):
模型的整体结构图如下:
效果上,不带隐层的AFM就能干掉带一层隐层的NFM。如果增加隐层,AFM的效果能进一步提升:
这一篇论文主要是将wide&deep的LR替换成FM,FM可以抓取二阶的特征组合关系,而DNN可以抓取更高阶的特征组合关系:
对上述的feature-based的方法做个简单总结:
特征交互对matching function learning非常关键
早期的对raw feature进行交叉,对效果提升非常有用:
wide&deep是手工进行组合
FM-based的模型是自动进行组合
用DNN可以用来学习高阶的特征组合,但可解释性差。怎么学习可解释性好的高阶组合特征,依然是一个大的挑战。