ctr特征重要性建模:FiBiNetFiBiNet++模型

news2024/10/7 5:31:14

FiBiNET(Feature Importance and Bilinear feature Interaction NETwork)为推荐系统的CTR模型提出了一些创新方向:

  • 引入一个SENet模块,可以动态学习特征的重要性;
  • 引入一个双线性模块(Bilinear-Interaction layer),来改进特征交互方式。

可以看出,FiBiNET模型主要的工作都是在特征建模方向,但论文没有说明为什么特征建模在ctr模型中如此重要?下面我们引用论文作者的一张图:

ctr任务中大部分特征是ID类特征,并且数据是十分稀疏的。ctr模型中的参数绝大部分都为特征Embedding,可见其重要程度,而特征重要性建模则是更好地利用这些特征的方向之一。(PS:另外一个方向是频次相关的变长embedding)

image-20230129212221536

1. FiBiNet

论文:FiBiNET: Combining Feature Importance and Bilinear feature Interaction for Click-Through Rate Prediction

地址:https://arxiv.org/abs/1905.09433

从下图的网络结构,可以看出FiBiNet模型其实不复杂,主要在深度ctr模型baseline中引入了SENet和Bilinear-Interaction:

  1. 不同的特征转换为Embeddings E
  2. Embeddings输入到SENet Layer,得到SENet-Like Embeddings V
  3. Embeddings EV分别经过双线性特征交互层,得到p和q;
  4. p和q进行拼接,输入到DNN全连接层,最后使用sigmoid函数得到预测概率。

1.1 Embedding Layer

为了方便表述,在这里稍微讲下field和feature的区别:field是一类特征,而feature则是具体的特征值。比如性别、学历等等都是field,而feature则表示性别为男、学历为本科。

那么,这些ID类输入经过Embedding Layer,并且进行拼接,输出则为: E = [ e 1 , e 2 , . . . , e i , . . . , e f ] , e i ∈ R k E=[e_1,e_2,...,e_i,...,e_f],e_i\in R^k E=[e1,e2,...,ei,...,ef],eiRk表示第i个field的embedding,f为fileds的数量,k则为embedding的维度。

1.2 SENet

众所周知,不同的特征在特定的任务中,重要性是不一样的。SENet可以帮助我们对特征重要性进行建模,在ctr任务中,通过SENet可以动态地增加重要特征的权重,和降低无关特征的权重

SENet接收embedding layer的输出,产出权重向量 A = { a 1 , . . . , a i , . . . , a f } , a i A=\{a_1,...,a_i,...,a_f\},a_i A={a1,...,ai,...,af}ai为标量,代表第i个field embedding的权重。然后把原来的embedding E重新缩放为一个新的embedding(SENet-Like embedding) V = [ v 1 , . . . , v i , . . . , v f ] V=[v_1,...,v_i,...,v_f] V=[v1,...,vi,...,vf]

如上图所示,SENet包括三个步骤:squeeze、excitation、re-weight。

Squeeze. 这一个步骤是为了计算每个field embedding的统计信息。使用mean或者max的pooling方法来挤压原来的Embedding E,变成一个统计向量 Z = [ z 1 , . . . , z i , . . . , z f ] , z i Z=[z_1,...,z_i,...,z_f],z_i Z=[z1,...,zi,...,zf]zi是一个标量,表征第i个feature的全局信息。

如下式则为mean pooling,论文实验了mean pooling比max pooling的效果更佳:

image-20230130211521442

**Excitation. ** 这一个步骤是为了在统计向量Z的基础上,学习到每个field embedding的权重。具体方法也很简单,就是使用带激活函数的两个全连接层:

image-20230130212141213

其中, A ∈ R f 是一个向量, σ 1 和 σ 2 A\in R^f是一个向量,\sigma_1和\sigma_2 ARf是一个向量,σ1σ2都为激活函数, W 1 ∈ R f × f r 和 W 2 ∈ R f r × f W_1\in R^{f\times \frac{f}{r}}和W_2\in R^{\frac{f}{r} \times f} W1Rf×rfW2Rrf×f为训练参数,r为缩减比例,是一个超参数。

**Re-Weight. ** 这一个步骤是把权重向量A对原来的Embedding E进行缩放,得到SENet-Like embedding Vimage-20230130213013511

1.3 Bilinear-Interaction

