一文看懂推荐系统:特征交叉01:Factorized Machine (FM) 因式分解机
提示:最近系统性地学习推荐系统的课程。我们以小红书的场景为例,讲工业界的推荐系统。
我只讲工业界实际有用的技术。说实话,工业界的技术远远领先学术界,在公开渠道看到的书、论文跟工业界的实践有很大的gap,
看书学不到推荐系统的关键技术。
看书学不到推荐系统的关键技术。
看书学不到推荐系统的关键技术。
王树森娓娓道来**《小红书的推荐系统》**
GitHub资料连接:http://wangshusen.github.io/
B站视频合集:https://space.bilibili.com/1369507485/channel/seriesdetail?sid=2249610
基础知识:
【1】一文看懂推荐系统:概要01:推荐系统的基本概念
【2】一文看懂推荐系统:概要02:推荐系统的链路,从召回粗排,到精排,到重排,最终推荐展示给用户
【3】一文看懂推荐系统:召回01:基于物品的协同过滤(ItemCF),item-based Collaboration Filter的核心思想与推荐过程
【4】一文看懂推荐系统:召回02:Swing 模型,和itemCF很相似,区别在于计算相似度的方法不一样
【5】一文看懂推荐系统:召回03:基于用户的协同过滤(UserCF),要计算用户之间的相似度
【6】一文看懂推荐系统:召回04:离散特征处理,one-hot编码和embedding特征嵌入
【7】一文看懂推荐系统:召回05:矩阵补充、最近邻查找,工业界基本不用了,但是有助于理解双塔模型
【8】一文看懂推荐系统:召回06:双塔模型——模型结构、训练方法,召回模型是后期融合特征,排序模型是前期融合特征
【9】一文看懂推荐系统:召回07:双塔模型——正负样本的选择,召回的目的是区分感兴趣和不感兴趣的,精排是区分感兴趣和非常感兴趣的
【10】一文看懂推荐系统:召回08:双塔模型——线上服务需要离线存物品向量、模型更新分为全量更新和增量更新
【11】一文看懂推荐系统:召回09:地理位置召回、作者召回、缓存召回
【12】一文看懂推荐系统:排序01:多目标模型
【13】一文看懂推荐系统:排序02:Multi-gate Mixture-of-Experts (MMoE)
【14】一文看懂推荐系统:排序03:预估分数融合
【15】一文看懂推荐系统:排序04:视频播放建模
【16】一文看懂推荐系统:排序05:排序模型的特征
【17】一文看懂推荐系统:排序06:粗排三塔模型,性能介于双塔模型和精排模型之间
提示:文章目录
Factorized Machine (FM) 因式分解机
前面的文章介绍了召回和排序模型,这节后面内容是特征交叉,在召回和排序中都会用到。
这节介绍最基础的factory machine缩写是FM。
几年前FM在召回和排序中都很常用,但是现在FM已经不太常用了,
但大家不妨了解一下FM的思想,知道某些年特征交叉是怎么做的。
在讲FM之前,我先讲一下线性模型,
设模型用到第一个特征,用D位向量X表示。
用下标表示向量中的元素,这是个线性模型,
公式中的B是偏移项,英文叫做bias。
第二项是对D个特征的连加,其中的W下标I表示每个特征的权重。
把线性模型的输出记作P,它是对目标的预估。
为了方便,这里我没有用激活函数。
如果做二分类,可以用sigmoid激活函数,这个线性模型有D加一个参数,We到WD是权重,D是偏移项。
不难看出,线性模型的预测是特征的加权和。
这个特征X1到XD只有相加,没有相乘,也就是说特征之间没有交叉。
在推荐系统的应用中,特征交叉是很有必要的,可以让模型的预测更准确。
这个公式用到了二阶交叉特征,这两项跟前面一样,就是个简单的线性模型,
区别在后面,这里的Xi乘以XJ是两个特征的交叉,前面的u下标ij是权重,
这种特征交叉的话,两个特征不仅仅能相加,还能相乘,这样可以提升模型的表达能力。
举个例子,假设特征是房屋的大小,还有周边楼盘每平米的单价
目标是估计房屋的价格,
仅仅用房屋的大小和每平米的单价的加权和是估不准房屋价格的。
如果做特征交叉,让房屋大小和每平米单价这两个特征相乘,就能把房价估的很准,
这就是为什么交叉特征有用。
如果有这个特征,那么模型参数量正比于d 平方,
大多数的参数是交叉特征的权重u,如果d比较小,这样的模型没有问题,
但如果d很大,那么参数数量就太大了,计算代价会很大,而且容易出现over fitting。
接下来我们讨论如何减少参数数量,我们重点关注交叉特征的权重,
小u可以把所有的权重小u ij组成矩阵大U
小u ij是大U的第I行第j列上的一个元素。
矩阵大U有d行和d列,d是参数的数量大,U是个对称矩阵,
可以对矩阵大U做低值近似,用矩阵大V乘以大V转置
来近似矩阵大U
矩阵大V有d行,跟大U一样,
大V有k列,k远小于d,K是个超参数,由我们自己设置,k越大,大V乘以大V转置就越接近矩阵大U。
我们看一下权重小u ij,可以把它近似成Vi和Vj的内积。
我在图中标注一下,uij是矩阵大U的第i行,第j列上的元素,Vi是矩阵V的第i行,Vj是矩阵大V的第j行。
小u ij约等于这两个向量的内积,
把交叉特征的权重小u ij近似成向量vi和vj的内积,
那么模型就变成了下面的factories machine
唯一的区别就是在这里FM用向量vi和vj的内积作为交叉特征的权重,
FM的参数数量是取成大V的大小等于bogO of kd。【数据结构中的复杂度表示方法】
k是超参数,远比d小
FM的好处在于参数数量更少,从big O of d square降低到了big O of kd,这样使得推理的计算量更小,而且不容易出现过拟合。
FM的原理很简单,我已经讲完了。
最后总结一下,FM是线性模型的替代品,凡是能用线性回归、逻辑回归的场景都可以用FM
就是在线性模型后面加上交叉项。
FM使用二阶交叉特征,因此模型的表达能力比线性模型更强,
尤其是在推荐系统中,交叉特征非常有用。
FM的效果显著比线性模型好,简单粗暴。
使用二阶交叉特征的话,参数数量是be goto square d。
特征数量FM的好处在于减少了参数数量,通过把小u ij近似为向量ui和vj的内积
FM把参数数量从big O of d square降低到了big O of kd
FM是上面那篇2010年论文提出的。
在那个时代,早期的推荐系统通常使用逻辑回归预估点击率。
在逻辑回归中用FM做特征交叉,在推荐系统中效果很好,流行了很长一段时间。
我的感觉是,现在FM在工业界推荐系统中已经过时了,我不清楚其他公司是不是还在用FM,反正我们小红书的召回排序早就下掉了FM。
总结
提示:如何系统地学习推荐系统,本系列文章可以帮到你
(1)找工作投简历的话,你要将招聘单位的岗位需求和你的研究方向和工作内容对应起来,这样才能契合公司招聘需求,否则它直接把简历给你挂了
(2)你到底是要进公司做推荐系统方向?还是纯cv方向?还是NLP方向?还是语音方向?还是深度学习机器学习技术中台?还是硬件?还是前端开发?后端开发?测试开发?产品?人力?行政?这些你不可能啥都会,你需要找准一个方向,自己有积累,才能去投递,否则面试官跟你聊什么呢?
(3)今日推荐系统学习经验:现在FM在工业界推荐系统中已经过时了