Deep Crossing模型是由微软提出,在微软的搜索引擎bing的搜索广告场景当中,用户除了会返回相关的结果,还会返回相应的广告,因此尽可能的增加广告的点击率,是微软所考虑的重中之重。

因此才设计出了Deep Crossing模型来解决这个问题。这个模型的结构如下所示:

最下面的各种feature是我们输入层,表示了针对特定的应用背景,微软使用的特征如下:

  • Query(搜索):用户搜索的关键词;
  • Keyword(广告关键词):广告商对自己的产品广告打的标签,用于匹配用户的搜索词;
  • Title(标题):广告的标题;
  • Landing Page(落地网页):点击广告后跳转的网页;
  • Match Type(匹配类型):广告商可选择的关键字与用户查询的匹配程度,通常有四种:精确匹配、短语匹配、宽泛匹配和上下文相关匹配;
  • Campaign(广告计划):广告商投放的计划;
  • Imression(曝光样例):记录了该广告实际曝光场景的相关信息;
  • Click(点击样例):记录了该广告实际点击场景的相关信息;
  • Click Through Rate(点击率):广告的历史点击率
  • click prediction(预估点击率):另一个CTR模型的预估值;

Embedding层

几乎所有基于深度学习的推荐、CTR预估模型都离不开Embedding层,它的作用是将离散高维的稀疏特征转化为低维的密集型特征。Embedding矩阵的参数通过神经网络的反向传播进行训练。在模型结构中发现Feature #2并没有使用Embedding,因为文章提到“维度小于256的特征“不需要进行Embedding转化。

Stacking层

Stacking层的工作特别简单,就是将所有的Embedding向量、或者未进行Embedding操作的原生特征进行拼接。

Multiple Residual Units层

Deep Crossing模型中的Crossing就是多个残差单元层来实现。该层使用了残差网络的基本单元。也就是我们通常所说的ResNet.

Scoring层

Scoring层就也是输出层。一般情况下对于CTR预估模型,往往是一个二分类问题,因此采用逻辑回归来对点击进行预测,正好逻辑回归模型将我们的CTR,也就是点击率,投射到一个从0-1的空间内,形成一个概率,其意义正好和CTR相同。如果要考虑是一个多分类问题,则可以使用softmax进行预测。

代码用tensorflow2实现如下:

1.model.py

import tensorflow as tf
from tensorflow.keras import Model
from tensorflow.keras.regularizers import l2
from tensorflow.keras.layers import Embedding, Dense, Dropout, Inputfrom modules import Residual_Unitsclass Deep_Crossing(Model):def __init__(self, feature_columns, hidden_units, res_dropout=0., embed_reg=1e-6):"""Deep&Crossing:param feature_columns: A list. sparse column feature information.:param hidden_units: A list. Neural network hidden units.:param res_dropout: A scalar. Dropout of resnet.:param embed_reg: A scalar. The regularizer of embedding."""super(Deep_Crossing, self).__init__()self.sparse_feature_columns = feature_columnsself.embed_layers = {'embed_' + str(i): Embedding(input_dim=feat['feat_num'],input_length=1,output_dim=feat['embed_dim'],embeddings_initializer='random_uniform',embeddings_regularizer=l2(embed_reg))for i, feat in enumerate(self.sparse_feature_columns)}# the total length of embedding layersembed_layers_len = sum([feat['embed_dim'] for feat in self.sparse_feature_columns])self.res_network = [Residual_Units(unit, embed_layers_len) for unit in hidden_units]self.res_dropout = Dropout(res_dropout)self.dense = Dense(1, activation=None)def call(self, inputs):sparse_inputs = inputssparse_embed = tf.concat([self.embed_layers['embed_{}'.format(i)](sparse_inputs[:, i])for i in range(sparse_inputs.shape[1])], axis=-1)r = sparse_embedfor res in self.res_network:r = res(r)r = self.res_dropout(r)outputs = tf.nn.sigmoid(self.dense(r))return outputsdef summary(self):sparse_inputs = Input(shape=(len(self.sparse_feature_columns),), dtype=tf.int32)Model(inputs=sparse_inputs, outputs=self.call(sparse_inputs)).summary()

