写点什么

DeepCTR:易用可扩展的深度学习点击率预测算法库

  • 2019-05-08
  • 本文字数:2124 字

    阅读完需:约 7 分钟

DeepCTR:易用可扩展的深度学习点击率预测算法库

这个项目主要是对目前的一些基于深度学习的点击率预测算法进行了实现,如 PNN , WDL , DeepFM , MLR , DeepCross , AFM , NFM , DIN , DIEN , xDeepFM , NFFM , AutoInt 等,并且对外提供了一致的调用接口。关于每种算法的介绍这里就不细说了,大家可以看论文,看知乎,看博客,讲的都很清楚。


这里简单从整体上介绍一下 DeepCTR 这个库。首先这个不是一个框架,它不具有学术创新意义,目前也没有解决什么复杂的工程问题。它面向的对象是那些对深度学习以及 CTR 预测算法感兴趣的同学,可以利用这个库:


  1. 从一个统一视角来看待各个模型

  2. 快速地进行简单的对比实验

  3. 利用已有的组件快速构建新的模型

统一视角

DeepCTR 通过对现有的基于深度学习的点击率预测模型的结构进行抽象总结,在设计过程中采用模块化的思路,各个模块自身具有高复用性,各个模块之间互相独立。基于深度学习的点击率预测模型按模型内部组件的功能可以划分成以下 4 个模块:输入模块,嵌入模块,特征提取模块,预测输出模块。


快速实验


Criteo 数据集预览


下面是一个简单的用 DeepFM 模型在 criteo 数据集上训练的的例子。


import pandas as pdfrom sklearn.preprocessing import LabelEncoder, MinMaxScalerfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import log_loss, roc_auc_scorefrom deepctr.models import DeepFMfrom deepctr.utils import SingleFeatif __name__ == "__main__":
data = pd.read_csv('./criteo_sample.txt')
sparse_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'] # 1.Label Encoding for sparse features,and do simple Transformation for dense features 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]) # 2.count #unique features for each sparse field,and record dense feature field name sparse_feature_list = [SingleFeat(feat, data[feat].nunique()) for feat in sparse_features] dense_feature_list = [SingleFeat(feat, 0) for feat in dense_features] # 3.generate input data for model train, test = train_test_split(data, test_size=0.2) train_model_input = [train[feat.name].values for feat in sparse_feature_list] + \ [train[feat.name].values for feat in dense_feature_list] test_model_input = [test[feat.name].values for feat in sparse_feature_list] + \ [test[feat.name].values for feat in dense_feature_list] # 4.Define Model,train,predict and evaluate model = DeepFM({"sparse": sparse_feature_list, "dense": dense_feature_list}, final_activation='sigmoid') model.compile("adam", "binary_crossentropy", metrics=['binary_crossentropy'], ) history = model.fit(train_model_input, train[target].values, batch_size=256, epochs=10, verbose=2, validation_split=0.2, ) pred_ans = model.predict(test_model_input, batch_size=256)
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)))
复制代码

快速构建新模型

所有的模型都是严格按照 4 个模块进行搭建的,输入和嵌入以及输出基本都是公用的,每个模型的差异之处主要在特征提取部分。


下面是 DeepFM 模型的特征提取核心代码,大家也可以利用这些已有的组件去构建自己想要的模型。


fm_input = Concatenate(axis=1)(embed_list)#将输入拼接成FM层需要的shapedeep_input = Flatten()(fm_input)#将输入拼接成Deep网络需要的shapefm_out = FM()(fm_input)#调用FM组件deep_out = MLP(hidden_size, activation, l2_reg_deep, keep_prob,use_bn, seed)(deep_input)#调用Deep网络组件deep_logit = Dense(1, use_bias=False, activation=None)(deep_out)
复制代码

如何使用呢!?

首先确保你的 python 版本 >=3.4 然后:


pip install deepctr
复制代码


就可以安装成功啦!剩下的我建议你先来项目仓库点个赞,然后再去看说明文档!


DeepCTR 项目地址:


https://github.com/shenweichen/DeepCTR


Welcome to DeepCTR’s documentation!


