【推荐系统】ESMM Entire Space Multi-Task Model 论文阅读&思维导图&代码

这篇博客介绍了Entire Space Multi-Task Model(ESMM)在推荐系统中的作用,主要解决样本选择偏差和数据稀疏问题。ESMM通过共享CTR和CVR的Embedding Layer,利用用户行为序列数据在全样本空间建模,通过多任务学习提高CVR预测的准确性。文章详细阐述了模型的算法原理、训练过程、结构及优缺点,并提供了相关代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Xmind 笔记

在这里插入图片描述

ESMM

概述

Entire Space Multi-Task Model:

An Effective Approach for Estimating Post-Click Conversion Rate

背景

  • 传统的CVR方法存在两个方面的缺陷

    • SSB

      • 样本选择偏差(sample selection bias)

        • 在这里插入图片描述

          • 传统的「CVR」模型训练的时候用的是被点击的曝光数据(clicked impressions)

            • 传统cvr模型训练样本(点击->转化)
          • 预测的时候却是针对曝光的数据

            • 线上预测时时 (曝光->转化)
        • 训练使用的数据只是预测数据的一部分,只是样本空间的一个很小的子集

          • 构建的训练样本集相当于是从一个与真实分布不一致的分布中采样得到的,违背了独立同分布的假设
          • 这种训练样本从整体样本空间的一个较小子集中提取,而训练得到的模型却需要对整个样本空间中的样本做推断预测的现象称之为「样本选择偏差」
        • 有损模型的泛化性能

    • DS

      • 数据稀疏(data sparsity)

        • 相对于CTR用的数据,CVR更少

          • 展现给用户的商品数量要远远大于被用户点击的商品数量
          • 有点击行为的用户也仅仅只占所有用户的一小部分
    • 其他

      • 延迟反馈(Delayed Feedback)

        • 点击后的conversion很可能延时发生

          • 看过一个商品,但并没有马上去买,过了几天才去购买

贡献

  • 利用「用户行为序列」数据在「完整样本空间」建模
  • 首次提出了利用学习「CTR」和「CTCVR」的辅助任务迂回学习「CVR」的思路

算法原理

思路

  • 假设观察到的数据形式是

    • 在这里插入图片描述

      • x

        • 代表商品曝光时的特征向量,通常用multi-field高维特征表示
      • y

        • 代表点击的label
      • z

        • 代表购买的label
  • CVR的概率可以表示成

    • 在这里插入图片描述
  • CTR的概率可以表示成

    • 在这里插入图片描述
  • CTCVR的概率可以表示成

    • 在这里插入图片描述

      • 因为CTR数字很小,用乘法代替除法
  • CVR可以转换成

    • 在这里插入图片描述

      • 引入两个辅助任务「CTR」和「CTCVR」
      • 不是直接基于点击样本子集进行 CVR 模型训练

全空间建模

  • pCTCVR 和 pCTR 是在全空间中以所有展现样本估计的,因此衍生的 pCVR 也适用于全空间

迁移学习

  • CVR 的特征表示网络与 CTR 共享,后者用更丰富的样本进行训练。这种参数共享遵循特征表示迁移学习范式

训练

构造训练数据集

  • CTR 任务

    • y = 1

      • 单击的展现被标记为1
    • y = 0

  • CTCVR 任务

    • y & z = 1

      • 同时发生点击和转化事件的展现被标记为1
    • y & z = 0

  • y 和 y & z ,这实际上是利用点击和转化标签的序列依赖性

    • impression->click->conversion

模型结构

图例

  • 在这里插入图片描述

    • Embedding parameters of CTR and CVR network are shared.

      • 通过 Embedding Layer 共享
        把曝光没点击的样本共享给 CVR 模型
    • CTCVR takes the product of outputs from CTR and CVR network as the output.

「base model 」Embedding&MLP

  • Embedding Layer

    • 都使用了user跟item的高纬度feature
    • 利用embedding把高维特征映射到低维特征
    • 共享 embedding table
  • Field-wise Pooling Layer

    • 多种特征需要多个embedding table
    • user和item域做element-wise +操作得到两个长度为n的embedding
    • concat得到2n的embedding
  • MultiLayer Perception

    • 经过多层感知机
    • 通过sigmoid或者soft-max得到CVR、CTR的概率

损失函数

思路

  • 由CTR和CTCVR任务的两个损失项组成
  • 这些损失项是根据所有展示的样本计算得出的
  • 没有使用CVR任务的损失
### ESMM模型简介 ESMMEntire Space Multi-Task Model)是一种多任务学习框架,主要用于解决推荐系统中的CTR预估问题。它通过联合建模点击率(CTR)、转化率(CVR)以及最终目标——购买率(CTCVR),从而提升整体预测效果[^1]。 以下是基于TensorFlow实现的一个简单版本的ESMM代码示例: ```python import tensorflow as tf class ESMM(tf.keras.Model): def __init__(self, user_feature_dim, item_feature_dim, hidden_units=64): super(ESMM, self).__init__() # 定义共享层 self.shared_dense = tf.keras.layers.Dense(hidden_units, activation='relu') # CTR分支 self.ctr_dense_1 = tf.keras.layers.Dense(hidden_units, activation='relu') self.ctr_output = tf.keras.layers.Dense(1, activation='sigmoid') # CVR分支 self.cvr_dense_1 = tf.keras.layers.Dense(hidden_units, activation='relu') self.cvr_output = tf.keras.layers.Dense(1, activation='sigmoid') def call(self, inputs): user_features, item_features = inputs # 特征拼接 concat_features = tf.concat([user_features, item_features], axis=-1) # 共享表示 shared_representation = self.shared_dense(concat_features) # CTR 预测 ctr_hidden = self.ctr_dense_1(shared_representation) ctr_pred = self.ctr_output(ctr_hidden) # CVR 预测 cvr_hidden = self.cvr_dense_1(shared_representation) cvr_pred = self.cvr_output(cvr_hidden) # 计算CTCVR (CTR * CVR) ctcvr_pred = tf.multiply(ctr_pred, cvr_pred) return ctr_pred, cvr_pred, ctcvr_pred # 创建模型实例 model = ESMM(user_feature_dim=10, item_feature_dim=20) # 构造虚拟输入数据 user_input = tf.random.normal(shape=(32, 10)) # 假设有32个样本,每个用户的特征维度为10 item_input = tf.random.normal(shape=(32, 20)) # 每个物品的特征维度为20 # 调用模型并获取输出 ctr_predictions, cvr_predictions, ctcvr_predictions = model((user_input, item_input)) print(f"CTR Predictions Shape: {ctr_predictions.shape}") print(f"CVR Predictions Shape: {cvr_predictions.shape}") print(f"CTCVR Predictions Shape: {ctcvr_predictions.shape}") ``` 上述代码定义了一个简单的ESMM架构,其中包含了两个主要的任务分支:CTR和CVR,并通过两者的乘积计算得到最终的目标指标CTCVR[^2]。 ### 关于ESMM的关键点说明 1. **共享底层网络** ESMM的核心在于其共享部分参数的设计,使得不同任务之间能够相互促进训练过程,减少过拟合风险的同时提高泛化能力[^3]。 2. **多任务优化目标函数** 在实际应用中,通常会设计一个多任务损失函数来综合考虑各个子任务的表现。例如可以采用加权求和的方式组合CTR、CVR等任务的交叉熵损失[^4]。 3. **应用场景扩展** 尽管最初被应用于电商场景下的广告投放决策支持领域,但随着研究深入和技术发展,该方法已被广泛移植到其他多种业务场景之中,比如短视频平台的信息流推荐服务等等[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值