专栏首页Soul Joy Hub深度推荐模型——AutoInt [CIKM 19][北大]

深度推荐模型——AutoInt [CIKM 19][北大]

视频讲解: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
DROPOUT_RATE = 0.5
HEAD_NUM = 4
HIDE_SIZE = 10

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)
    feat_num = val_x[0].shape[0]
    print(feat_num)

    inputs_id = keras.Input((feat_num,))
    emb = keras.layers.Embedding(FEAT_CATE_NUM, VEC_DIM, input_length=feat_num)(inputs_id)
    # ( batch , cate_num, VEC_DIM)

    Qs = keras.layers.Dense(HEAD_NUM * VEC_DIM)(emb)  # ( batch , cate_num, HEAD_NUM * VEC_DIM)
    Qs = keras.layers.Dropout(DROPOUT_RATE)(Qs)
    Qs = tf.split(Qs, HEAD_NUM * [VEC_DIM], 2)  # (head_num , batch , cate_num,  VEC_DIM)

    Ks = keras.layers.Dense(HEAD_NUM * VEC_DIM)(emb)
    Ks = keras.layers.Dropout(DROPOUT_RATE)(Ks)
    Ks = tf.split(Ks, HEAD_NUM * [VEC_DIM], 2)

    Vs = keras.layers.Dense(HEAD_NUM * VEC_DIM)(emb)
    Vs = keras.layers.Dropout(DROPOUT_RATE)(Vs)
    Vs = tf.split(Vs, HEAD_NUM * [VEC_DIM], 2)

    es = []
    for num in range(HEAD_NUM):
        score = tf.nn.softmax(tf.matmul(Qs[num], Ks[num], transpose_b=True) / VEC_DIM)  # (batch , cate_num, cate_num)
        hide = tf.matmul(score, Vs[num])  # (batch , cate_num, VEC_DIM)
        hide = keras.layers.Flatten()(hide)  # (batch , cate_num * VEC_DIM)
        es.append(hide)
    self_att = keras.layers.concatenate(es)  # (batch , HEAD_NUM * cate_num * VEC_DIM)
    self_att = keras.layers.Dropout(DROPOUT_RATE)(self_att)
    self_att = keras.layers.Dense(feat_num * VEC_DIM)(self_att)

    emb = keras.layers.Flatten()(emb)
    interact_layer = keras.layers.add([self_att, emb])
    interact_layer = keras.layers.Dropout(DROPOUT_RATE)(interact_layer)

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

    model = keras.Model(inputs=inputs_id, 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 条评论
登录 后参与评论

相关文章

  • 算法大佬看了流泪,为什么这么好的CTR预估总结之前没分享(下篇)

    在广告、推荐系统CTR预估问题上,早期的完全规则方法被过渡到以LR为代表的机器学习方法,为了充分发挥组合特征的价值,在相当长一段时间里,业界热衷于使用LR+人工...

    炼丹笔记
  • ICLR2021 | 推荐系统中可学习的嵌入维度

    本文分享一篇发表在ICLR’21的推荐系统方向的文章:推荐系统中可学习的嵌入维度。

    张小磊
  • 「推荐系统」 领域的最新进展你知道么?

    ? 本文作者:腾讯微信支付算法研究员 介绍 工业界通用推荐系统包括两个阶段的流程,匹配(match)和排序(rank)。在匹配的过程中主要是根据用户的一些兴趣...

    腾讯技术工程官方号
  • Transformer是巧合还是必然?搜索推荐领域的新潮流

    BERT等Transformer模型在自然语言处理领域大放异彩之后,将Transformer应用在各个领域变成了一种潮流,包括之前文章中介绍的 Image ...

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

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

    AI科技大本营
  • 大讲堂 | 深度强化学习在电商推荐中的应用

    电子商务中的推荐系统可以通过推荐最符合用户需求和偏好的商品来帮助用户完成信息搜索任务。大多数现有系统将推荐视为静态过程,并遵循固定的贪心策略生成推荐,以最大限度...

    AI研习社
  • 深度推荐模型——PNN [TOIS 16][交大]

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

    用户1621453
  • 深度推荐模型——FNN [ECIR 16]

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

    用户1621453
  • 深度推荐模型——FFM

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

    用户1621453

扫码关注云+社区

领取腾讯云代金券