交互网络层的目的是为了计算二阶特征交互,如FM和FFM这些线层模型的特征交互是使用了inner product,如AFM和NFM这些深度模型则是使用Hadamard product。

但是,这两种方法都过于简单,在稀疏数据中难以进行有效的建模。因此,论文结合这两种方法,提出了另外一种交互方式:Bilinear- Interaction。

image-20230131203708773

如上图所示,三种交互方式的区别也比较明显了。Inner Product就是内积,而Hadamard Product: [ a 1 , a 2 , a 3 ] ⊙ [ b 1 , b 2 , b 3 ] = [ a 1 b 1 , a 2 b 2 , a 3 b 3 ] [a_1,a_2,a_3]\odot [b_1,b_2,b_3]=[a_1b_1,a2_b2,a3_b3] [a1,a2,a3][b1,b2,b3]=[a1b1,a2b2,a3b3]。而双线性特征交互包括以下三种:

  • **Field-All Type: ** p i j = v i ⋅ W ⊙ v j p_{ij}=v_i\cdot W\odot v_j pij=viWvj。所有field共享一个隐矩阵 W ∈ R k × k W\in R^{k\times k} WRk×k,参数量为k·k;
  • **Field-Each Type: ** p i j = v i ⋅ W i ⊙ v j p_{ij}=v_i\cdot W_i\odot v_j pij=viWivj。每一个filed都有自己的隐矩阵 W i ∈ R k × k W_i\in R^{k\times k} WiRk×k,参数量为f·k·k;
  • Field-Interaction Type: p i j = v i ⋅ W i j ⊙ v j p_{ij}=v_i\cdot W_{ij}\odot v_j pij=viWijvj。不同的field之间的交互都有一个隐矩阵 W i j ∈ R k × k W_{ij}\in R^{k\times k} WijRk×k,参数量为 f ( f − 1 ) 2 × k × k \frac{f(f-1)}{2}\times k \times k 2f(f1)×k×k

其中, v i , v j v_i,v_j vi,vj分别是第i和j个field的embedding。三种双线性特征交互的区别就是在于交互的粒度不同。(这里的“隐矩阵”可能名称不准确,是为了能够与FM中的隐向量类比理解)

下图为不同双线性特征交互方式的效果对比,结论说明没有哪一种双线性特征交互是最好的,不同的数据集适合的交互方式可能不同

image-20230131210120916

如上图-[FiBiNet结构]所示,FiBiNet会分别把原来的embedding E和经过SENet之后的SENet-Like embedding V都送入双线性特征交互层,得到 p = [ p 1 , . . . , p i , . . . , p n ]   a n d   q = [ q 1 , . . . , q i , . . . , q n ] , w h e r e p i , q i ∈ R k p=[p_1,...,p_i,...,p_n]\ and\ q=[q_1,...,q_i,...,q_n],where p_i,q_i\in R^k p=[p1,...,pi,...,pn] and q=[q1,...,qi,...,qn]wherepi,qiRk,然后将p和q进行拼接,给到DNN连接层中,最后使用sigmoid函数得到预测的点击概率。这与其他的ctr模型并无不同。

我们可以发现,FiBiNet移除SENet模块,其实就会退化为FNN模型;而移除DNN部分,它就可以退化为FM模型。

2. FiBiNet++

论文:FiBiNet++:Improving FiBiNet by Greatly Reducing Model Size for CTR Prediction

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

FiBiNet存在的问题是双线性特征交互层会导致第一层DNN连接层产生巨大参数量,由此提出了FIBiNet的改进版FiBiNet++,模型参数(非embedding参数)降低了12-16倍,并且效果还得到了提升。FiBiNet在bi-linear双线性特征交互层和SENet层都进行改进了。

FiBiNet++结构如下图[FiBiNet++结构]:

  1. 不同的特征(包括类别特征和数值特征)转换为Embeddings;
  2. Embeddings经过Bi-Linear+层,得到输出 H C M L H^{CML} HCML
  3. Embeddings经过SENet+层,得到输出 V S E N e t + V^{SENet+} VSENet+;
  4. H C M L H^{CML} HCML V S E N e t + V^{SENet+} VSENet+拼接,输入到多层的MLP,最后使用sigmoid函数得到预测概率。

FiBiNet结构

2.1 Bi-Linear+

上述已经介绍过,FiBiNet对特征 x i , x j x_i,x_j xi,xj交互的建模是通过引入可学习参数矩阵W的双线性函数,如下式:image-20230201205514617

