作者:哈哈哈哈哈咩咩 | 来源:互联网 | 2023-08-11 16:04
一、CTR(ClickThroughRate,点击率)点击率(click-throughrate,CTR)是点击特定链接的用户与查看页面,电子邮件或广告的总用户数量之比。它通常用于
一、CTR(Click Through Rate,点击率)
点击率(click-through rate, CTR) 是点击特定链接的用户与查看页面,电子邮件或广告的总用户数量之比。它通常用于衡量某个网站的在线广告活动是否成功,以及电子邮件活动的有效性,是互联网公司进行流量分配的核心依据之一。
第一列Clicked是类别标记,标记用户是否点击了该广告,而其余列则是特征(这里的三个特征都是类别类型),一般的,我们会对数据进行One-hot编码将类别特征转化为数值特征,转化后数据如下:
经过One-hot编码后,特征空间是十分稀疏的。特别的,某类别特征有m种不同的取值,则one-hot编码后就会被变为m维,当类别特征越多、类别特征的取值越多,其特征空间就更加稀疏。
同时通过观察大量的样本数据可以发现,某些特征经过关联之后,与label之间的相关性就会提高。例如,“USA”与“Thanksgiving”、“China”与“Chinese New Year”这样的关联特征,对用户的点击有着正向的影响。换句话说,来自“China”的用户很可能会在“Chinese New Year”有大量的浏览、购买行为,而在“Thanksgiving”却不会有特别的消费行为。这种关联特征与label的正向相关性在实际问题中是普遍存在的,如“化妆品”类商品与“女”性,“球类运动配件”的商品与“男”性,“电影票”的商品与“电影”品类偏好等。因此,引入两个特征的组合是非常有意义的。
如何表示两个特征的组合呢?一种直接的方法就是采用多项式模型来表示两个特征的组合,
回想矩阵分解,一个rating可以分解为user矩阵和item矩阵,如下图所示:
分解后得到user和item矩阵的维度分别为
对于上面的训练集,没有(NBC,Adidas)组合,因此,Poly2模型就无法学习到参数
对于第一条数据来说,FM模型的二次项为:
- For FMs, each feature has one latent vector, which is used to interact with any other latent vectors:
- For FFMs, each feature has several latent vectors, one of them is used depending on the field of the other feature:
3.1 FFM 数学公式
因此,FFM的数学公式表示为:
3.3 FFM使用技巧
在FFM原论文中,作者指出,FFM模型对于one-hot后类别特征十分有效,但是如果数据不够稀疏,可能相比其它模型提升没有稀疏的时候那么大,此外,对于数值型的数据效果不是特别的好。在Github上有FFM的开源实现,要使用FFM模型,特征需要转化为“field_id:feature_id:value”格式,相比LibSVM的格式多了field_id,即特征所属的field的编号,feature_id是特征编号,value为特征的值。
此外,美团点评的文章中,提到了训练FFM时的一些注意事项:
- 样本归一化。FFM默认是进行样本数据的归一化的 。若不进行归一化,很容易造成数据inf溢出,进而引起梯度计算的nan错误。因此,样本层面的数据是推荐进行归一化的。
- 特征归一化。CTR/CVR模型采用了多种类型的源特征,包括数值型和categorical类型等。但是,categorical类编码后的特征取值只有0或1,较大的数值型特征会造成样本归一化后categorical类生成特征的值非常小,没有区分性。例如,一条用户-商品记录,用户为“男”性,商品的销量是5000个(假设其它特征的值为零),那么归一化后特征“sex=male”(性别为男)的值略小于0002,而“volume”(销量)的值近似为1。特征“sex=male”在这个样本中的作用几乎可以忽略不计,这是相当不合理的。因此,将源数值型特征的值归一化到[0,1]是非常必要的。
- 省略零值特征。从FFM模型的表达式(3-1)可以看出,零值特征对模型完全没有贡献。包含零值特征的一次项和组合项均为零,对于训练模型参数或者目标值预估是没有作用的。因此,可以省去零值特征,提高FFM模型训练和预测的速度,这也是稀疏样本采用FFM的显著优势。
四、DeepFM
近年来深度学习模型在解决NLP、CV等领域的问题上取得了不错的效果,于是有学者将深度神经网络模型与FM模型结合,提出了DeepFM模型。FM通过对于每一位特征的隐变量内积来提取特征组合,最后的结果也不错,虽然理论上FM可以对高阶特征组合进行建模,但实际上因为计算复杂度原因,一般都只用到了二阶特征组合。对于告诫特征组合来说,我们很自然想到多层神经网络DNN。
FM的结构
DNN结构
DeepFM结构(FM和DNN的特征结合)
DeepFM的架构其实特别清晰:
- 输入的是稀疏特征的id
- 进行一层lookup 之后得到id的稠密embedding
- 这个embedding一方面作为隐向量输入到FM层进行计算
- 同时该embedding进行聚合之后输入到一个DNN模型(deep)
- 然后将FM层和DNN层的输入求和之后进行co-train
DeepFM目的是同时学习低阶和高阶的特征交叉,主要由FM和DNN两部分组成,底部共享同样的输入。模型可以表示为:
嵌入层的结构如上图所示,有两个有趣的特性:
- 尽管不同field的输入长度不同,但是embedding之后向量的长度均为k
- 在FM中得到的隐变量
从预训练,特征维度以及特征工程的角度进行对比,发现:
从实验效果来看,DeepFM的效果较好:
DeepFM的三大优势:
- 相对于Wide&Deep不再需要手工构建wide部分;
- 相对于FNN把FM的隐向量参数直接作为网络参数学习;
- DeepFM将embedding层结果输入给FM和MLP,两者输出叠加,达到捕捉了低阶和高阶特征交叉的目的。
五、NFM(Neural Factorization Machines)
NFM(Neural Factorization Machines)又是在FM上的一个改进工作,出发点是FM通过隐向量可以对完成一个很好的特征组合工作,并且还解决了稀疏的问题,但是FM对于它对于non-linear和higher-order 特征交叉能力不足,而NFM则是结合了FM和NN来弥补这个不足。
DeepFM 是用 Wide & Deep 框架,在 FM 旁边加了一个 NN,最后一并 sigmoid 输出。NFM 的做法则是利用隐向量逐项相乘得到的向量作为 MLP 的输入,构建的 FM + NN 模型。其中:
- Input Feature Vector层是输入的稀疏向量,可以带权
- Embedding Layer对输入的稀疏向量look up 成稠密的embedding 向量
- Bi-Interaction Layer将每个特征embedding进行两两做element-wise product,Bi-Interaction的输出是一个 k维向量(就是隐向量的大小),这层负责了特征之间second-order组合。
六、AFM(Attentional Factorization Machines)
AFM(Attentional Factorization Machines)是浙大(Jun Xiao, Hao Ye, Fei Wu)和新加坡国大(Xiangnan He, Hanwang Zhang, Tat-Seng Chua)几位同学提出来的模型。AFM 首先对 FM 做了神经网络改造,而后加入了注意力机制,为不同特征的二阶组合分配不同的权重。在传统的FM中进行特征组合时两两特征之间的组合都是等价的(只能通过隐向量的点积来区别),这里趁着Attention的热度走一波,因为AFM的最大的贡献就是通过Attention建立权重矩阵来学习两两向量组合时不同的权重。下面就是AFM的框架图:
从图中可以很清晰的看出,AFM比FM就是多了一层Attention-based Pooling,该层的作用是通过Attention机制生成一个
参考:
FM算法详解:https://blog.csdn.net/bitcarmanlee/article/details/52143909
FM计算:https://blog.csdn.net/shenxiaolu1984/article/details/78740481
CSDN, 推荐算法:https://blog.csdn.net/asd136912/article/details/78318563
CSDN,FM&FFM&DeepFFM:https://blog.csdn.net/john_xyz/article/details/78933253
美团,FM&FFM:https://tech.meituan.com/deep_understanding_of_ffm_principles_and_practices.html
知乎,Kaggle实战——点击率预估:https://zhuanlan.zhihu.com/p/32500652