CTR预估之FMs系列模型:FM/FFM/FwFM/FEFM

news2025/1/10 17:03:59

前言

ctr预估(点击率,click-through rate, CTR),指一个user在某个特定的场景下会点击一个item的概率估计,这里的item可以是广告、商品等,是推荐和广告系统中十分重要的模块。另外,这里的user-item也可以是query-document,即对于一个用户的查询query,一个document会被点击的概率估计,因此,crt预估也是搜索系统的核心。

当然,搜广推系统一般包括召回和排序,ctr预估一般应用于排序阶段。而像推荐系统,一个鲜明的特点就是数据极特别稀疏。下面,我们会持续学习那些针对稀疏数据的ctr任务而提出的模型,这篇文章则主要是关于FM系列。代码地址:github

FM:Factorization Machines

论文:Factorization Machines

地址:https://www.csie.ntu.edu.tw/~b97053/paper/Rendle2010FM.pdf

因子分解机FM(Factorization Machines)是2000年Steffen Rendle发表的论文《Factorization Machines》中提出的一种新的模型类型,结合了支持向量机SVM的优点的因子分解模型(Factorization Models),主要解决了以下痛点:

  • SVM这类模型无法胜任推荐系统这类数据极其稀疏的任务;
  • LR模型在高维稀疏数据下学习十分困难。

下图是论文中一个关于电影评分系统的数据集样本,符合我们常规的特征处理:

  • 对于类别(离散)特征,一般会进行one-hot编码,转化为n维的0/1向量,n为特征值的 unique 数。如下图蓝色的前四列,特征存在三种取值:A、B、C,那么A=[1,0,0],B=[0,1,0],C=[0,0,1];
  • 而连续型(数值)特征,则是直接使用,或者进行离散化(区间划分),然后再进行one-hot;
  • 而在ctr预估任务中,target y则一般为0或1,1代表点击,0代表未点击。

从这里也可以看出,如前4列蓝色的特征User以及后面5列橙色的特征Movie,由于其存在非常多不同的取值,即特征值的 unique 数很大,因此会导致许多特征列都为0,即上述提到的数据稀疏的特性,这在推荐系统数据集中是很常见的。

逻辑回归

在正式进入FM之前,我们简单介绍下逻辑回归-LR(Logistic Regression),是一个经典的机器学习模型,属于线性分类模型,贴合ctr预估这类二分类任务,加上简单、具有解释性和高效,因此早期的推荐系统中经常能够看到LR的身影。

LR的公式如下:

y ^ ( x ) : = w 0 + ∑ i = 1 n w i x i p ( l a b e l = 1 ∣ x ) = 1 1 + e − y ^ ( x ) \hat{y}(x):=w_0+\sum_{i=1}^nw_ix_i\\ p(label=1|x)=\frac{1}{1+e^{-\hat{y}(x)}} y^(x):=w0+i=1nwixip(label=1∣x)=1+ey^(x)1

(Poly2)考虑加入二阶特征组合之后,LR变为:

y ^ ( x ) : = w 0 + ∑ i = 1 n w i x i + ∑ i = 1 n ∑ j = i + 1 n w i , j x i x j \hat{y}(x):=w_0+\sum_{i=1}^nw_ix_i+\sum_{i=1}^n\sum_{j=i+1}^nw_{i,j}x_ix_j y^(x):=w0+i=1nwixi+i=1nj=i+1nwi,jxixj

加入组合特征之后,可以提升模型的建模能力,比如对于特征[“女性”,“口红”],点击的概率肯定会比[“男性”,“口红”]的高。其实特征组合也理解为一个新的特征,然后配合一个新的权重。从公式中易知,训练数据中如果​** x i x j = 0 x_ix_j=0 xixj=0,即训练数据未出现这对特征组合,那么将无法对权重 w i , j w_{i,j} wi,j进行学习训练,那么在预测时由于这对组合特征的权重为0,相当于无法使用。在推荐系统这种极其稀疏的数据集中,这种情况会变得十分普遍,会导致这种特征组合建模,泛化能力很差**。