∘ , ⊗ \circ,\otimes 分别代表内积和哈达玛积( element-wise hadamard product)。W有三种参数形式:field all type、field each type、field interaction type。

哈达玛积会产生大量的非必要参数,因此,FiBiNet++对双线性函数(bi-linear function)进行优化,提出bi-linear+,大大的减少双线性特征交互层的输出size。对于f个field,有下式:

image-20230201210231556

image-20230201210238927

接着,再引入一个MLP层来叠加向量P,如下式:

image-20230201210921786

其中, W 1 ∈ R m × f × ( f − 1 ) 2 , σ ( ⋅ ) W_1\in \mathbb{R}^{m\times \frac{f\times(f-1)}{2}},\sigma(\cdot) W1Rm×2f×(f1)σ()是一个恒等映射函数,并且是不带非线性激活函数的,论文实验了加上非线性转换反而效果下降了。

2.2 SENet+

在FIBiNet模型中,SENet包括三个步骤:squeeze、excitation、re-weight。为了进一步增强模型表现,论文FiBiNet提出了SENet+,模块,SENet+包括了四个步骤:squeeze、excitation、re-weight、fuse,虽然前三个步骤相同,但每一步其实都经过了改进。

Squeeze. 考虑到更多的输入信息有利于提升模型的效果。因此,不同于SENet对每个feature使用mean pooling得到1-bit的统计信息,SENet+会将每个feature分割为多个组来得到多个1-bit的统计信息。

具体的,首先将每个经过标准化后的feature embedding v i ∈ R 1 × d v_i\in \mathbb{R}^{1\times d} viR1×d分割为g个组(g是一个超参数),如该式: v i = c o n c a t [ v i , 1 , v i , 2 , . . . , v i , g ] , w h e r e   v i , j ∈ R 1 × d g v_i=concat[v_{i,1},v_{i,2},...,v_{i,g}],where\ v_{i,j}\in \mathbb{R}^{1\times \frac{d}{g}} vi=concat[vi,1,vi,2,...,vi,g]where vi,jR1×gd,代表着第i个特征中第j个组的信息。然后在 v i , j v_{i,j} vi,j上使用max pooling和mean pooling来表征该组的信息,得到如下结果:

image-20230201213250720

image-20230201213259850

image-20230201213307864

Excitation. 在SENet中,这一步得到的权重向量Z是field级别的,SENet+进一步细化,让权重向量改进为bit级别的,具体如下式:image-20230201214000801

其中, W 2 ∈ R 2 g f r × 2 g f , W 3 ∈ R f d × 2 g f r , σ 2 ( ⋅ ) = R e l u ( ⋅ ) , σ 3 ( ⋅ ) W_2\in \mathbb{R}^{\frac{2gf}{r}\times 2gf},W_3\in \mathbb{R}^{fd\times \frac{2gf}{r}},\sigma_2(\cdot)=Relu(\cdot),\sigma_3(\cdot) W2Rr2gf×2gfW3Rfd×r2gfσ2()=Relu()σ3()是一个恒等映射函数,r仍然是一个代表缩减比率的超参数。

Re-Weight. 这里就很好理解了,因为上一步Excitation得到的权重向量Z是bit级别的,那么feature embedding也对应每个bit进行缩放:

image-20230201214627058

这里的N(V)为经过normalization之后的embeddings,后续会进一步详细介绍。

Fuse. SENet++增加的这一步骤思想有点像残差网络了,让上一步得到的feature embedding和原来的feature embedding进行bit-wise的相加,再采用layer normalization得到更好的特征表征:

image-20230201215048901

image-20230201215053900

image-20230201215059035

接下来的步骤,与FiBiNet大致相同了,将SENet+和Bi-Linear+的输出进行拼接即 H 0 = c o n c a t [ H C M L , V S E N e t + ] H_0=concat[H^{CML},V^{SENet+}] H0=concat[HCML,VSENet+],然后输入到多层MLP中,最后使用sigmoid函数得到预测概率。

2.3 特征处理

在这里,再介绍下论文使用的特征预处理方法。对于类别特征,使用常规处理,进行one-hot编码,映射到低维的向量。而对于数值类特征,论文会给每个field分配一个embedding,然后让归一化之后的特征值与embedding相乘,具体如下:

image-20230201220155796

image-20230201220204417

