CTR模型:推荐系统DeepFM模型

2023-10-15 13:18
文章标签 系统 推荐 模型 deepfm ctr

本文主要是介绍CTR模型:推荐系统DeepFM模型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.简介

理解用户点击行为背后隐藏的交叉特征对CTR预估非常重要。
比如, 人们在用餐时间下载送餐APP,也就是APP类别和时间戳的交叉特征可以作为CTR预估的信号。

由于用户点击行为背后的特征之间各种交互非常复杂,其中的低阶交叉特征和高阶交叉特征都能发挥重要的作用。

下面简单介绍之前的FM模型如何构建交叉特征:

FM模型
在这里插入图片描述
使用向量内积作为成对的特征交互;虽然FM可以对特征高阶交互进行建模,但是复杂度高,一般就二阶特征交互。

FM模型利用低阶特征交叉,DNN模型利用高阶特征交叉,Deep&Wide网络的wide端需要专业的特征工程。

理论上,FM模型可以建模任意高阶的交叉特征,但是代价太大了;
基于CNN的模型倾向捕捉相邻特征之间的交互,而点击率预估任务的相邻特征之间并没有显著的相关性。
基于RNN的模型更适合具有顺序依赖性的数据,不适合点击率预估任务的特征。
PNN和FNN模型,和DNN模型一样,智能捕捉高阶的交叉特征,几乎捕捉不到低阶的交叉特征。

因此,DeepFM模型在2017年被提出。该模型结合了FM的推荐能力和DNN的特征学习能力,综合利用了低阶交叉特征和高阶交叉特征。特点有:
(1)DeepFM集成了FM和DNN,可以对低阶交叉特征和高阶交叉特征建模;
(2)Wide部分和Deep部分共享输入以及Embedding,没有特征工程。

2.DeepFM模型

数据集 ( χ , y ) (\chi, y) (χ,y),X 可以是类别特征(如,性别,地址),也可以是连续特征(如,年龄)。类别特征使用one-hot编码表示,连续特征保持不变或者使用离散化后的one-hot编码向量。
每个样本表示为:(x,y)
其中,

在这里插入图片描述
x 高维且极度稀疏。

2.1 FM 组件

在这里插入图片描述
FM,用于学习一阶特征和二阶交叉特征。
FM由两种操作组成:加法 和 内积。
在这里插入图片描述
加法单元(<w,x>)反映一阶特征的重要性,内积计算表示二阶特征交叉。

2.2 Deep组分

在这里插入图片描述

Deep组件是一个全连接的前馈神经网络,用于学习高阶特征交互。
在这里插入图片描述
在这里插入图片描述

2.3 模型整体
在这里插入图片描述

在这里插入图片描述

2.3 模型比较

FNN:用到FM模型,但仅使用FM模型来初始化FNN,然后进行微调模型,使得FNN的Embedding层参数严重受制于FM模型,降低模型的效果。
此外,FNN仅捕捉高阶特征交互,与此相比,DeepFM不需要预训练,而是端到端的学习低阶交互和高阶特征交互。

PNN:OPNN不如IPNN可靠,因为外积的近似计算丢失了大量信息,使得结果不稳定。
IPNN虽然更可靠,但是由于product层的输出连接到第一个隐层的所有神经元,所以计算复杂度较高。IPNN和OPNN会忽略低阶特征交互。
DeepFM中的product层(FM组件)的输出仅仅连接到输出层(只有1个神经元),计算复杂度很低。

Wide&Deep: Wide & Deep 可以对低阶特征和高阶特征同时建模,但是 wide部分需要人工特征工程。
DeepFM直接处理原始特征。

在这里插入图片描述

在这里插入图片描述

3. 实验结果

(1)数据集
Criteo Display Ads 数据集:用于预测广告点击率的数据集,包含13个整数特征,26个类别特征,其中每个类别特征的取值集合(即:cardinality )都很大。

数据包含 7 天的 11 GB 用户日志(约 4100万条记录)。我们将数据集拆分为 90% 训练集和 10%测试集。

华为公司数据:从华为 App Store 的游戏中心收集连续 7 天的用户点击数据作为训练集,第八天的数据作为测试集。整个训练集+测试集约10亿条记录。

(2)评估指标
评估指标 AUC,logloss 。
(3)参数配置
在这里插入图片描述
模型训练效率:

在这里插入图片描述

效果:
在这里插入图片描述
评估激活函数:relu比tanh要好,但IPNN除外,可能原始是relu导致很强的稀疏性。

在这里插入图片描述
评估dropout:dropout从0.6 到0.9,
在这里插入图片描述
这是,0.9的比例丢弃吗,很高啊?

评估deep组件的深度:
在这里插入图片描述
评估网络的形状:
在这里插入图片描述


参考:

  1. DeepFM: A Factorization-Machine based Neural Network for CTR Prediction;
  2. ctr模型汇总;

这篇关于CTR模型:推荐系统DeepFM模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/217962

相关文章

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

Linux查询服务器系统版本号的多种方法

《Linux查询服务器系统版本号的多种方法》在Linux系统管理和维护工作中,了解当前操作系统的版本信息是最基础也是最重要的操作之一,系统版本不仅关系到软件兼容性、安全更新策略,还直接影响到故障排查和... 目录一、引言:系统版本查询的重要性二、基础命令解析:cat /etc/Centos-release详

更改linux系统的默认Python版本方式

《更改linux系统的默认Python版本方式》通过删除原Python软链接并创建指向python3.6的新链接,可切换系统默认Python版本,需注意版本冲突、环境混乱及维护问题,建议使用pyenv... 目录更改系统的默认python版本软链接软链接的特点创建软链接的命令使用场景注意事项总结更改系统的默

在Linux系统上连接GitHub的方法步骤(适用2025年)

《在Linux系统上连接GitHub的方法步骤(适用2025年)》在2025年,使用Linux系统连接GitHub的推荐方式是通过SSH(SecureShell)协议进行身份验证,这种方式不仅安全,还... 目录步骤一:检查并安装 Git步骤二:生成 SSH 密钥步骤三:将 SSH 公钥添加到 github

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序