FM优势

我们再来看看FM对于二阶特征组合是如何处理,公式如下:​​​

可以看到与LR不同的是二阶交叉特征权重为 w i j w_{ij} wij变为 < v i , v j > <v_i,v_j> <vi,vj>,其中 V ∈ R n × k V\in\mathbb{R}^{n \times k} VRn×k,即每个特征变量都会一个对应的k维向量,一般称为隐向量, v i v_i vi为第i个变量的隐向量。然后猛然一惊​***,这其实不就是现在的embedding思想吗,将one-hot的0/1编码映射到向量表征吗?***

那么,相对于LR,FM这种对于特征组合进行因子分解的方式有什么优点?由于每个特征都存在自己对应的向量v参数,因此二阶交叉特征不再依赖于训练数据中的特征共现了,比如特征组合​** x i   a n d   x j x_i\ and\ x_j xi and xj的权重向量参数 v i   a n d   v j v_i\ and\ v_j vi and vj,仅仅需要训练数据中存在 x i x_i xi和任意特征的组合和 x j x_j xj和任意特征的组合,就可以训练学习自己对应的向量v,那么在预测时,即使是新的组合特征,也能够计算出权重。这使得FM模型的泛化能力大大提升,能够应对推荐系统这类极其稀疏的数据集任务,解决了LR的痛点。**

复杂度优化

由于FM要进行二阶的特征组合,从公式上也很容易得出:FM的复杂度是 O ( k n 2 ) O(kn^2) O(kn2),但由于工业场景下,特征数量n是巨大的,这样的复杂度明显是难以接受的。幸好,FM能够将复杂度优化到 O ( k n ) O(kn) O(kn)

FM模型的梯度计算也比较简单,如下式:

可以看到, v i , f v_{i,f} vi,f的梯度计算是与i无关的,因此这部分是可以直接复用前向传播即计算 y ^ ( x ) \hat{y}(x) y^(x)的结果,也就是预先计算好的,可以认为每个梯度的计算时间都在O(1)。

FFM:Field-aware Factorization Machines

论文:Field-aware Factorization Machines for CTR Prediction

地址:https://www.csie.ntu.edu.tw/~cjlin/papers/ffm.pdf

FFM模型在FM的基础上,对隐向量引入field的区分。field(特征域)和feature(特征值)的区别:field是一类特征,而feature则是具体的特征值。比如性别、学历等等都是field,而feature则表示性别为男、学历为本科。

论文中以广告场景举例,包括三个field:*网站(Publisher)*三种feature为ESPN, Vogue, and NBC、*广告(Advertiser)*三种feature为:Nike,
Gucci, and Adidas、*性别(Gender)*两种feature为Male和Female。对于下面这一个样本:

FM的二阶特征组合计算为: ϕ F M = w E S P N ⋅ w N i k e + w E S P N ⋅ w M a l e + w N i k e ⋅ w M a l e \phi_{FM}=w_{ESPN}\cdot w_{Nike}+w_{ESPN}\cdot w_{Male}+w_{Nike}\cdot w_{Male} ϕFM=wESPNwNike+wESPNwMale+wNikewMale

在FM中,每一个feature拥有自己的一个隐向量,来学习与其他feature的隐含关系,以上面的例子,** w E S P N w_{ESPN} wESPN就是用来学习ESPN与Nike( w E S P N ⋅ w N i k e w_{ESPN}\cdot w_{Nike} wESPNwNike)、ESPN与Male( w E S P N ⋅ w M a l e w_{ESPN}\cdot w_{Male} wESPNwMale)的隐含关系。但是FFM认为Nike和Male属于不同的field,ESPN与它们的隐含关系应该也是不同的,因此FFM模型每个feature都存在f-1个隐向量,f为field的数量,即每个feature与不同field的隐含关系是通过不同的隐向量来学习。**具体如下式:

