ESMM

简介

CVR预估模型的本质,不是预测“item被点击,然后被转化”的概率(CTCVR),而是“假设item被点击,那么它被转化”的概率(CVR)。\它与CTR没有绝对的关系,很多人有一个先入为主的认知,即若user对某item的点击概率很低,则user对这个item的转化概率也肯定低,这是不成立的。 这就是不能直接使用全部样本训练CVR模型的原因,因为不知道那些unclicked的item,假设他们被点击了,是否会被转化。如果直接使用0作为它们的label,会很大程度上误导CVR模型的学习。

../_images/essm_func.svg

其中 z,y 分别表示conversion和click。注意到,在全部样本空间中,CTR对应的label为click,而CTCVR对应的label为click & conversion,这两个任务是可以使用全部样本的。因此,通过这学习两个任务,再根据上式隐式地学习CVR任务。

esmm.png

配置说明

model_config: {
  model_class: 'ESMM'
  feature_groups: {
    group_name: 'user'
    feature_names: 'user_id'
    feature_names: 'cms_segid'
    ...
    feature_names: 'new_user_class_level'
    wide_deep: DEEP
  }
  feature_groups: {
    group_name: 'item'
    feature_names: 'adgroup_id'
    feature_names: 'cate_id'
    ...
    feature_names: 'price'
    wide_deep: DEEP
  }
  feature_groups: {
    group_name: 'combo'
    feature_names: 'pid'
    feature_names: 'tag_category_list'
    feature_names: 'tag_brand_list'
    wide_deep: DEEP
  }
  esmm {
    groups {
      input: "user"
      dnn {
        hidden_units: [256, 128, 96, 64]
      }
    }
    groups {
      input: "item"
      dnn {
        hidden_units: [256, 128, 96, 64]
      }
    }
    groups {
      input: "combo"
      dnn {
        hidden_units: [128, 96, 64, 32]
      }
    }
    cvr_tower {
      tower_name: "cvr"
      label_name: "buy"
      dnn {
        hidden_units: [128, 96, 64, 32, 16]
      }
      num_class: 1
      weight: 1.0
      loss_type: CLASSIFICATION
      metrics_set: {
       auc {}
      }
    }
    ctr_tower {
      tower_name: "ctr"
      label_name: "clk"
      dnn {
        hidden_units: [128, 96, 64, 32, 16]
      }
      num_class: 1
      weight: 1.0
      loss_type: CLASSIFICATION
      metrics_set: {
       auc {}
      }
    }
    l2_regularization: 1e-6
  }
  embedding_regularization: 5e-5
}
  • model_class: ‘ESMM’, 不需要修改

  • feature_groups: 支持多组feature_group

  • esmm: esmm相关的参数

    • groups

      • input tower的input必须和feature_groups的group_name对应

      • dnn deep part的参数配置

        • hidden_units: dnn每一层的channel数目,即神经元的数目

    • cvr_tower

      • tower_name:’cvr’,不需要修改

      • label_name: tower对应的label名,若不设置,label_fields需与task_towers一一对齐

      • dnn deep part的参数配置

        • hidden_units: dnn每一层的channel数目,即神经元的数目

      • 默认为二分类任务,即num_class默认为1,weight默认为1.0,loss_type默认为CLASSIFICATION,metrics_set为auc

    • ctr_tower

      • tower_name:’ctr’,不需要修改

      • label_name: tower对应的label名,若不设置,label_fields需与task_towers一一对齐

      • dnn deep part的参数配置

        • hidden_units: dnn每一层的channel数目,即神经元的数目

      • 默认为二分类任务,即num_class默认为1,weight默认为1.0,loss_type默认为CLASSIFICATION,metrics_set为auc

  • embedding_regularization: 对embedding部分加regularization,防止overfit

ESMM模型输出的值有以下几项:

  • “logits_” / “probs_” + ctr_tower的tower_name

  • “logits_” / “probs_” / “y_” + cvr_tower的tower_name

  • “probs_ctcvr” / “y_ctcvr”

ESMM模型的指标有以下几项:

  • 指标名 + “_” + ctr_tower 的 tower_name

  • 指标名 + “_” + cvr_tower 的 tower_name + “_masked”

  • 指标名 + “_ctcvr”

示例Config

ESMM_demo.config

参考论文

论文地址