专栏首页Soul Joy Hub深度推荐模型——PNN [TOIS 16][交大]

深度推荐模型——PNN [TOIS 16][交大]

视频讲解: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]
DROPOUT_RATE = 0.5

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


def run():
    # 将所有的特征的各个类别值统一id化。x中每行为各特征的类别值的id
    val_x, val_y = getAllData(test)
    train_x, train_y = getAllData(base)
    cate_num = val_x[0].shape[0]
    sub_emb_arr = []
    product_list = []

    inputs = keras.Input((cate_num,))
    emb = keras.layers.Embedding(FEAT_CATE_NUM, VEC_DIM, input_length=cate_num)(inputs)
    liner = keras.layers.Flatten()(emb)

    # 将emb切分成各个field的小emb
    split_arr = tf.split(emb, cate_num, 1)
    for split in split_arr:
        sub_emb_arr.append(keras.layers.Flatten()(split))

    # 内积
    for i in range(0, len(sub_emb_arr)):
        for j in range(i + 1, len(sub_emb_arr)):
            product_list.append(keras.layers.Dot(axes=1)([sub_emb_arr[i], sub_emb_arr[j]]))

    dense = keras.layers.concatenate(product_list + [liner])
    dense = keras.layers.Dropout(DROPOUT_RATE)(dense)

    for units in DNN_LAYERS:
        dense = keras.layers.Dense(units, activation='relu')(dense)
        dense = keras.layers.Dropout(DROPOUT_RATE)(dense)
    outputs = keras.layers.Dense(1, activation='sigmoid')(dense)

    model = keras.Model(inputs=inputs, 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, train_y, batch_size=BATCH_SIZE, epochs=EPOCH, verbose=2, validation_data=(val_x, val_y),
              callbacks=[tbCallBack])


run()

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 推荐系统遇上深度学习(六)--PNN模型理论和实践

    推荐系统遇上深度学习(五)--Deep&Cross Network模型理论和实践

    石晓文
  • XDeepFM高阶特征交互,特征交互:一种极深因子分解机模型

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

    机器学习AI算法工程
  • PNN:Product-based Neural Networks for User Response Prediction

    现在推荐系统,网络搜索和在线广告的数据大多是分类的,并包含多个字段,有一个典型的方法将他们转化成高维稀疏二进制特征表示就是通过one-hot编码。对于这些高维稀...

    用户3578099
  • 谷歌、阿里们的杀手锏:3大领域,10大深度学习CTR模型演化图谱(附论文)

    今天我们一起回顾一下近3年来的所有主流深度学习CTR模型,也是我工作之余的知识总结,希望能帮大家梳理推荐系统、计算广告领域在深度学习方面的前沿进展。

    数据派THU
  • 谷歌、阿里们的杀手锏:三大领域,十大深度学习CTR模型演化图谱

    今天我们一起回顾一下近3年来的所有主流深度学习CTR模型,也是我工作之余的知识总结,希望能帮大家梳理推荐系统、计算广告领域在深度学习方面的前沿进展。

    AI科技大本营
  • 深入理解推荐系统:特征交叉组合模型演化简史

    深入理解推荐系统:Fairness、Bias和Debias​mp.weixin.qq.com

    Coggle数据科学
  • 腾讯Angel亮相VLDB,携全新Angel 2.0宣布加入LF深度学习基金会

    北京时间8月27日,全球数据库三大顶级会议之一——VLDB(Very Large Data Bases Conferences)在巴西里约热内卢召开。腾讯AI...

    腾讯高校合作
  • 腾讯Angel亮相VLDB,携全新Angel 2.0宣布加入LF深度学习基金会

    北京时间8月27日,全球数据库三大顶级会议之一——VLDB(Very Large Data Bases Conferences)在巴西里约热内卢召开。腾讯AI...

    腾讯开源
  • 用户在线广告点击行为预测的深度学习模型

    用户1737318

扫码关注云+社区

领取腾讯云代金券