ϕ F F M = w E S P N , A ⋅ w N i k e , P + w E S P N , G ⋅ w M a l e , P + w N i k e , G ⋅ w M a l e , A \phi_{FFM}=w_{ESPN,A}\cdot w_{Nike,P}+w_{ESPN,G}\cdot w_{Male,P}+w_{Nike,G}\cdot w_{Male,A} ϕFFM=wESPN,AwNike,P+wESPN,GwMale,P+wNike,GwMale,A

可以看到,ESPN在学习与Nike的隐含关系时使用的是与Advertiser关联的隐向量 w E S P N , A w_{ESPN,A} wESPN,A,因为Nike是属于广告(Advertiser)这个特征域,而与Male的隐含关系使用的是与Gender关联的隐向量 w E S P N , G w_{ESPN,G} wESPN,G,因为Male是属于性别(Gender)这个特征域。使用数学公式来表达,如下式:

直观点来理解,FM模型每个feature都有一个k维的隐向量(embedding),而FFM模型则是把每个feature的一个k维embedding扩展为f-1个k维的embedding。(因为feature不与自己组合交互)

参数更新

ctr是一种二分类任务: l o s s = − l o g [ S i g m o i d ( y ^ ) ] loss=-log\left[ Sigmoid(\hat{y}) \right] loss=log[Sigmoid(y^)]

再加入正则化惩罚项,对于最基础的线性模型LM,最终的loss如下式(FFM也是同样的loss形式,只是把LM替换成FFM):

其中,m为训练样本的数量。论文使用的随机梯度stochastic gradient methods (SG)来学习FFM模型的参数,即每次随机使用一个样本来进行参数的更新。容易得到,FFM的梯度计算如下:

论文在使用梯度更新参数时,使用的是AdaGrad优化算法,即会根据累积梯度来对学习率进行自适应调整:​​​

最终,整个FFM的训练流程如下图:​FFM训练流程

FwFM:Field-weighted Factorization Machines

论文:Field-weighted Factorization Machines for Click-Through Rate Prediction in Display Advertising

地址:https://arxiv.org/pdf/1806.03514.pdf

FwFM模型仍然是在FM的基础上,对feature(特征值) embedding引入field(特征域)的区分。这与FFM的思想是类似的,*FFM出发点是一个feature与不同field的feature的隐含关系是不同的,因此每个feature会有f-1个embedding来与不同的field交互,这虽然显著提升了模型的能力,但却带来了参数量的巨大增加。*FwFM将会在这个问题上进行优化。

Interaction Strengths

针对上述FM的问题,FwFM从field级别的交互入手,分析来自一个field pair的所有feature pairs与来自另外一个field pair的平均交互强度(interaction strength)是否不同。例如来自广告(ADVERTISER)的feature和来自网站(PUBLISHER)的feature通常存在很强的交互,因为广告的目标往往是一群特定兴趣的用户,并且不同网站的用户自然是按照兴趣分组构成的;另外,来自HOUR_OF_DAY和DAY_OF_WEEK的特征则存在较弱的交互,对是否点击的影响较小。

论文使用以下公式来刻画不同field之间的交互信息(Mutual Information)。两个特征之间的MI计算,简单来理解就是两个特征的共现频率对标签的影响,再加上一个正则来约束过于高的共现特征,这些其实对标签的贡献不大new-image-

下图便是不同field之间的交互信息可视化。不出所料,不同field pairs的交互强度差别是十分大的,一些field pairs存在很强的交互,比如(AD_ID, SUBDOMAIN)、(CREATIVE_ID, PAGE_TLD),而有些field pairs的交互则很弱,比如(LAYOUT_ID, GENDER), (DAY_OF_WEEK, AD_POSITION_ID),这个结论也为FwFM的提出奠定了基础。交互信息热力图

Field权重

根据上述的分析,其实是能够以field级别来进行建模的,FwFM提出另外一种方法去显式地建模不同field之间的不同交互强度:使用权重​** r F ( i ) F ( j ) ∈ R r_{F(i)F(j)}\in \mathbb{R} rF(i)F(j)R来显式地建模field F(i)和field F(j)的交互强度**,最终数学表示如下式:

