DeepCrossing简介
DeepCrossing于2016年由微软提出,主要应用于Bing搜索引擎中搜索广告推荐场景,用户在搜索引擎中输入搜索词后,搜索引擎除返回相关结果,还返回搜索词相应的广告,预测广告点击率(Click Through Rate),并以此作为排序指标,是该模型的优化目标,下图为DeepCrossing的模型结构:
Layers及其各自的作用
1.Embedding层
该层的作用是将稀疏的类别型特征(如上图中的Feature#1)转换成稠密的Embedding向量,#Feature2中的数值型特征由于维度足够小,所以不需要Embedding。
2.Staking层
Staking层也被称为连接(concatenate)层,其作用是将不同的Embedding特征与数值型特征进行拼接,形成新的包含全部特征的特征向量。
3.Multiple Residual Units层
该层主要结构为多层感知机(MLP),DeepCrossing采用了多层残差网络作为MLP的实现方案,使特征向量各个维度充分交叉组合、模型能抓取更多非线性特征,从而提高模型的表达能力。
4.Scoring层
Scoring层作为输出层,目的是为了拟合优化目标,对于CTR预估模型,往往是一个二分类问题,因此采用逻辑回归来对点击进行预测
TensorFlow代码实操
数据集导入
if __name__ == "__main__":
# 读取数据
data = pd.read_csv('./data/criteo_sample.txt')
# 划分dense和sparse特征
columns = data.columns.values
dense_features = [feat for feat in columns if 'I' in feat]
sparse_features = [feat for feat in columns if 'C' in feat]
# 简单的数据预处理
train_data = data_process(data, dense_features, sparse_features)
train_data['label'] = data['label']
# 将特征做标记
dnn_feature_columns = [SparseFeat(feat, vocabulary_size=data[feat].nunique(),embedding_dim=4)
for feat in sparse_features] + [DenseFeat(feat, 1,)
for feat in dense_features]
模型搭建
# 构建DeepCrossing模型
history = DeepCrossing(dnn_feature_columns)
history.summary()
history.compile(optimizer="adam",
loss="binary_crossentropy",
metrics=["binary_crossentropy", tf.keras.metrics.AUC(name='auc')])
# 将输入数据转化成字典的形式输入
train_model_input = {
name: data[name] for name in dense_features + sparse_features}
# 模型训练
history.fit(train_model_input, train_data['label'].values,
batch_size=64, epochs=5, validation_split=0.2, )
完整代码
import warnings
warnings.filterwarnings("ignore")
import itertools
import pandas as pd
import numpy as np
from tqdm import tqdm
from collections import namedtuple
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.layers import *
from tensorflow.keras.models import *
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler