2018阿里广告点击率预估模型---DIN,Tensorflow2.0代码实践( 五 )



4、对候选广告、经过sum 的历史记录进行拼接:
def call(self, inputs):
......
item_embed = tf.reshape(item_embed, [-1, item_embed.shape[-1]])
# 联合用户行为embedding、候选物品embedding、【用户属性、上下文内容特征】
embed = self.concat2([u_embed, item_embed])

5、进行MLP过程
def call(self, inputs):
......
x = self.bn2(embed)
x = self.dense1(x)
x = self.activation1(x)
x = self.dense2(x)
x = self.activation2(x)
x = self.dense3(x)
outputs = tf.nn.sigmoid(x)
return outputs

输入处理
这里我们对历史记录进行了处理【参考论文的开源代码】 , 因为每个用户的序列长度是不同的 , 在情感识别等NLP领域 , 输入RNN等模型时需要将句子进行截断或添加 。这里作者也进行了类似的处理 , 不过在【开源代码】中 , 作者是取每个中的所有用户中最长的历史记录长度作为矩阵的列数 , 但这里我们是取所有用户的最长() , 对长度不够的在最后进行添0处理【这样增加了内存消耗 , 但我不知道如何在TF2.0中如何处理】
def input_data(dataset, max_sl):
user = np.array(dataset[:, 0], dtype='int32')
item = np.array(dataset[:, 1], dtype='int32')
hist = dataset[:, 2]
hist_matrix = tf.keras.preprocessing.sequence.pad_sequences(hist, maxlen=max_sl, padding='post')
sl = np.array(dataset[:, 3], dtype='int32')
y = np.array(dataset[:, 4], dtype='float32')
return user, item, hist_matrix, sl, y

训练
然后就是正常的进行模型编译、训练 。
上传了自己的:
并还实现了NCF的TF2.0实现 。【大佬给个star吧】
微信公众号
潜心的小屋