可以看出,FwFM仍然属于是FM的扩展,使用** r F ( i ) F ( j ) ∈ R r_{F(i)F(j)}\in \mathbb{R} rF(i)F(j)R**来刻画不同field对的交互强度,因此,属于field F(i)的所有feature与属于field F(j)的所有feature的交互会共享一个权重 r F ( i ) F ( j ) r_{F(i)F(j)} rF(i)F(j)参数量比FFM显著下降,特别是feature数量>>field数量的场景,具体的参数量对比如下表:

线性项

  1. FwFMs_LW。在常规的线性项中,使用一个权重 w i w_i wi来建模feature对label的影响: ∑ i = 1 m x i w i \sum_{i=1}^mx_iw_i i=1mxiwi
  2. FwFMs_FeLV。论文可能是受二阶特征交互使用的隐向量启发,认为使用embedding向量​** v i v_i vi可以捕获更多的信息,提出使用 x i v i x_iv_i xivi来表征feature**(当然这里每个feature的embedding向量与二阶特征交互时是相同的),相应地,这时模型需要学习便是一个权重向量了,因此线性项则变为: ∑ i = 1 m x i < v i , w i > \sum_{i=1}^mx_i<v_i,w_i> i=1mxi<vi,wi>,那么此时FwFM模型的参数量变为 2 m K + n ( n − 1 ) 2 2mK+\frac{n(n-1)}{2} 2mK+2n(n1)
  3. FwFMs_FiLV。当然,可以很自然的延伸到,同一个field的所有feature可以共享权重,那么线性项则变为: ∑ i = 1 m x i < v i , w F ( i ) > \sum_{i=1}^mx_i<v_i,w_{F(i)}> i=1mxi<vi,wF(i)>,此时参数量为 m K + n K + n ( n − 1 ) 2 mK+nK+\frac{n(n-1)}{2} mK+nK+2n(n1)

不同的线性项方式效果对比如下,可以看到FwFMs_FiLV在测试集表现是最好的:

实验结果

在同样的参数量下,FwFM模型的效果是最优的。​

FEFM:Field-Embedded Factorization Machines

论文:Field-Embedded Factorization Machines for Click-through rate prediction

地址:https://arxiv.org/pdf/2009.09931.pdf

FEFM与FwFM的思想是同属一系列,不同field的feature的交互建模是在field级别,而不是FFM的feature级别,但是FEFM不像FwFM那样显性地去学习特定field的feature embeddings,而是通过一个 k × k k \times k k×k的对称矩阵 W F ( i ) F ( j ) W_{F(i)F(j)} WF(i)F(j)new-image-

可以看出,当​** W F ( i ) F ( j ) W_{F(i)F(j)} WF(i)F(j)是一个单位矩阵I时,FEFM就会退化为FM;而当 W F ( i ) F ( j ) W_{F(i)F(j)} WF(i)F(j)变成一个对角矩阵,且对角线的值为 r F ( i ) F ( j ) r_{F(i)F(j)} rF(i)F(j),那么FEFM就会退化为FwFM。从这个角度来看,FEFM可以认为是一种泛化能力更强的FM和FwFM。**​

总结

FM模型为每个特征引入隐向量embeddings,使得模型对二阶特征交互的学习能力大大提升,无需依赖训练样本中的特征组合共现,使得该类能够胜任CTR这类高维稀疏数据的任务。

后面的FFM、FwFm和FEFM都对隐向量embeddings介入field(特征域)的区分:

  • FFM是将每个特征的一维隐向量embeddings扩展到n-1维,n为field的数目;
  • FwFM针对FFM参数量庞大的问题,选择为每一对field创建一个权重;
  • FEFM则是为每一对field创建一个k*k维的权重矩阵,进一步提升field pairs间隐含关系的学习能力。

代码实现

github

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/515129.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《程序员面试金典(第6版)》面试题 16.18. 模式匹配(暴力破解 + 剪枝)

