Task 05 排序模型 + 模型融合

通过召回的操作,我们已经进行了问题规模的缩减,对每个用户选择出了N篇文章作为了候选集,并基于召回的候选集构建了与用户历史相关的特征以及用户本身的属性特征、文章本身的属性特征,用户与文章之间的特征。下面就是使用机器学习模型来构造好的特征进行学习,然后对测试集进行预测,得到测试集中的每个候选集用户点击的概率,返回点击概率最大的topk个文章作为最终的结果。 排序阶段选择了三个比较有代表性的排序模型,它们分别是:
1.LGB的排序模型。
2.LGB的分类模型。
3.深度学习的分类模型DIN。 得到了最终的排序模型输出结果之后,还选择了两种比较经典的模型集成的方法:
A. 输出结果加权融合
B. Staking(将模型的输出结果再使用一个简单模型进行预测)

DIN模型简介

DIN的全称是Deep Interest Network, 是阿里2018年基于前面的深度学习模型无法表达用户多样性的兴趣而提出的一个模型,它可以通过考虑【给定的候选广告】和【用户的历史用户】的相关性,来计算用户兴趣的表示向量。具体来说就是通过引入局部激活单元,通过软搜索历史行为的相关部分来关注用户的兴趣,并采用加权和来获得有关候选广告的用户兴趣的表示。
与候选广告相关性较高的行为会获得较高的激活权重并支配这用户兴趣。该表示向量在不同广告上有所不同,大大提高了模型的表达能力。所以该模型对于此次新闻推荐的任务比较适合。我们在这里通过当前的候选文章与用户历史点击文章的相关性来计算用户对于文章的兴趣。

def DIN(dnn_feature_columns, history_feature_list, dnn_use_bn=False,
dnn_hidden_units=(200, 80), dnn_activation=‘relu’, att_hidden_size=(80, 40),
att_activation=“dice”,
att_weight_normalization=False, l2_reg_dnn=0, l2_reg_embedding=1e-6, dnn_dropout=0,
seed=1024,
task=‘binary’):

  • dnn_feature_columns: 特征列, 包含数据所有特征的列表
  • history_feature_list: 用户历史行为列, 反应用户历史行为的特征的列表
  • dnn_use_bn: 是否使用BatchNormalization
  • dnn_hidden_units: 全连接层网络的层数和每一层神经元的个数, 一个列表或者元组
  • dnn_activation_relu: 全连接网络的激活单元类型
  • att_hidden_size: 注意力层的全连接网络的层数和每一层神经元的个数
  • att_activation: 注意力层的激活单元类型
  • att_weight_normalization: 是否归一化注意力得分
  • l2_reg_dnn: 全连接网络的正则化系数
  • l2_reg_embedding: embedding向量的正则化稀疏
  • dnn_dropout: 全连接网络的神经元的失活概率
  • task: 任务, 可以是分类, 也可是是回归

在具体使用的时候, 我们必须要传入特征列和历史行为列, 但是再传入之前, 我们需要进行一下特征
列的预处理。具体如下:

  1. 首先,我们要处理数据集, 得到数据, 由于我们是基于用户过去的行为去预测用户是否点击当前
    文章, 所以我们需要把数据的特征列划分成数值型特征, 离散型特征和历史行为特征列三部分,
    对于每一部分, DIN模型的处理会有不同
  2. 对于离散型特征, 在我们的数据集中就是那些类别型的特征, 比如user_id这种, 这种类别
    型特征, 我们首先要经过embedding处理得到每个特征的低维稠密型表示, 既然要经过
    embedding, 那么我们就需要为每一列的类别特征的取值建立一个字典,并指明embedding
    维度, 所以在使用deepctr的DIN模型准备数据的时候, 我们需要通过SparseFeat函数指明
    这些类别型特征, 这个函数的传入参数就是列名, 列的唯一取值(建立字典用)和embedding维
    度。
  3. 对于用户历史行为特征列, 比如文章id, 文章的类别等这种, 同样的我们需要先经过
    embedding处理, 只不过和上面不一样的地方是,对于这种特征, 我们在得到每个特征的
    embedding表示之后, 还需要通过一个Attention_layer计算用户的历史行为和当前候选文章
    的相关性以此得到当前用户的embedding向量, 这个向量就可以基于当前的候选文章与用户过去点击过得历史文章的相似性的程度来反应用户的兴趣, 并且随着用户的不同的历史点击
    来变化,去动态的模拟用户兴趣的变化过程。这类特征对于每个用户都是一个历史行为序列,
    对于每个用户, 历史行为序列长度会不一样, 可能有的用户点击的历史文章多,有的点击的
    历史文章少, 所以我们还需要把这个长度统一起来, 在为DIN模型准备数据的时候, 我们首
    先要通过SparseFeat函数指明这些类别型特征, 然后还需要通过VarLenSparseFeat函数再进
    行序列填充, 使得每个用户的历史序列一样长, 所以这个函数参数中会有个maxlen,来指明
    序列的最大长度是多少。
  4. 对于连续型特征列, 我们只需要用DenseFeat函数来指明列名和维度即可。
  5. 处理完特征列之后, 我们把相应的数据与列进行对应,就得到了最后的数据。
    下面根据具体的代码感受一下, 逻辑是这样, 首先我们需要写一个数据准备函数, 在这里面就是根据
    上面的具体步骤准备数据, 得到数据和特征列, 然后就是建立DIN模型并训练, 最后基于模型进行测
    试。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值