【TF2.x复现】MF-BPR---贝叶斯个性化排序(tf.keras.layers.Layer.add_loss)

前言

最近想要进行对比实验,在写AtttRec的时候,发现要使用对损失函数,即来自BPR(贝叶斯个性化排序)。因此,先建立MF-BPR模型进行实验。在BPR的建立过程遇到很多问题,现在将整个模型的建模过程进行分享。模型源码可以在我的Githubhttps://github.com/ZiyaoGeng/Recommender-System-with-TF2.0找到。
本文约2.9k字,预计阅读10分钟。

MF-BPR模型建立

1、首先定义模型输入的初始化参数:

  • feature_columns:输入的特征列,分为用户特征和物品特征列【包含特征名、特征最大值、embedding维度】;

  • embed_reg:embedding的正则化参数;

分别建立用户嵌入层和物品嵌入层(由于考虑到特征可能包括多个,如用户id、性别、年龄,物品id、种类等,所以用户、物品嵌入信息分别以列表的形式保存)。

初始化如下所示:

class BPR(Model):
    def __init__(self, feature_columns, embed_reg=1e-6):
        """
        BPR
        :param feature_columns: A list. user feature columns + item feature columns
        :param embed_reg: A scalar.  The regularizer of embedding.
        """
        super(BPR, self).__init__()
        # feature columns
        self.user_fea_col, self.item_fea_col = feature_columns
        # field num
        self.user_field_num = len(self.user_fea_col)
        self.item_field_num = len(self.item_fea_col)
        # user embedding layers [id, age,...]
        self.embed_user_layers = [Embedding(input_dim=feat['feat_num'],
                                            input_length=1,
                                            output_dim=feat['embed_dim'],
                                            embeddings_initializer='random_uniform',
                                            embeddings_regularizer=l2(embed_reg))
                                  for feat in self.user_fea_col]
        # item embedding layers [id, cate_id, ...]
        self.embed_item_layers = [Embedding(input_dim=feat['feat_num'],
                                           input_length=1,
                                           output_dim=feat['embed_dim'],
                                           embeddings_initializer='random_uniform',
                                           embeddings_regularizer=l2(embed_reg))
                                 for feat in self.item_fea_col]

2、具体结构

(1)模型的输入为三元组的形式:(user_inputs, pos_inputs, neg_inputs)

(2)用户embedding、正、负样本embedding分别将对应的所有稀疏特征embedding平均池化后得到的;

(3)分别计算正、负样本得分;

「(4)在TF2.0中,Model类继承了tf.keras.layers.Layer」,因此包含add_loss方法,因此通过add_loss在模型结构中加入损失;

tf.keras.layers.Layer

(5)返回正负样本分数;

模型构建如下:

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值