【原创】推荐广告入门: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…

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

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

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

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

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

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

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

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

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

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

20个常用的Python小技巧

2019 年第 73 篇文章,总第 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…

leetcode 刷500道题,笔试/面试稳吗?谈谈算法的学习

来源公众号:苦逼的码农作者:帅地想要学习算法、应付笔试或者应付面试手撕算法题,相信大部分人都会去刷 Leetcode,有读者问?如果我在 leetcode 坚持刷它个 500 道题,以后笔试/面试稳吗?这里我说下…

hdu4714 Tree2cycle 把树剪成链

题目是问把一棵树通过剪边、加边形成一个环的最小代价。 分成两步,先把树剪成一些链,再把链连接成一个环。 设一棵有n个节点的树,剪掉X条边后,形成L条链。 那么代价为XL。 n-1-XedgeNum(L条链) ① //原本有n-1条边,剪掉…

github标星58500+:常见数据结构与算法的python实现

昨天分享的文章介绍了如何学习数据结构算法:今天介绍一个 github 仓库,用 Python 实现了常见的数据结构与算法。另外,前几天的红包抽奖,今晚就开奖了,还没参与的,赶紧点进来:有人问我数据结构与…

【吐血整理】那些让你起飞的计算机基础知识:学什么,怎么学?

作者:帅地来源公众号:苦逼的码农我公众号里的文章,写的大部分都是与计算机基础知识相关的,这些基础知识,就像我们的内功,如果在未来想要走的更远,这些内功是必须要修炼的。框架千变万化&#xf…