2.modules.py

import tensorflow as tf
from tensorflow.keras.layers import Dense, ReLU, Layerclass Residual_Units(Layer):"""Residual Units"""def __init__(self, hidden_unit, dim_stack):""":param hidden_unit: A list. Neural network hidden units.:param dim_stack: A scalar. The dimension of inputs unit."""super(Residual_Units, self).__init__()self.layer1 = Dense(units=hidden_unit, activation='relu')self.layer2 = Dense(units=dim_stack, activation=None)self.relu = ReLU()def call(self, inputs, **kwargs):x = inputsx = self.layer1(x)x = self.layer2(x)outputs = self.relu(x + inputs)return outputs

3.train.py

import tensorflow as tf
from tensorflow.keras.callbacks import EarlyStopping
from tensorflow.keras.losses import binary_crossentropy
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.metrics import AUCfrom model import Deep_Crossing
from data_process.criteo import create_criteo_datasetimport osos.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'if __name__ == '__main__':# =============================== GPU ==============================# gpu = tf.config.experimental.list_physical_devices(device_type='GPU')# print(gpu)# If you have GPU, and the value is GPU serial number.os.environ['CUDA_VISIBLE_DEVICES'] = '4'# ========================= Hyper Parameters =======================# you can modify your file pathfile = '../dataset/Criteo/train.txt'read_part = Truesample_num = 5000000test_size = 0.2embed_dim = 8dnn_dropout = 0.5hidden_units = [256, 128, 64]learning_rate = 0.001batch_size = 4096epochs = 10# ========================== Create dataset =======================feature_columns, train, test = create_criteo_dataset(file=file,embed_dim=embed_dim,read_part=read_part,sample_num=sample_num,test_size=test_size)train_X, train_y = traintest_X, test_y = test# ============================Build Model==========================mirrored_strategy = tf.distribute.MirroredStrategy()with mirrored_strategy.scope():model = Deep_Crossing(feature_columns, hidden_units)model.summary()# =========================Compile============================model.compile(loss=binary_crossentropy, optimizer=Adam(learning_rate=learning_rate),metrics=[AUC()])# ============================model checkpoint======================# check_path = 'save/deep_crossing_weights.epoch_{epoch:04d}.val_loss_{val_loss:.4f}.ckpt'# checkpoint = tf.keras.callbacks.ModelCheckpoint(check_path, save_weights_only=True,#                                                 verbose=1, period=5)# ===========================Fit==============================model.fit(train_X,train_y,epochs=epochs,callbacks=[EarlyStopping(monitor='val_loss', patience=2, restore_best_weights=True)],  # checkpointbatch_size=batch_size,validation_split=0.1)# ===========================Test==============================print('test AUC: %f' % model.evaluate(test_X, test_y, batch_size=batch_size)[1])

