推荐精排之锋:FM的一小步,泛化的一大步

1728a47cb1e4159d5a7ac8e0107d3c4e.png

文 | 水哥
源 | 知乎

1.如果说LR是复读机,那么FM可以算作是电子词典
2.泛化就是我没见过你,我也能懂你,但是泛化有时候和个性化有点矛盾,属于此消彼长的关系
3.实践中的泛化往往来源于拆解,没见过组成的产品,但是见过各种零件,就能推断出很多的信息
4.FFM中,第二个F有时候不太重要,第一个F倒是一直很坚挺。field的设计包含了调参老师傅对业务的理解

这一讲我们要介绍的是因子分解机:Factorization Machine,及其初级的变形(还有一些虽然不是FM这个形式,但是其内核类似,会放在后面)。如果说LR是复读机,那么FM可以算是电子词典,提供一个查近义词(类似特征性质)的功能。FM初步具备了泛化能力,对于新的特征组合有很好的推断性质,它所需要的可学习参数也可以小于交叉特征很多的LR。在这个DNN的时代,FM的交叉性质也没有被完全替代,还能站在时代的浪尖上。

Factorization Machine[1]

在LR中,如果在sigmoid作用之前,我们可以把模型的形式看做:

这就是一个简单的线性形式。其中 就是一个bias项,是个数。 和之前在LR中的定义一样,就是特征。 是对应的权重。如果我们像上一讲讲得那样,通过设计交叉特征来体现非线性,模型的形式会变成:

这里就用 来给交叉特征(这里只涉及二阶的)做权重。

想要模型的能力强一些,自然需要设计出好的交叉特征。但是交叉特征的代价是比较大的,两个特征的交叉特征,可能的取值是平方级数量。设计的交叉特征太多,对模型存储带来了很大的挑战。另外一个很重要的问题是,其实这些权重之间没有任何联系,比如说有两个特征,一个是性别,一个是城市。推荐一个火锅,先遇到一个样本是男+重庆,结果是点击了,男x重庆这个二阶特征有权重了,下次再遇到一个女性样本,也是重庆,女x重庆的二阶特征却没有权重。可是从人的理解来说,吃不吃辣其实重庆这个特征占了很大的权重,难道我就不可以猜女x重庆也应该有一个较大的起始值才对嘛?

我们上面说的这种合理猜测,本质上是想要一种“泛化”。可以简单的理解为,我没见过这种组合,它的性质我也能猜的差不多。实践中想要泛化往往需要拆解,比如说现在有人类和猫两种生物,我们对人有一些认识,然后遇见了一个新的生物——喵星人,外形看起来差异很大,好像不太懂这种生物的特点是什么。这时候我们就可以做拆解,如果我们知道一些底层属性,比如猫也是细胞,组织这样构建起来的,我们就可以猜测它也要吃饭喝水。我们知道猫也有毛发,所以可以猜测这是为了保温的需求,那说明猫也有恒定的体温。这样一做拆解,就能分析出很多性质,哪怕喵星人我们是第一次见,也会有大概的认识。

而FM其实就是按照这种思路来处理稀疏数据的,FM假设,每一个特征 ,都存在一个“隐”的embedding和它对应,而二阶的特征交叉,不应该表达为两个特征直接的相乘,还应该包含他们的embedding的内积的作用:

这里的 就是上面所说的隐含的embedding。其实FM把特征的交叉做了一步分解,所以叫做“因子分解机”,

FM最大的特点是,并不对所有的交叉特征的结果准备 。假如我有两种特征,他们的所有可能分别是 和 种,按照naive的设计,权重总共就需要 个。现在每种特征只需要一个embedding(就是 ,每个embedding是 维,相当于权重是 个。当选择合适的k的时候(一般来说不会很大),所有需要优化的参数可以远远小于原先需要优化的参数。这个时候鲁棒性就很容易理解的提升了。这也就是为什么FM一直在强调可以应对稀疏场景的一个原因。

现在有了 之后,我们想要的泛化性质有改善吗?像上面的例子,男+重庆这个样本给出了 男 和 重庆 ,由于存在点击,这两个embedding被拉近了一些。而 女 可能在别的组合中被训练过了,这样 女 和 重庆 做内积,可以得到一个非零的结果,那对于没见过的这种组合其实就是有指导意义的,而如果是在LR里面,这个交叉项的权重此时还是0呢。

FM有一个复杂度问题,也是这篇文章的一个卖点,经常出现在面试中。下面我们也会稍微提一下这个点。将二阶项重新写一下:

其中第一个等号可以这样理解:把 和 写成一个二维矩阵,我们要的是上三角矩阵。那么他就等于全部的矩阵,减去中间对角线之后除以2.后面的就是很简单的形式上的变化了。到了最后这里,计算圆括号中的一个小sum需要用的复杂度是 ,后面也是。外面的sum乘完,总共是 的复杂度。

但是,需要提醒的是,这个点知道就行了,意义不大。实践当中出现比较多的是下面要讲的FFM,当我在所有要交叉的项里面挑选一个子集的时候,上面的推导就不能继续用了。时间复杂度又会回到 。而且纠结于这里的时间复杂度在当前这个DNN一统江湖的现状下也没啥必要。

FM的文章里很有意思的是,它一直以SVM作为“假想敌”,一直在强调SVM有哪些缺点,而FM有哪些优点。这和当时的环境有很大关系,因为在那个年代SVM的地位是比较统治的。但是现在回头想想,

为什么不(或者我们很少见到)使用SVM做点击率预估?

个人的答案是,SVM是一个两阶段的方法,实际上是有了特征为基础,再去拟合分类面。而LR和FM则不是,我们与其说是在学习特征的权重,倒不如可以把这个权重就看做特征本身。在我们online学习的过程中其实如何得到特征的表示是不明确的。如果想使用SVM,没有一个既定的特征表示,用SVM就很别扭。另外,随着新样本的加入,如何移动分界面也是一个需要解决的问题。我查到有一些文章试图在推荐场景下使用SVM,但是都没有给出特别漂亮的形式。

FFM[2]

如果要说FM有什么缺点,有一个是很显而易见的,就是我们可能不需要每两个特征之间都交叉。但是另一个点很少有人提:FM这个点积形式其实带来了一点限制,两个交叉的embedding会变得越来越相似

就以FFM论文中的例子,我们有3个embedding需要相互交叉:出版商ESPN,商家Nike,性别男。按照FM的设计,如果ESPN和Nike经常一起出现贡献一个正样本,那他两的embedding 是会变的像的,这是因为交互形式是点积。同理Nike和男同时出现,这两个embedding也应该长得像才对。但是这时候就有问题了,有可能ESPN不应该和男的embedding长得像?或者说,现在这三个embedding被捆绑了,互相之间会有拉扯,如果ESPN和男的embedding在实际中长得其实不像,Nike的embedding该往那边走呢?

所以FFM引入了一个“field”的概念(可以理解为“域”)来解决这个问题,说白了就是每一个特征都准备多套的embedding,然后在一个合适的field里面,我就用这个域下面的embedding来做交叉。参数的数量被推高了很多,但是同时自由度也大了很多,没有了上面拉扯的问题。

要注意FFM还有一个很大的不同是,在交叉的时候放到哪个域里面,这个操作是手动指定的,更进一步地,允许哪些特征来交叉,也是可以手动指定的。所以在实践中几乎没有人憨憨的复原FM那样任意两个特征之间都能交互,而是选择人认知中需要交叉的特征来交叉。

总结一下,FFM与FM有两点不同,第一,是人为手工挑选交叉的对象。第二,每一个field里面是一套新的embedding。

DeepFM[3]

DeepFM是一个很简单的模型,也是把FM往DNN中结合的一个非常直观的实现。直观到什么程度呢?直观到文章中花了不小的篇幅来区分DeepFM,FNN,PNN,Wide&Deep这几个模型的区别,也说明大家思路是很像的(作者不要来打我。。。)

43047d164fe90ff0adecaa3bceba5648.png

DeepFM分为两个部分,上图中是FM部分,这里的实现完全是一个完整的FFM。+号那里,表示的是FM中的一阶项,就是把各个 加起来。从field这里到上面的dense embedding就是从 映射到 的过程,乘号就是原来的内积,最后把所有结果加起来,就是FM这部分的输出。

56cda2da5853a66a01ad350ea17c7ffb.png

上面是deep部分,也就是一个MLP,在进入DNN阶段时,都需要把id特征转化到embedding上。实践中这是通过embedding look-up table来实现的。每一个特征的dense embedding,要拼接起来,再作为DNN的输入。在最后,把两边的结果加起来,就是DeepFM的最终形式:

f39007b9cb516fb1c2eeed43c5b83ec3.png

从图上能看出来,FM部分和DNN部分的embedding其实是share的。

虽然这一讲给FM带了很高的帽子(泛化性),但是原始形式还是太死板了。既然我都有了DNN了,为什么还需要两个交叉的embedding真的做内积,然后得到一个数呢?我不能直接用embedding做element-wise的乘法,就算做交叉了呢?其实我们想得到这个点积的结果是次要的,FM的精髓还是在特征的交互上。在下一讲,我们就可以看到以交叉作为重点,能推出怎么样一个花花的世界。

下期预告

推荐系统精排之锋(5):形变神不变,花花的FNN/PNN/ONN世界

往期回顾

  1. 召回 粗排 精排,如何各司其职?

  2. 拍不完的脑袋:推荐系统打压保送重排策略

  3. 简单复读机LR如何成为推荐系统精排之锋?

  4. 召回粗排精排-级联漏斗(上)

  5. 召回粗排精排-级联漏斗(下)

  6. 推荐系统精排:看阿里妈妈再试线性模型

8da4db46609b0e364de009fd3d0fa2fd.png后台回复关键词【入群

加入卖萌屋NLP/IR/Rec与求职讨论群

后台回复关键词【顶会

获取ACL、CIKM等各大顶会论文集!

0832bafa31d7bb07fcbb40f96fe6050e.gif 05030765ceba61cf2dcc1c3f4c2e4846.png

[1] Factorization Machines,ICDM,2010 https://www.csie.ntu.edu.tw/~b97053/paper/Rendle2010FM.pdf
[2] Field-aware Factorization Machines for CTR Prediction,RecSys,2016 https://www.csie.ntu.edu.tw/~cjlin/papers/ffm.pdf
[3] DeepFM: A Factorization-Machine based Neural Network for CTR Prediction,IJCAI,2017 https://arxiv.org/pdf/1703.04247.pdf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值