并且,类别特征和数值特征的标准化方法也不同:类别特征使用的是batch normalization,而数值特征使用的是layer normalization:

image-20230201220350390

image-20230201220404986

S c 、 S n S_c、S_n ScSn分别代表类别特征和数值特征的集合。

3. 总结

FiBiNet在特征重要性方向发力,提出了两个独立可插拔的模块,分别为动态学习特征重要性的SENet和增强二阶特征交互的Bi-Linear。

FiBiNet++提出了Bi-Linear,大大减少了模型的参数量;还有SENet+,对SENet的每个步骤都进行改进。

个人觉得FiBiNet系列模型的最大贡献是提出的这两个模块的实用性很高,可以很灵活插入到自己的模型中。比如SENet双塔召回,天猫电商领域推荐中的粗排模型也在item tower加入了这两个模块。

SENet双塔召回

4. 代码实现

虽然论文提供了源码,不过其需要所有field embeddings的size相同。但在实际应用场景下,不同特征的embeddings size往往是会设置不同的,这里提供了支持不同field embeddings的size不等的实现:github

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

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

相关文章

在当前互联网行情下,Android想转音视频开发,会有前景吗?

前言 近年来,由于三年疫情的影响,很多公司都开始陆陆续续的在裁员,Android开发工作岗位也是,可能有些从事Android开发的朋友还没有意识到,Android开发岗位正在变少,求职者,僧多粥少&#xff0c…

数据可视化大屏电商数据展示平台开发实录(Echarts柱图曲线图、mysql筛选统计语句、时间计算、大数据量统计)

数据可视化大屏电商数据展示平台 一、前言二、项目介绍三、项目展示四、项目经验分享4.1 翻牌器4.1.1 翻牌器-今日实时交易4.1.2.翻牌器后端统计SUM函数的使用 4.2 不同时间指标的数据MySql内部的时间计算 4.3 实时交易播报MySql联表查询和内部遍历循环 4.4 每日交易量4.4.1.近…

Flutter开发日常练习-小猫咪杂货店(新增欢迎页,广告页和侧滑页面)

养小猫咪的伙伴来我的店铺逛逛吧!抖音商城搜索#早睡早起的猫咪小铺子 Flutter开发日常练习-小猫咪杂货店(新增动画和跳转抖音)_workersJiaDa的博客-CSDN博客URL Launcher是一个Flutter插件,它允许您的应用程序启动网络浏览器、地图应用程序、拨号器应用程序、邮件应…

Object Manager中的Hierarchy Columns

【前言】:最近偶然发现Object Manager中多了一项Hierarchy Columns,正好在做Case Mgmt这块的业务,需要做Case Hierarchy,或许熟悉这个新概念对后续方案的落地有一定启发。 #1. Account Hierarchy - 这个是标准功能,Acc…

【Winform学习笔记(二)】TextBox文本框实现按回车键触发Button事件

TextBox文本框实现按回车键触发Button事件 前言正文1、实现方法2、具体代码3、实现效果 前言 在本文中主要介绍 如何基于 Winform 框架实现 TextBox 文本框实现按回车键触发 Button 事件,该功能可实现在文本框中输入密码后不需要按登录或确定按钮,直接回…

如果建立一个由AI组成的社会……

你有没有想过,如果我们建立一个完全由AI组成的公民社会团体,让它们模仿人类的文明发展,那么这个AI社会最终将会进化到何种文明程度?需要明确的是AI社会只有AI,没有人类,完全是AI之间互相沟通交流&#xff0…

制作剧本杀小游戏系统

制作剧本杀小游戏软件的功能可以包括以下几点: 角色设定和分配:提供多种角色供玩家选择,根据玩家数量随机分配角色。 剧情框架:提供预设的剧情框架,或者允许用户自定义剧情。 背景设定:提供游戏…

图像处理:高斯滤波算法

