专栏首页Soul Joy Hub深度推荐模型——xDeepFM [KDD 18][Microsoft]

深度推荐模型——xDeepFM [KDD 18][Microsoft]

视频讲解:https://www.yuque.com/chudi/tzqav9/ny150b#aalY8

import tensorflow as tf
from tensorflow import keras
from utils import *

EPOCH = 10
BATCH_SIZE = 32
VEC_DIM = 10
DNN_LAYERS = [64, 128, 64]
CIN_LAYER_NUMS = [16, 16, 16, 16]
DROPOUT_RATE = 0.5

base, test = loadData()
# 所有的特征各个类别值个数之和
FEAT_CATE_NUM = base.shape[1] - 1
K = tf.keras.backend


def run():
    # 返回id化特征 和 one-hot特征
    val_x_id, val_x_hot, val_y = getAllData(test)
    train_x_id, train_x_hot, train_y = getAllData(base)
    cate_num = val_x_id[0].shape[0]
    hot_num = val_x_hot[0].shape[0]

    inputs_id = keras.Input((cate_num,))
    emb_0 = keras.layers.Embedding(FEAT_CATE_NUM, VEC_DIM, input_length=cate_num)(
        inputs_id)  # (batch , cate_num, VEC_DIM)
    emb_1 = keras.layers.Flatten()(emb_0)  # (batch , cate_num * VEC_DIM)
    deep = keras.layers.Dropout(DROPOUT_RATE)(emb_1)
    # lr部分
    lr = keras.Input((hot_num,))
    # CIN 部分
    cin_outputs = []
    x0 = tf.split(emb_0, VEC_DIM, 2)  # (VEC_DIM , batch , cate_num , 1)
    x0 = tf.transpose(x0, perm=[1, 0, 2, 3])  # (batch , VEC_DIM , cate_num , 1)
    xl = x0
    for hk in CIN_LAYER_NUMS:
        hk_pre = xl.shape[2]
        z_tensor = tf.matmul(x0, xl, transpose_b=True)  # (batch , VEC_DIM , cate_num , hk_pre)
        z_tensor = tf.reshape(z_tensor, shape=[-1, VEC_DIM, cate_num * hk_pre])  # (batch , VEC_DIM , cate_num * hk_pre)
        x_tensor = tf.keras.layers.Conv1D(filters=hk, kernel_size=1, strides=1, padding='valid',
                                          activation='relu')(z_tensor)  # (batch , VEC_DIM , hk)
        x_tensor = tf.transpose(x_tensor, perm=[0, 2, 1])  # (batch , hkl , VEC_DIM)
        cin_outputs.append(tf.reduce_sum(x_tensor, axis=2))  # (batch , hkl)
        xl = tf.split(x_tensor, VEC_DIM, 2)  # (VEC_DIM , batch , hkl , 1)
        xl = tf.transpose(xl, perm=[1, 0, 2, 3])  # (batch , VEC_DIM , hkl , 1)

    # deep部分
    for units in DNN_LAYERS:
        deep = keras.layers.Dense(units, activation='relu')(deep)
        deep = keras.layers.Dropout(DROPOUT_RATE)(deep)

    x_deep_fm = keras.layers.concatenate([lr, deep] + cin_outputs)

    x_deep_fm = keras.layers.Dropout(DROPOUT_RATE)(x_deep_fm)
    outputs = keras.layers.Dense(1, activation='sigmoid', kernel_regularizer=keras.regularizers.l2(0.001))(x_deep_fm)

    model = keras.Model(inputs=[inputs_id, lr], outputs=outputs)
    model.compile(loss='binary_crossentropy', optimizer=tf.train.AdamOptimizer(0.001), metrics=[keras.metrics.AUC()])
    tbCallBack = keras.callbacks.TensorBoard(log_dir='./logs',
                                             histogram_freq=0,
                                             write_graph=True,
                                             write_grads=True,
                                             write_images=True,
                                             embeddings_freq=0,
                                             embeddings_layer_names=None,
                                             embeddings_metadata=None)

    model.fit([train_x_id, train_x_hot], train_y, batch_size=BATCH_SIZE, epochs=EPOCH, verbose=2,
              validation_data=([val_x_id, val_x_hot], val_y),
              callbacks=[tbCallBack])


run()

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 20篇最值得一读的深度推荐系统与CTR预估论文

    微博上近日流传一个段子,“2020年曾是各大科幻片中遥远的未来,但是现在离这个遥远的未来也只有6个月时间了”。只是借此感慨一下2019年转瞬之间半年的时间已经过...

    AI科技大本营
  • 一文尽览推荐系统模型演变史

    4. 整理此文的目的是给大家一个清晰的脉络,可当作一篇小小综述。从信息过载概念的提出到推荐系统的起源,从前深度学习时代的推荐系统到劲头正热的深度推荐系统,再到最...

    张小磊
  • CTR点击率预估论文集锦

    CTR预估对于搜索、推荐和广告都是非常重要的一个场景,近年来CTR预估技术更新迭代,层出不穷。这篇文章将记录CTR预估著名模型的相关论文。以下按照年份整理。

    用户3578099
  • KDD 2019 | 自动探索特征组合,第四范式提出新方法AutoCross

    论文:AutoCross: Automatic Feature Crossing for Tabular Data in Real-World Applicat...

    机器之心
  • XDeepFM高阶特征交互,特征交互:一种极深因子分解机模型

    对于预测性的系统来说,特征工程起到了至关重要的作用。特征工程中,挖掘交叉特征是至关重要的。交叉特征指的是两个或多个原始特征之间的交叉组合。例如,在新闻推荐场景中...

    机器学习AI算法工程
  • 推荐系统遇上深度学习(二十二)--DeepFM升级版XDeepFM模型强势来袭!

    今天我们要学习的模型是xDeepFM模型,论文地址为:https://arxiv.org/abs/1803.05170。文中包含我个人的一些理解,如有不对的地方...

    石晓文
  • KDD 2019放榜!录取率仅14%,强调可重现性

    ACM SIGKDD(国际数据挖掘与知识发现大会,简称 KDD)是世界数据挖掘领域的最高级别的学术会议,由 ACM 的数据挖掘及知识发现专委会(SIGKDD)主...

    新智元
  • KDD 2019放榜!录取率仅14%,强调可重现性

    ACM SIGKDD(国际数据挖掘与知识发现大会,简称 KDD)是世界数据挖掘领域的最高级别的学术会议,由 ACM 的数据挖掘及知识发现专委会(SIGKDD)主...

    磐创AI
  • GitHub微软_推荐者:推荐系统的最佳实践

    https://github.com/microsoft/recommenders/

    代码医生工作室

扫码关注云+社区

领取腾讯云代金券