【推荐系统】:Deep Crossing模型解析以及代码实现相关推荐

  1. 推荐系统-Deep Crossing理论与python实现

    简介 2016年,微软提出Deep Crossing模型,旨在解决特征工程中特征组合的难题,降低人力特征组合的时间开销,通过模型自动学习特征的组合方式,也能达到不错的效果,且在各种任务中表现出较好的稳 ...

  2. 【推荐系统论文精读系列】(八)--Deep Crossing:Web-Scale Modeling without Manually Crafted Combinatorial Features

    文章目录 一.摘要 二.介绍 三.相关工作 四.搜索广告 五.特征表示 5.1 独立特征 5.2 组合特征 六.模型架构 6.1 Embedding层 6.2 Stacking层 6.3 Residu ...

  3. 2.Deep Crossing: Web-Scale Modeling without Manually Crafted Combinatorial Features论文核心解读以及代码实现

    一.背景 微软于2016年提出的Deep Crossing可以说是深度学习CTR模型的最典型和基础性的模型.它涵盖了深度CTR模型最典型的要素,即通过加入embedding层将稀疏特征转化为低维稠密特 ...

  4. Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN

    本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep learning简介 [2]Deep Learning训练过程 [3]Deep Learning模型之 ...

  5. [转]Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN

    Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN 原文地址:http://m.blog.csdn.net/blog/wu010555688/24487301 本文整理了网上几位 ...

  6. Qt Creator使用Clang代码模型解析C ++文件

    Qt Creator使用Clang代码模型解析C ++文件 使用Clang代码模型解析C ++文件 关于Clang代码模型 配置C语代码模型 lang检查 在项目级别指定Clang代码模型设置 使用编 ...

  7. 推荐系统:CTR模型学习总结--LR、FM、FFM、Wide and Deep、DeepFM

    推荐系统概括 推荐系统方法综述 推荐系统的目的 评价指标 Accuracy logloss AUC F1 score Collaborative Fliter CTR LR POLY2 FM FFM ...

  8. 推荐系统4--AutoRec与Deep Crossing(改变神经网络的复杂程度)

    一,绪论 本篇是深度学习推荐系统第一篇,介绍Autorec和DeepCrossing 两个模型.前者是将深度学习的思想应用于推荐系统的初步尝试,后者是将深度学习框架在推荐系统中的完整应用. Autor ...

  9. SegNet分割模型解析(含详细代码及注释)

    目录 模型特点 完整代码 SegNet是剑桥大学于2015年提出的分割模型 模型特点 1. backbone: vgg16 2. encoder-decoder,左右网络层对称. encoder中,卷 ...

最新文章

  1. python construct_python入门第一步
  2. 为什么很多公司转型Go语言开发?Go语言能做什么
  3. 5G的频谱效率,到底有多高
  4. 学Android的学习规划
  5. 解决: Failed to execute ... maven-deploy-plugin... Return code is: 401, ReasonPhrase: Unauthorized.
  6. StyleGAN-基于样式的生成对抗网络(论文阅读总结)(精)
  7. js获取对象数组中指定属性值对象_3分钟学会操作JavaScript内置对象,快来试试吧...
  8. lavavel php 手册,Laravel文档工具
  9. Python实现本地翻译API
  10. linux配置jdk环境变量
  11. 全概率公式和贝叶斯公式(转载)
  12. niosii spi 外部_【笔记】NIOS II spi详解
  13. 单片机数码管显示实操
  14. 云管边端架构图_新通信行业:阿里云构建云管边端物联网布局
  15. 使用这个vue snippets,提高百倍开发效率
  16. 2022.02.11学习总结(kmp)
  17. 网管的自我修养-人际关系
  18. ISAM2.h/ISAM2.cpp
  19. 【视频笔记】华中农业大学-分子生物学:P7-基因的结构 1
  20. 整车新产品研发的多项目管理分析

热门文章

  1. 织梦系统基本参数php,织梦后台系统基本参数新增的变量数据库修改
  2. 精密仪器及机械类毕业论文文献包含哪些?
  3. 清华大学计算机学院软件工程,中国“软件工程”专业最好的3所大学,都是985,清华大学上榜...
  4. 数据驱动VR流体仿真技能
  5. 致 Tapdata 开源贡献者:聊聊 2022 年的进展和新一年的共建计划
  6. linux上热编译react,reactos终于被成功编译通过
  7. 后端——》Java程序推送微信订阅消息
  8. ArcEngine旋转IRotateTracker
  9. Linux使用Aria2命令下载BT种子/磁力/直链文件
  10. 【报告分享】2021巨量引擎金融行业生态及用户洞察报告-巨量算数(附下载)