题目描述 你有两个字符串&#xff0c;即pattern和value。 pattern字符串由字母"a"和"b"组成&#xff0c;用于描述字符串中的模式。 例如&#xff0c;字符串"catcatgocatgo"匹配模式"aabab"&#xff08;其中"cat"是"a&q…

Redis基础复习

1 Redis基础概述 Redis 是C语言开发的一个开源高性能键值对的内存数据库&#xff0c;可以用来做数据库、缓存、消息中间件等场景&#xff0c;是一种NoSQL(not-only sql,非关系型数据库)的数据库 1.1 参考网站&#xff1a; 官网 中文文档 1.2 安装 linux安装Redis7 1.3 Re…

全新上线!能源行业大型的S/4升级项目——E.ON(意昂)第五次迁移成功完成

意昂集团是一家德国能源集团的控股公司&#xff0c;总部位于埃森。该公司主要活跃在能源网络、能源服务、可再生能源以及德国核电站的运营和退役领域。 意昂于2019年启动了全公司范围内的S/4联合项目&#xff0c;这是SAP大型S/4项目之一&#xff0c;也是能源行业的大型S/4项目。…

linux下mysql如何修改密码,包括本地密码和远程密码。navicat远程登录

当服务器部署mysql,navicat远程访问&#xff0c;修改密码时需要修改两次 1、修改本地登录密码 mysql > SET PASSWORD PASSWORD(123456); mysql > FLUSH PRIVILEGES;重启mysql服务 service mysql restart上面命令如果报错&#xff0c;则采取以下方法&#xff1a; [ro…

SpringBoot基础篇2(整合第三方技术)

一、SpringBoot整合Junit 直接配置的module&#xff0c;默认就可以测试。 SpringBoot整合第三方技术&#xff1a; 1.pom.xml中引入对应的starter&#xff08;有勾选的勾选&#xff0c;没有勾选的选项手动导入。在这里查 查依赖的网站&#xff09; 2.配置相关信息 二、SpringB…

vue diff算法与虚拟dom知识整理(6) 感受diff算法 (不要神话虚拟dom更不要做完美主义)

我们还是打开之前的案例 然后 将src下的index.js代码修改如下 import {init,classModule,propsModule,styleModule,eventListenersModule,h,} from "snabbdom";//创建patch函数const patch init([classModule,propsModule,styleModule,eventListenersModule]);//创…

tcp 三次握手和四次挥手报文分析

1&#xff0c;tcp 三次握手 报文抓取如下&#xff1a; 三段报文分析&#xff1a; 第一次&#xff1a;26->96报文交互 Seq-num 567391014, ACK_NUM 0; flags SYN 第二次&#xff1a;96->26报文交互 Seq-num 416352681, ACK_NUM Seq-num 1 567391014 1 567391015,…

硬件系统工程师宝典(22)-----电容、电感的特性,你都知道吗?

各位同学大家好&#xff0c;欢迎继续做客电子工程学习圈&#xff0c;今天我们继续来讲这本书&#xff0c;硬件系统工程师宝典。上篇我们说到做电阻选型时要考虑阻值、功率、精度和封装大小。上下拉电阻除了给引脚一个稳定的电平&#xff0c;可以提高电压准位、增加输出功率以及…

法律 法规

第八章、法律 法规 从所涉及的法律法规角度 1️⃣著作权法 2️⃣计算机软件保护条例 3️⃣商标法 4️⃣专利法 从试题考点分布的角度 1️⃣保护期限 2️⃣知识产权人确定 3️⃣侵权判断 中国公民、法人或者其他组织的作品&#xff0c;不论是否发表&#xff0c;都享有著作…

Linux服务安装node,npm与yarn

目录 Linux服务安装node&#xff0c;npm与yarn 可以直接在win或者Linux安装node官网&#xff08;中文版&#xff09;下载所需要的版本 通过epel 的来安装 node 安装npm 利用npm安装yarn 卸载yarn 安装依赖 运行 本篇文章仅是本人遇到的问题&#xff0c;希望可以对你有帮…

基于海鸥算法优化的核极限学习机(KELM)分类算法-附代码

