您对华为云开发者网站的整体评价?

非常不满意 非常满意

0

1

2

3

4

5

6

7

8

9

10

*您遇到了哪些问题?(最多选三项)
*您感到满意的原因是?(最多选三项)
*请针对您所遇到的问题给出具体的反馈
200/200
算法
推荐搜索(点击率预估)-DeepFM-GPU
华为自研 Wide & Deep 推荐模型
ModelArts
49个月以前
96KB 1851 1760
  • 标签
    表格搜索推荐GPU训练CPU推理GPU推理公有云TensorFlow-1.x深度学习ModelArtsTensorFlowGPUCPU
  • 资产ID 82cc6f9c-819e-4040-b033-10dfd7cac75b

描述

DeepFM for CTR

1. 概述

DeepFM推荐网络基于DeepFM: A Factorization-Machine based Neural Network for CTR Prediction实现,是一个端到端的模型,不需要人工特征工程。 DeepFM模型结合了广度和深度模型的优点,联合训练FM模型和DNN模型,来同时学习低阶特征组合和高阶特征组合,从而能够学习到各阶特征之间的组合关系。该模型的Deep component和FMcomponent从Embedding层共享数据输入,优势在于Embedding层的隐式向量在(残差反向传播)训练时可以同时接受到Deep component和FM component的信息,从而使Embedding层的信息表达更加准确而最终提升推荐效果。

DeepFM网络的基本结构如下图。

DeepFM_structure

2. 数据准备

###2.1. 数据介绍
Criteo数据集为例。

Criteo原始训练数据集为train.txt, 测试集为test.txt。 样例如下。
demo_origin_data

criteo 原始数据中,第一列为label,表示是否点击,后续39列为特征列,其中前13列为连续值特征,后26列为离散类别特征(为经过hash处理后的字符串)。原始数据集需要经过数据预处理之后才能进行训练。

###2.2. 数据预处理

数据预处理详情请参考DeepFM数据预处理,或者使用自己的预处理脚本(可忽略本文档预处理流程), 但数据输出格式必须和此文档保持一致。

####2.2.1 预处理流程

  • 统计各连续值列的min-max value; 统计各类别列的词典频次字典;

  • 按threshold=100,对频次词典进行过滤,得到类别映射为id的map字典;

  • 对连续值进行MinMaxScaler; 将类别列特征映射为 id 值;

  • 最后得到feature特征分为两种,id特征 和 weights特征 。

    • id特征存储的值都是map id,包括:
      • 连续特征列的map id(本例连续特征共13列,map id分别对应0-12)
      • 离散特征列的map id值(26列)
    • weights特征包括:
      • 连续值weights(MinMaxScaler处理后的值)
      • 离散值weights(有值的部分为1,Nan(空值)的为0)

处理后的特征数据保存为H5文件,特征数据共78列(0-38为id特征列,39-77为weights特征列),内容格式如下:
criteo feature数据:
demo_input_features

criteo label数据:
demo_output_label

####2.2.2 数据输出格式

处理之后的数据格式如下:

output_path
  |- preprocessed_data(预处理后的txt格式数据)
    |- train_part_0.txt
    |- train_part_1.txt
    |- test_part_0.txt
    |- ...
  |- stats_dict (用于在线推理服务)
    |- cat_count_dict.pkl
    |- val_min_dict.pkl
    |- val_max_dict.pkl
    |- multi_cat_count_dict.pkl
  |- tfrecord (预处理后的tfrecord格式数据,训练使用tfrecord格式)
    |- train_part_0.tfrecord
    |- train_part_1.tfrecord
    |- test_part_0.tfrecord
    |- ...
  |- fixed.txt ()
  |- param.toml(用于训练和在线推理的数据和模型参数)

3. 训练

3.1. 算法基本信息

  • 任务类型:推荐系统
  • 支持的框架引擎:TF-1.13.1-python3.6

3.2. 订阅算法

订阅算法流程请参考使用AI市场的预置算法训练模型-订阅算法

3.3 创建训练作业

数据预处理完成之后,将预处理后的数据迁移至OBS,上传OBS请参考如何上传数据至OBS?

注意: 如果使用自定义预处理脚本,数据输出格式一定要和2.2.2 数据输出格式保持一致。

使用订阅算法创建训练作业请参考 使用AI市场的预置算法训练模型-创建训练作业
区别在于,数据来源选择数据存储位置,选择上传的OBS路径即可,例如,上传的OBS路径为:/my-bucket/deepfm/output_path/(目录结构与2.2.2 数据输出格式保持一致),则数据存储位置为/my-bucket/deepfm/output_path。
算法默认会去选择 tfrecord文件夹下的数据,并加载param.yaml中的参数进行训练,stats_dict文件夹用于适配在线推理服务。

3.4. 训练参数说明

param.toml中包含的参数有num_features、num_inputs、train_size、test_size、line_per_sample、value_col_num、category_col_num、threshold、multi_category_len、train_tag、test_tag、feat_sep、multi_category_sep
**算法默认会去加载param.toml中的训练参数,用户无需填写。**加载参数包括:num_features、num_inputs、train_size、test_size、line_per_sample、multi_category_len、train_tag、test_tag、feat_sep、multi_category_sep。其中threshold、value_col_num、category_col_num、multi_category_len、feat_sep、multi_category_sep用于在线推理,与训练无关。会在训练结束后将这6个参数写入model文件夹用于在线推理。其他参数,可适当修改。

  • multi_category_len: list类型,记录每个多值特征的长度。
  • feat_sep: 特征间的分割符号,包括连续、离散、多值特征。
  • multi_category_sep: 多值特征间的分割符号。

