专栏首页Soul Joy Hub深度推荐算法——DeepFM [IJCAI 17][Huawei]

深度推荐算法——DeepFM [IJCAI 17][Huawei]

视频讲解: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


class CrossLayer(keras.layers.Layer):
    def __init__(self, feat_num, vec_dim, **kwargs):
        self.feat_num = feat_num
        self.vec_dim = vec_dim
        super(CrossLayer, self).__init__(**kwargs)

    def build(self, input_shape):
        self.V = self.add_weight(name='V', shape=(self.feat_num, self.vec_dim), initializer='uniform', trainable=True)
        super(CrossLayer, self).build(input_shape)

    def call(self, inputs, **kwargs):
        a = K.pow(K.dot(inputs, self.V), 2)
        b = K.dot(K.pow(inputs, 2), K.pow(self.V, 2))
        return 0.5 * K.mean(a - b, 1, keepdims=True)


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]
    sub_emb_arr = []
    product_list = []

    # Deep 部分
    inputs_id = keras.Input((cate_num,))
    emb = keras.layers.Embedding(FEAT_CATE_NUM, VEC_DIM, input_length=cate_num)(inputs_id)
    deep = keras.layers.Flatten()(emb)
    deep = keras.layers.Dropout(DROPOUT_RATE)(deep)
    for units in DNN_LAYERS:
        deep = keras.layers.Dense(units, activation='relu')(deep)
        deep = keras.layers.Dropout(DROPOUT_RATE)(deep)

    # FM 部分
    # 将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]]))
    wide = keras.Input((hot_num,))

    deep_fm = keras.layers.concatenate(product_list + [wide] + [deep])
    deep_fm = keras.layers.Dropout(DROPOUT_RATE)(deep_fm)
    outputs = keras.layers.Dense(1, activation='sigmoid',kernel_regularizer=keras.regularizers.l2(0.001))(deep_fm)

    model = keras.Model(inputs=[inputs_id, wide], 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科技大本营
  • Factorization Machine模型的各种变式

    FM模型最早由Steffen Rendle在2010年提出,解决了稀疏数据场景下的特征组合问题,在广告、推荐等领域被广泛使用。FM模型简单而且效果好,可以作为业...

    用户3578099
  • 一文看懂 FM ( Factorization Machine ) 模型的各种变式

    FM 模型最早由 Steffen Rendle 在2010年提出,解决了稀疏数据场景下的特征组合问题,在广告、推荐等领域被广泛使用。FM 模型简单而且效果好,可...

    石晓文
  • 【论文推荐】最新七篇推荐系统相关论文—正则化奇异值、用户视角、CTR预测、Top-k、人机交互、隐反馈

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

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

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

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

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

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

    张小磊
  • 腾讯 QQ 看点图文多目标推荐实践经验

    ? 作者:zhongzhao,腾讯 PCG 应用研究员 在推荐系统中,最常用的排序模型是以用户点击为目标的 CTR 预估模型,它没有考虑用户点击后的消费深度,...

    腾讯技术工程官方号
  • 干货 | 携程个性化推荐算法实践

    作者简介 携程基础业务研发部-数据产品和服务组,专注于个性化推荐、自然语言处理、图像识别等人工智能领域的先进技术在旅游行业的应用研究并落地产生价值。目前,团队已...

    携程技术

扫码关注云+社区

领取腾讯云代金券