基于海鸥算法优化的核极限学习机(KELM)分类算法 文章目录 基于海鸥算法优化的核极限学习机(KELM)分类算法1.KELM理论基础2.分类问题3.基于海鸥算法优化的KELM4.测试结果5.Matlab代码 摘要&#xff1a;本文利用海鸥算法对核极限学习机(KELM)进行优化&#xff0c;并用于分类 1.KE…

Go基础知识入门

1、go语言介绍 2、go开发环境搭建 2.1、go的安装 go下载地址&#xff1a;All releases - The Go Programming Language&#xff0c;windows选择下载go1.20.2.windows-amd64.msi文件。 双击go1.20.2.windows-amd64.msi&#xff0c;点击"Next"&#xff0c;然后勾选同…

Linux——进程信号1

信号和信号量是俩个东西&#xff0c;俩者无关系。 信号 信号本质是一种通知机制&#xff0c;用户or操作系统通过发送一定的信号&#xff0c;通知进程&#xff0c;某些事件已经发送&#xff0c;让进程进行后续处理。 结合进程&#xff0c;信号结论&#xff1a; 进程要处理信号&a…

【Windows线程开发】线程基础

本篇文章来带领大家了解Windows线程&#xff0c;了解线程的基本概念&#xff0c;了解线程的创建方式&#xff0c;以及一些简单的线程操作。 文章目录 一.线程基本概念二.创建线程三.线程实例&#xff08;单线程&#xff0c;多线程&#xff09;单线程执行多线程执行 四.挂起&am…

ElasticSeach 集成 springboot

声明是ElasticSearch? ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎&#xff0c; 基于RESTful web接口。Elasticsearch是用Java开发的&#xff0c;并作为Apache许可条款下的开放源码发布&#xff0c;是 当前流行的企业级搜索引擎…

大数据 | (五)通过Sqoop实现从MySQL导入数据到HDFS

知识目录 一、前言二、导入前的准备2.1 Hadoop集群搭建2.2 Hadoop启停脚本 三、docker安装MySQL四、安装Sqoop4.1 Sqoop准备4.2 Sqoop连接Mysql数据测试 五、导入MySQL数据到hdfs5.1 准备MySQL数据5.2 导入数据 六、Sqoop现状七、结语 一、前言 各位CSDN的朋友们大家好&#x…

5.11组会衍生总结:train/eval/BN、CNN与特征图、极大似然与EM、方差n与n-1(有偏估计/无偏估计)

目录组会问题:1.关于模型的train/eval与batchnorm1-1.理论1-2.实际运用(包含loss反向传播)2.CNN详解,特征图是什么CNN处理过程特征图(也叫通道)(num_features)总结(包含CNN图片的规律分析):3.极大似然估计与EM最大期望4.方差的n与n-1(有偏估计与无偏估计) 组会问题:…

企业文化和品牌文化是两回事

商业通常谈两类文化&#xff1a;企业文化&#xff0c;品牌文化 1&#xff09;组织内部的文化 2&#xff09;品牌以产品为依托&#xff0c;给消费群体营造的文化 “积极稳定”的文化氛围打造是个慢活 企业文化&#xff0c;既要挂在墙上&#xff0c;又要挂在嘴上&#xff0c;最终…

二叉查找树和平衡二叉树

二叉查找树 下面是一张数据库的表,有两列,分别是 Col1 和 Col2 我们来查找一下col289的这行数据,SQL语句如下: select * from a where col2 87没有用索引时执行上面的查询 , 数据从磁盘一条一条拿来对比最终找到结果&#xff0c;如果数据表很大,数据又在表尾的话,需要花费非…

Open3D点云数据处理(一):VSCode配置python,并安装open3d教程

文章目录 1 python下载与安装1.1 python下载1.2 python安装1.3 验证python是否安装成功 2 VSCode下载与安装2.1 下载2.2 安装2.3 安装汉化插件2.4 vscode安装python扩展2.5 编写一个简单的python程序并运行2.6 在外部终端中打印运行结果2.7 测试代码&#xff1a;使用python画一…