参数详细说明请参考下表:

名称 默认值 类型 是否必填 是否可修改 描述
batch_size 1000 int True 每步训练的样本数量
n_epoches 40 int True 训练的epoch个数,一个epoch代表遍历一次完整的数据集
l2_v 1e-4 float True L2 正则损失系数
optimizer lazy_adam string True 优化器,支持lazy_adam或adam
loss_mode full string True 损失函数,支持batch或者full
learning_rate 5e-4 float True adam优化器学习率策略
evaluate_every_n_epochs 1 int True 每n个epoch做一次验证
print_freq 100 int True 训练日志打印频率,步数
perform_shuffle True string True 训练时数据集是否shuffle
num_features None int True 数据词典总量,请根据数据集如实填写(若使用本文档提供的预处理脚本,会在param.toml文件中输出,无需填写)
num_inputs None int True 预处理后的数据特征个数,请根据数据集如实填写(若使用本文档提供的预处理脚本,会在param.toml文件中输出,无需填写)
train_size None int True 训练样本个数,请根据数据集如实填写(若使用本文档提供的预处理脚本,会在param.toml文件中输出,无需填写)
test_size None int True 测试样本个数,请根据数据集如实填写(若使用本文档提供的预处理脚本,会在param.toml文件中输出,无需填写)
line_per_sample 1000 int True tfrecord文件每条记录存储的样本数
train_tag None string True tfrecord训练数据的文件匹配关键字(若使用本文档提供的预处理脚本,会在param.toml文件中输出,无需填写)
test_tag None string True tfrecord测试数据的文件匹配关键字(若使用本文档提供的预处理脚本,会在param.toml文件中输出,无需填写)

3.5. 训练输出文件

output_path
  |- checkpoint(模型保存路径)
    |- DeepFM-1.meta
    |- DeepFM-1.index
    |- DeepFM-1.data-00000-of-00001
    |- ...
    |- DeepFM-checkpoint
  |- log (模型日志)
    |- DeepFM
  |- model(用于在线推理的模型)
    |- stats_dict
      |- cat_count_dict.pkl
      |- val_min_dict.pkl
      |- val_max_dict.pkl
      |- multi_cat_count_dict.pkl
    |- variables(模型文件)
      |- variables.data-00000-of-00001
      |- variables.index
    |- saved_model.pb(模型文件)
    |- customize_service.py(在线推理脚本)
    |- config.json(在线推理配置文件)
    |- param.toml(在线推理参数文件)
  |- summary
    |- events.out.tfevents.xxx.localhost.localdomain

4. GPU/CPU推理

训练作业完成之后即可管理模型,部署模型进行在线推理。

管理模型请参考:管理模型

部署模型请参考:部署模型

注意:推理配置文件model/config.json, 默认使用CPU推理镜像(runtime:tf1.xx-python3.x-cpu )。
若使用GPU推理,导入模型之前需修改model/config.json文件,将runtime字段修改为:tf1.xx-python3.x-gpu。

推理数据输入格式为list, list中的每个值是原始数据的一条样本字符串,每条字符串的特征以“\t”分隔符(Tab)分开。
例如推理2个样本的输入如下,每个样本的特征长度为39:

{"text":[
"1\t23\t1\t14\t56\t15\t10\t35\t161\t1\t2\t0\t15\t5bfa8ab5\t09e68b86\taa8c1539\t85dd697c\t4cf72387\t7e0ccccf\t845fb196\t5b392875\ta73ee510\t6997b535\t911b463c\td8c29807\t0c9cc756\t8ceecbc8\td2f03b75\tc64d548f\t07c540c4\t63cdbb21\tcf99e5de\t5840adea\t5f957280\t1f89b562\t32c7478e\t1793a828\te8b83407\tb7d9c3bc",
"0\t22\t12\t14\t15308\t497\t1\t44\t258\t0\t1\t0\t16\t68fd1e64\t2c16a946\t004273d4\t65723153\tf281d2a7\tfbad5c96\tac652f55\tc8ddd494\ta73ee510\t3b08e48b\t5a0a81aa\td9a59982\t99b38f98\tb28479f6\t3628a186\tc0c7a39b\td4bb7bd8\te4ca448c\tad3062eb\t946027cb\t335a6a1e\t32c7478e\t9117a34a\tac73f6cb\t001f3601\ta3efae54"
]}

备注:如果数据包含多值特征,假如多值特征的分隔符是“,",以2列多值特征为例,则推理输入数据请参考(仅供参考):

{"text":[
"1\t23\t1\t14\t56\t15\t10\t35\t161\t1\t2\t0\t15\t5bfa8ab5\t09e68b86\taa8c1539\t2,3,6,9,15,18,19\t1,2,3,4,5",
"0\t22\t12\t14\t158\t497\t1\t44\t258\t0\t1\t0\t16\t68fd1e64\td9a59982\t99b38f98\t5,7,15,18,32\t1,2,3,4,5"
]}

预测界面如下图:
在线服务

交付

华为云ModelArts

华北-北京一华北-北京四华北-乌兰察布一华东-上海一cn-east-4华南-广州西南-贵阳一

您可以在华为云ModelArts控制台直接使用资产,但无法下载资产

限制

公开

免费

无时长限制

版本

版本号
版本ID
发布时间
状态
版本说明
使用约束
7.0.0
7.0.0
2021-01-30 08:03
已完成
optimize
6.0.0
6.0.0
2020-11-13 03:37
已完成
--
5.0.0
5.0.0
2020-11-03 09:37
已完成
--

若您怀疑合法知识产权遭受侵犯,可以通过此链接进行投诉与建议。