【原创】推荐广告入门:DeepCTR-Torch,基于深度学习的CTR预测算法库

在计算广告和推荐系统中,CTR预估一直是一个核心问题。无论在工业界还是学术界都是一个热点研究问题,近年来也有若干相关的算法竞赛陆续举办。本文介绍一个使用PyTorch编写的深度学习的点击率预测算法库DeepCTR-Torch,具有简洁易用、模块化和可扩展的优点,非常适合初学者快速入门学习。

(本文作者:沈伟臣,阿里巴巴算法工程师)

点击率预估问题

点击率预估问题通常形式化描述为给定用户,物料,上下文的情况下,计算用户点击物料的概率即:pCTR = p(click=1|user,item,context)

简单来说,在广告业务中使用pCTR来计算广告的预期收益,在推荐业务中通过使用pCTR来确定候选物料的一个排序列表。

DeepCTR-Torch

人们通过构造有效的组合特征和使用复杂的模型来学习数据中的模式来提升效果。基于因子分解机的方法,可以通过向量乘积的形式学习特征的交互,并且泛化到那些没有出现过的组合上。

随着深度神经网络在若干领域的巨大发展,近年来研究者也提出了若干基于深度学习的分解模型来同时学习低阶和高阶的特征交互,如:

PNN,Wide&Deep,DeepFM,Attentional FM,Neural FM,DCN,xDeepFM,AutoInt,FiBiNET

以及基于用户历史行为序列建模的DIN,DIEN,DSIN等。

对于刚接触这方面的同学来说,可能对这些方法的细节还不太了解,虽然网上有很多介绍,但是代码却没有统一的形式,且当想要迁移到自己的数据集进行实验时也很不方便。本文介绍的一个使用PyTorch实现的基于深度学习的CTR模型包DeepCTR-PyTorch,无论是使用还是学习都很方便。

DeepCTR-PyTorch是一个简洁易用、模块化可扩展的基于深度学习的CTR模型包。除了近年来主流模型外,还包括许多可用于轻松构建您自己的自定义模型的核心组件层。

您简单的通过model.fit()model.predict()来使用这些复杂的模型执行训练和预测任务,以及在通过模型初始化列表的device参数来指定运行在cpu还是gpu上。

640?wx_fmt=png

安装与使用

  • 安装

pip install -U deepctr-torch
  • 使用例子

下面用一个简单的例子告诉大家,如何快速的应用一个基于深度学习的CTR模型,代码地址在:

https://github.com/shenweichen/DeepCTR-Torch/blob/master/examples/run_classification_criteo.py。

The Criteo Display Ads datasetkaggle上的一个CTR预估竞赛数据集。里面包含13个数值特征I1-I13和26个类别特征C1-C26