目录 前言 概念介绍 基本原理 卷积核的大小 卷积核的形状和权重比 卷积核的归一化 结论 Opencv实现高斯滤波 Python手写实现高斯滤波 参考文章 前言 在此之前,我曾在此篇中推导过图像处理:推导五种滤波算法(均值、中值、高斯、双边…

linux 命令之 tar -czvf和 tar -xzvf

文章目录 一、概述:二、基础知识 一、概述: tar 用于linux 系统中压缩和解压 二、基础知识 tar常用命令参数说明 tar命令的czvf/xzvf参数分别代表的意义如下: -c 或–create 建立新的备份文件。 -x或–extract或–get 从备份文件中还原文件…

为什么用Selenium做自动化测试

手工测试的问题 手工操作点点点借助的是人脑的反应和聪明,为什么不用手点了呢?手会酸,脑子会累,会占据太多的时间。想一想为什么会学习自动化测试。我们都希望通过工具来解放我们的双手,大脑,眼睛。 为什…

蚂蚁安全科技 Nydus 镜像加速实践

蚂蚁安全科技 Nydus 镜像加速实践 原创 曦栖 金融级分布式架构 文|蚂蚁集团 ZOLOZ 团队 使用全球领先安全科技,为用户和机构提供安全、便捷的安全风控解决方案。 本文 6386 字 阅读 12 分钟 背景简介 ZOLOZ[1]是蚂蚁集团旗下的全球安全风控平台&…

84.qt qml-Sprite精灵、SpriteSequence、ImageParticle使用Sprite精灵动画(三)

在上章我们学习了83.qt qml-初步学习2D粒子影响器(二)_诺谦的博客-CSDN博客 然后还有两个影响器没有学习: 粒子精灵影响器SpriteGoal 粒子组影响器GroupGoal 本章我们便来学习粒子精灵和粒子精灵影响器 ImageParticle通过sprites来设置精灵列表,如下图所示: 所以我们需要…

JVM学习(八):运行时数据区——虚拟机栈(字节码程度深入剖析)

目录 一、概述 1.1 基于栈结构的虚拟机 1.2 栈和堆 二、虚拟机栈(Java Virtual Machine Stack)详述 2.1 虚拟机栈介绍 2.2 虚拟机栈作用 2.3 虚拟机栈特点 三、栈中常见的异常 3.1 StackOverflowError异常 3.2 OutOfMemoryError异常 四、…

OpenGL学习笔记(一)

文章目录 1. 顶点2. 着色器(Shader) 1. 顶点 OpenGL本质是一个状态机,点作为表示图形最基本的元素,如何告诉OpenGL点的基本信息就是我们要做的事情 1.1VertexArray VertexArray是所有顶点的集合,我们可以将VertexBuffer分成很多组&#xff…

Volatile系列(一):Volatile测试案例一可见性

系列文章 Volatile测试案例一可见性 目录​​​​​​​ 前言 测试1 逻辑 代码 结果 测试2 逻辑 代码 结果 结论 原理探讨(可见性) 前言 多线程是 JAVA 并发编程的主要应用,并发环境能大幅提高应用性能,提高 CPU 使用…

基于springboot+mysql+html实现智能停车场管理系统

基于springbootmysqlhtml实现智能停车场管理系统 一、系统介绍1、系统主要功能:2.涉及技术框架:3.本项目所用环境: 二、功能展示三、其它系统四、获取源码 一、系统介绍 1、系统主要功能: 系统管理:角色管理、接口管…

华为OD机试真题(Java),货币单位换算(100%通过+复盘思路)

一、题目描述 记账本上记录了若干条多国货币金额,需要转换成人民币分 (fen),汇总后输出每行记录一条金额,金额带有货币单位,格式为数字单位,可能是单独元,或者单独分,或者元与分的组合要求将这…

解决方案:Zotero实现参考文献中英文混排,将英文文献中的“等”转成“et al.”

Zotero 是一款非常实用且易于使用的参考文献管理工具,可帮助用户收集、整理和引用各种类型的文献,包括图书、期刊文章、网页等。在学术写作中起着重要作用。 但是其在中文世界中,运行起来偶尔会出现问题,这里记录一个问题及其解决…

Nacos安装配置2.0以上版本

一、Nacos使用 1、官网 Nacos Spring 快速开始 Nacos Spring Boot 快速开始 Nacos Spring Cloud 快速开始 Nacos Docker 快速开始 Dubbo 融合 Nacos 成为注册中心 Kubernetes Nacos NacosSync 介绍 2、配置文件 nacos-配置中心官方文档说明 nacos-注册中心官方文档说明 在nacos…

浅谈拉格朗日插值法

浅谈拉格朗日插值法 好像FFT要用到,所以就学习一手 文章目录 浅谈拉格朗日插值法什么是插值拉格朗日插值法 什么是插值 在离散数据的基础上补插连续的函数,使得这条连续函数经过所有离散数据点,这个过程就叫插值。其意义在于: …