地址:


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


最后就是欢迎感兴趣的同学一起来维护建设和交流,无论是文档,还是开发,还是测试,都欢迎~

作者介绍:

沈伟臣,阿里巴巴算法工程师,硕士毕业于浙江大学计算机学院。对机器学习,强化学习技术及其在推荐系统领域内的应用具有浓厚兴趣。


本文来自 沈伟臣 在 DataFun 社区的演讲,由 DataFun 编辑整理。


2019-05-08 08:006568

评论

发布
暂无评论
发现更多内容

大咖说·先临三维|技术入云塑造3D视觉行业新模式

科技pai

阿里云 科技 3D视觉

2022年中国母婴新消费市场专题分析

易观分析

母婴 消费市场

从 NASL 说开:低代码编程语言能饭否

石臻臻的杂货铺

11月月更

Linux中安装/部署docker-compose

A-刘晨阳

Docker Linux 运维 Docker-compose 11月月更

Docker搭建harbor私有镜像仓库(命令行模式)

A-刘晨阳

Docker Linux 运维 11月月更

数字先锋| 随时随地云端阅片,“云胶片”时代来啦!

天翼云开发者社区

双机热备与集群的区别分析-行云管家

行云管家

高可用 双机热备 双机

java面试之经典算法篇

钟奕礼

Java java面试 java编程 程序员 java

背完这3套Java面试题,年后offer接不停

钟奕礼

Java java面试 java编程 程序员java

3000人群被字节内部技术图谱炸翻了,惊艳级实用

小二,上酒上酒

Java 架构 技术栈 字节

就这样,进字节了?华为的Java面试题和八股文,真牛批

小二,上酒上酒

Java 面试题 八股文 Java面试题

“元宇宙家园”国脉大厦展馆上线 天翼云实时云渲染筑基未来数字世界

天翼云开发者社区

如何平衡客户和用户的诉求冲突?

QualityFocus

产品经理 需求 产品需求

瓴羊Quick BI在线电子表格,数据分析人员高效工作“神器”

巷子

智能时代如何打通商业市场?华为的内外兼修

这不科技

2023上海国际智慧灯杆及智慧路灯展览会

AIOTE智博会

上海智博会 智慧灯杆展会 智慧路灯展会

一文解决 Go 安装和常用环境变量的配置

陈明勇

Go 11月月更

南京等保测评公司有哪些?一共有几家?

行云管家

等保测评 等保备案 等保整改 南京等保测评

行业首个测试开发技术大赛开始报名啦~ 10万现金奖励等你来挑战

霍格沃兹测试开发学社

Linux中基于Docker搭建harbor私有镜像仓库(超级详细)

A-刘晨阳

Docker Linux 运维 Harbor 11月月更

涨薪跳槽利器!清华大佬总结的Java核心突击讲,一应俱全

钟奕礼

Java java程序员 java面试 java编程

Jenkins + Docker 一键自动化部署 Spring Boot 项目

小小怪下士

Java Docker jenkins springboot

PID和TID的区别

源字节1号

APP开发 低代码开发 小程序开发 网站开发

中国互联网大会天翼云展区大揭秘!

天翼云开发者社区

栈简介、手撸顺序栈、手撸链栈和栈的应用

C++后台开发

数据结构 后端开发 linux开发 C++开发

【C语言】return 关键字

謓泽

11月月更

把Mybatis Generator生成的代码加上想要的注释

京东科技开发者

maven IDEA 代码注释 MyBatis标签 Generator

物流通知:您的快递即刻送达!

天翼云开发者社区

5 分钟带你在本地搭建一套云原生实验环境

谢烟客

Kubernetes 云原生 Service Mesh istio kind

【PCB干货】是开窗还是盖油?想搞懂过孔工艺,看这篇就够了!

华秋PCB

PCB PCB设计 过孔 PCB工艺

企业需要进行信息化改革,有哪些好用的信息化管理系统推荐?

优秀

低代码 信息化 信息化管理

DeepCTR:易用可扩展的深度学习点击率预测算法库_数据库_DataFunTalk_InfoQ精选文章