# -*- coding: utf-8 -*-
# 使用pandas 读取上面介绍的数据,并进行简单的缺失值填充
import pandas as pd
from sklearn.metrics import log_loss, roc_auc_score
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder, MinMaxScaler
from deepctr_torch.models import *
from deepctr_torch.inputs import SparseFeat, DenseFeat, get_fixlen_feature_names
import torch# 使用pandas 读取上面介绍的数据,并进行简单的缺失值填充
data = pd.read_csv('./criteo_sample.txt')
# 上面的数据在:https://github.com/shenweichen/DeepCTR-Torch/blob/master/examples/criteo_sample.txtsparse_features = ['C' + str(i) for i in range(1, 27)]
dense_features = ['I' + str(i) for i in range(1, 14)]data[sparse_features] = data[sparse_features].fillna('-1', )
data[dense_features] = data[dense_features].fillna(0, )
target = ['label']#这里我们需要对特征进行一些预处理,对于类别特征,我们使用LabelEncoder重新编码(或者哈希编码),对于数值特征使用MinMaxScaler压缩到0~1之间。for feat in sparse_features:lbe = LabelEncoder()data[feat] = lbe.fit_transform(data[feat])
mms = MinMaxScaler(feature_range=(0, 1))
data[dense_features] = mms.fit_transform(data[dense_features])# 这里是比较关键的一步,因为我们需要对类别特征进行Embedding,所以需要告诉模型每一个特征组有多少个embbedding向量,我们通过pandas的nunique()方法统计。fixlen_feature_columns = [SparseFeat(feat, data[feat].nunique())for feat in sparse_features] + [DenseFeat(feat, 1,)for feat in dense_features]dnn_feature_columns = fixlen_feature_columns
linear_feature_columns = fixlen_feature_columnsfixlen_feature_names = get_fixlen_feature_names(linear_feature_columns + dnn_feature_columns)#最后,我们按照上一步生成的特征列拼接数据train, test = train_test_split(data, test_size=0.2)
train_model_input = [train[name] for name in fixlen_feature_names]
test_model_input = [test[name] for name in fixlen_feature_names]# 检查是否可以使用gpudevice = 'cpu'
use_cuda = True
if use_cuda and torch.cuda.is_available():print('cuda ready...')device = 'cuda:0'# 初始化模型,进行训练和预测model = DeepFM(linear_feature_columns=linear_feature_columns, dnn_feature_columns=dnn_feature_columns, task='binary',l2_reg_embedding=1e-5, device=device)model.compile("adagrad", "binary_crossentropy",metrics=["binary_crossentropy", "auc"],)
model.fit(train_model_input, train[target].values,batch_size=256, epochs=10, validation_split=0.2, verbose=2)pred_ans = model.predict(test_model_input, 256)
print("")
print("test LogLoss", round(log_loss(test[target].values, pred_ans), 4))
print("test AUC", round(roc_auc_score(test[target].values, pred_ans), 4))

相关资料

  • DeepCTR-Torch代码主页

https://github.com/shenweichen/DeepCTR-Torch
  • DeepCTR-Torch文档:

    https://deepctr-torch.readthedocs.io/en/latest/index.html

  • DeepCTR(tensorflow版)代码主页 :

    https://github.com/shenweichen/DeepCTR

  • DeepCTR(tensorflow版)文档:

    https://deepctr-doc.readthedocs.io/en/latest/index.html

作者简介

沈伟臣,浙江大学计算机硕士,阿里巴巴集团算法工程师

沈伟臣曾经参与了《DeepLearning.ai深度学习》笔记的编写。

github主页:

https://github.com/shenweichen

知乎专栏 浅梦的学习笔记  

https://zhuanlan.zhihu.com/weichennote

邮箱 wcshen1994@163.com 


本站简介↓↓↓ 

“机器学习初学者”是帮助人工智能爱好者入门的个人公众号(创始人:黄海广)

初学者入门的道路上,最需要的是“雪中送炭”,而不是“锦上添花”。

640?wx_fmt=jpeg

本站的知识星球(黄博的机器学习圈子)ID:92416895

目前在机器学习方向的知识星球排名第一(上图二维码)

往期精彩回顾

备注:加入本站微信群或者qq群,请回复“加群

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

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

相关文章

JAVA编程心得-Eclipse/MyEclipse 中文乱码解决办法

将别人的项目或JAVA文件导入到自己的Eclipse中时,常常会出现JAVA文件的中文注释变成乱码的情况,主要原因就是别人的IDE编码格式和自己的Eclipse编码格式不同。 总结网上的建议和自己的体会,可以参考以下几种解决方式: 1 改变整个…

程序员相亲图鉴

程序员,已经渐渐成当代相亲市场的一只主力军。甚至可以说是“香饽饽”。越来越多的妹子,在写择偶要求时,会说对程序员有好感。因为他们,踏实聪明又靠谱,钱多花花肠子少。但关于程序员谈恋爱的“笑点”也不少&#xff0…

delphi XE4 隐藏程序在任务管理器和隐藏任务栏

最新处理方法,偶然发现delphi下有个ShowMainForm属性,只要在Application.Initialize;后面加上Application.ShowMainForm : false;就可以了。 以下的方法不用看了。 隐藏程序在任务管理器:在工程文件中注释掉下面代码://Applicatio…

推荐几个提高工作效率的神器

推荐几个提高工作效率的神器,只要用到电脑的工作都适用,可以大大提高工作效率。本文所提到的装备经过本人试用,所有价格来自京东网,建议根据自己的经济条件购买装备(理论上越贵越好),不建议购买…

判断1个整数的二进制形式的1的个数

int main() {int n;cin >> n;int num 0;while(n){n & (n-1);num;}cout << num <<endl;return 0; }转载于:https://www.cnblogs.com/liuweilinlin/p/3300031.html

终于等到你!GitHub 终于支持 multi-line comments!

今天&#xff08;北京时间 2019 年 10 月 2 日&#xff09;&#xff0c;GitHub CEO Nat Friedman 在 Twitter 发布消息&#xff0c;宣布 GitHub pull request 正式支持 multi-line comments&#xff01;相信一直用 GitHub 进行 PR review 的童鞋&#xff0c;一定对于 GitHub 的…

github标星11600+:最全的吴恩达机器学习课程资源(完整笔记、中英文字幕视频、python作业,提供百度云镜像!)...

吴恩达老师的机器学习课程&#xff0c;可以说是机器学习入门的第一课和最热门课程&#xff0c;我在github开源了吴恩达机器学习个人笔记&#xff0c;用python复现了课程作业&#xff0c;成为热门项目&#xff0c;star数达到11671&#xff0c;曾经有相关报道文章。科学无国界&am…

Oracle 锁表

今天在开发自动预警的时候&#xff0c;发现一个表被锁了&#xff0c;mark 之后细看&#xff1a; "ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效"的快速解决方法 今天在导一个临时表的数据&#xff0c;导出完成后准备清空数据&#xff0c;执行tr…

github标星8331+:吴恩达深度学习课程资源(完整笔记、中英文字幕视频、python作业,提供百度云镜像!)...

吴恩达老师的深度学习课程&#xff08;deeplearning.ai&#xff09;&#xff0c;可以说是深度学习入门的最热门课程&#xff0c;我和志愿者编写了这门课的笔记&#xff0c;并在github开源&#xff0c;star数达到8331&#xff0c;曾经有相关报道文章。为解决github下载速度较慢&…

《转》Ubuntu 12.04常用的快捷键

Ubuntu 12.04常用的快捷键超级键操作1、超级键&#xff08;Win键&#xff09;–打开dash。www.2cto.com 2、长按超级键– 启动Launcher。并快捷键列表。3、按住超级键&#xff0c;再按1,2,3等数字键–从Launcher打开一个应用程序&#xff0c;当你按住超级键时&#xff0c;每个…

GitHub上有哪些比较好的计算机视觉/机器视觉的项目?

来源&#xff1a;Unsplash&#xff0c;作者&#xff1a; JR Korpa 来源&#xff1a;知乎问题今天分享一下 Github 上不错的计算机视觉或者机器视觉方面的项目&#xff0c;包括入门的教程、非常经典的算法和实战项目等等。今日推荐文章github标星11600&#xff1a;最全的吴恩达机…

Edittext焦点处理

<LinearLayout android:focusable"true"android:layout_width"0dp"android:layout_height"0dp"android:focusableInTouchMode"true"></LinearLayout> 转载于:https://www.cnblogs.com/LIANQQ/p/3305029.html

20个常用的Python小技巧

2019 年第 73 篇文章&#xff0c;总第 97 篇文章 原题 | 20 Python Snippets You Should Learn Today 作者 | Chaitanya Baweja 原文 | https://medium.com/better-programming/20-python-snippets-you-should-learn-today-8328e26ff124 译者 | kbsc13("算法猿的成长&q…

Google Analytics Advanced Configuration - Google Analytics 高级配置

该文档提供了Android SDK v3的部分元素的高级配置说明。 Overview - 概述 Android Google Analytics SDK提供了Tracker类&#xff0c;应用可以用它给Google Analytics设置和发送数据&#xff0c;GoogleAnalytics的单例为你实现的全局配置值提供了接口。 Initialization - 初始化…