返回介绍

数学基础

统计学习

深度学习

工具

Scala

二十、DSTN [2019]

发布于 2023-07-17 23:38:25 字数 32752 浏览 0 评论 0 收藏 0

  1. 点击率 Click-Through Rate: CTR 预估是用于预测用户点击某个 item 的可能性。它在在线广告系统中起着重要作用。例如,广告 ranking 策略通常取决于 CTR x bid,其中 bid 是点击广告后系统获得的收益。另外,根据常见的 cost-per-click: CPC 计费模式,只有在用户点击广告之后才会对广告主收费。因此,为了最大化程度地增加收入并保持理想的用户体验,准确地预估广告的 CTR 至关重要。

    CTR 预估引起了学术界和工业界的广泛关注。一系列研究方向是利用机器学习方法独立预估每个广告的 CTR。例如,因子分解机 Factorization Machine: FM 根据所涉及特征对应的潜在向量来建模 pairwise 特征交互。近年来,深度神经网络 DNN 被用于 CTR 预估和 item 推荐,以自动学习 feature representation 和高阶特征交互。为了同时利用浅层模型和深层模型,人们还提出了混合模型hybrid model 。例如,Wide & Deep 将逻辑回归 Logistic Regression: LRDNN 结合起来,从而提高模型的memorizationgeneralization 能力。DeepFMFMDNN 相结合,进一步提高了模型学习特征交互的能力。

    这一系列方法独立地考虑每个目标广告,但是忽略了可能影响目标广告 CTR 的其它广告。在本文中,我们从两个角度探讨辅助广告auxiliary ad

    • 空域 spatial domain角度:我们考虑在同一个页面上出现的、目标广告上方展示的上下文广告 contextual ad

      背后的直觉是:共同展示的广告可能会争夺用户的注意力。

    • 时域temporal domain 角度:我们考虑用户的历史点击和历史未点击广告。

      背后的直觉是:历史点击广告可以反映用户的偏好,历史未点击广告可能一定程度上表明用户的不喜欢。

    这两个角度包含了三种类型的辅助数据auxiliary data(如下图所示):同一个页面上出现的、目标广告上方展示的上下文广告contextual ad;用户的历史点击广告clicked ad;用户的历史未点击广告unclicked ad

    为有效利用这些辅助数据,我们必须解决以下问题:

    • 由于每种类型辅助广告的数量可能会有所不同,因此模型必须能够适应所有可能的情况。

      例如,可能有 1 个上下文广告、2 个历史点击广告、4 个历史未点击广告,也可能是 0 个上下文广告、3 个历史点击广告、2 个历史未点击广告。

    • 由于辅助广告不一定和目标广告相关,因此模型应该能够提取有用的信息并抑制辅助数据中的噪声。

      例如,如果历史点击广告集合是关于咖啡、衣服、汽车的广告,而目标广告是咖啡广告,那么模型能够学到哪个历史点击广告对目标广告的 CTR 预估更有用。

    • 每种类型辅助广告的影响程度可能会有所不同,并且模型应该能够区分它们的贡献。

      例如,应该区别对待上下文广告和历史点击广告的重要性。

    • 模型应该能够融合所有可用的信息。

    为了解决这些问题,论文 《Deep Spatio-Temporal Neural Networks for Click-Through Rate Prediction》 提出了用于 CTR 预估的深度时空神经网络Deep SpatioTemporal neural Network: DSTN 的三种变体。这些变体包括:池化pooling 模型、自注意力self-attention模型、交互式注意力interactive attention 模型。其中,交互式注意力模型完全解决了上述问题。

    在一个公共数据集和两个工业数据集上的离线实验表明:DSTN 的效果优于几种 state-of-the-artCTR 预估方法。作者在中国第二大搜索引擎 “神马搜索” 中部署了 DSTN 模型。在线 A/B test 表明:和线上最新的 serving 模型相比,DSTN 模型的在线 CTR 得到显著提升。

    论文主要贡献:

    • 论文探索了三种类型的辅助数据,从而提高目标广告的 CTR 预估。这些辅助数据包括:展示在同一个页面上的、目标广告上方的上下文广告,用户历史点击广告,用户历史未点击广告。
    • 论文提出了有效融合这些辅助数据来预测目标广告 CTRDSTN 模型。DSTN 模型能够学习辅助数据和目标广告之间的交互,并强调更重要的 hidden information
    • 论文对来自真实广告系统的三个大规模数据集进行了广泛的离线实验,从而测试 DSTN 和几种 state-of-the-art 方法的性能。论文还进行了案例研究,从而提供模型背后的进一步洞察。
    • 论文在中国第二大搜索引擎神马搜索中部署了性能最好的 DSTN。论文还进行了在线 A/B test,从而评估DSTN在实际 CTR 预估任务中的性能。
  2. 相关工作:

    • CTR 预估:学习特征交互效应 effect of feature interaction 似乎对于准确的 CTR 预估至关重要。

      • 广义线性模型,如逻辑回归 Logistic Regression: LRFollow-The-Regularized-Leader: FTRL 在实践中表现出不错的性能。然而,线性模型缺乏学习复杂特征交互的能力。
      • 因子分解机 Factorization Machine: FM 根据所涉及特征的潜在向量对 pairwise 特征交互进行建模。
      • Field-aware FM: FFMField-weighted FM 通过考虑特征所属的 field 的影响来进一步改进 FM

      近年来,深度神经网络 DNN 显示出强大的自动学习有信息量 informativefeature representation 的能力。因此,DNN 也被用于 CTR 预估和 item 推荐,以自动学习 feature representation 和高阶特征交互。

      • FNN 在应用 DNN 之前预训练 FM
      • PNNembedding layer 和全连接层之间引入了一个 product layer
      • Wide & Deep 模型结合了 LRDNN 来同时捕获低阶特征交互和高阶特征交互。这种结构还同时提高了模型的 memorizationgeneralization 能力。
      • DeepFMFM 一样对低阶特征交互建模、像 DNN 一样对高阶特征交互建模。
      • NFM 结合了 FM 的线性和神经网络的非线性。
    • 利用辅助数据进行 CTR 预估:另外有一系列研究利用辅助数据来提高 CTR 预估性能。

      RNN-based 模型:

      • 《Sequential Click Prediction for Sponsored Search with Recurrent Neural Networks》 考虑用户的历史行为(例如,该用户点击了哪些广告)。论文使用 RNN 来建模用户行为序列的依赖性。
      • 《Improved recurrent neural networks for session-based recommendations》session-based 推荐提出了改进的 RNN

      基于 RNN 的模型的一个主要问题是:模型生成一个行为序列的整体 embedding 向量,该向量只能保留用户非常有限的信息。即使使用 LSTMGRU 等高级记忆单元结构,长期依赖性仍然难以保留。此外,由于其递归结构,RNN 的离线训练过程和在线预测过程都很耗时。

      CRF-based 模型:

      • 《Relational click prediction for sponsored search》 考虑了同一页面上显示的广告之间的 pairwise 关系,并提出了一种基于条件随机场 Conditional Random Field: CRFCTR 预估模型。
      • 《Exploiting contextual factors for click modeling in sponsored search》 在建模 CTR 时考虑了各种上下文因子,例如广告深度ad depthquery 多样性、广告交互。

      这些模型的一个主要问题是:需要根据数据分析手动定义顶点特征函数 vertex feature function 和边特征函数 edge feature function ,并且难以将模型推广到其它类型的数据。

    • 差异:本文提出的 DSTN 和先前工作的不同之处在于:

      • DSTN 将异质辅助数据heterogeneous auxiliary data (即上下文、点击广告、未点击广告)集成在一个统一的框架中,而 RNN-based 模型无法利用上下文广告和未点击广告,而 CRF-based 模型无法结合点击广告和未点击广告。
      • DSTN 不是 RNN based,因此更容易实现,并且训练和在线评估都更快。

20.1 模型

  1. 这里我们首先介绍 CTR 预估问题,然后介绍 DSTN 模型的三种变体。

  2. CTR 预估问题:在线广告中的CTR 预估任务是建立一个预估模型来估计用户点击特定广告的概率。

    • 每个样本都可以由多个字段 field 来描述,例如用户信息(用户ID、用户城市、用户年龄等等),以及广告信息(广告创意ID、广告计划ID、广告标题等等)。我们将每个样本称作 ad instance,它不仅包含广告信息,也包括用户信息、上下文信息等。

      字段的实例 instance 是一个特征。例如,用户 ID 字段可能包含诸如 21351473467291 的特征。下表给出了一些例子,其中:第一列是标签列,1 表示发生点击行为,0 表示未发生点击行为;其它各列均为一个字段。

    • 诸如 FM, DNN, Wide & Deep 之类的经典 CTR 预估模型主要考虑目标广告(如下图所示,target ad 表示目标广告对应的样本),它们聚焦于如何表示样本特征,以及如何学习特征交互。

      与这些方法不同,我们探索了辅助数据(即辅助广告)来提升 CTR 预估。我们必须解决以下问题:

      • 如何适应每种类型辅助广告的不同数量的各种情况。
      • 如何从辅助广告中提取有用的信息并抑制噪音。
      • 如何区分每种类型辅助广告的贡献。
      • 如何融合所有可用信息。

20.1.1 Embedding

  1. 在介绍模型之前,我们首先介绍所有模型中常见的 embedding 过程。embedding 过程是先将每个特征映射到一个 embedding 向量,然后将每个样本表示为相应特征 embedding 向量的拼接 concatenation

  2. 假设某个特征有 $ N $ 个 unique 值。我们创建一个 embedding 矩阵 $ \mathbf E\in \mathbb R^{N\times K} $ ,其中第 $ i $ 行 $ \mathbf{\vec e}_i\in \mathbb R^K $ 代表对应于特征第 $ i $ 个取值的 embedding 向量。这个 embedding 矩阵 $ \mathbf E $ 是在模型训练期间待学习的参数。

  3. 我们将特征分为三种类型并进行不同的处理,如下图所示。cate. 表示 categoricalft. 表示 featuread instance 表示样本,ad embedding vector 表示样本 embedding 向量。

    • 单值univalent 的离散特征:这类特征仅包含单个值。

      例如用户 ID 就是这类特征的代表,每个用户 ID 特征只有一个用户 ID 值。如果我们使用 one-hot 特征表示,则由于 unique 用户 ID 数量可能高达 $ 10^8 $ ,导致特征向量非常稀疏。因此,我们将稀疏的高维离散特征映射为稠密的低维 embedding 向量从而适用于神经网络。

      one-hot representation 相比,这些 embedding 向量包含更丰富的信息。

    • 多值multivalent的离散特征:这类特征包含一组值。

      例如广告标题就是这类特征的代表。假设广告标题为 ABCD,那么它的 bi-gram 表示为:AB, BC, CD 。由于这类特征包含取值的数量不是固定的,因此我们首先将每个值映射到 embedding 向量,然后执行池化来生成固定长度的聚合向量。

    • 数值特征:用户年龄是数值特征的典型例子。每个数值特征首先被离散化为离散的桶,然后表示为桶ID,最后将每个桶 ID 映射到 embedding 向量。

  4. 经过 embedding 过程之后,样本的 representation $ \mathbf{\vec x} $ 是所有 embedding 向量的拼接,每个 emebdding 向量对应于一个 field

  5. embedding 之后:

    • 每个目标广告target ad 获得了一个 embedding 向量 $ \mathbf{\vec x}_t\in \mathbb R^{D_t} $ ,其中 $ D_t $ 为目标广告 embedding 维度。
    • 上下文广告集合获得了 $ n_c $ 个 embedding 向量 $ \left\{\mathbf{\vec x}_{c,i}\in \mathbb R^{D_c}\right\}_{i=1}^{n_c} $ ,其中 $ n_c $ 为上下文广告数量, $ D_c $ 为上下文广告 embedding 维度。
    • 历史点击广告集合获得了 $ n_l $ 个 embedding 向量 $ \left\{\mathbf{\vec x}_{l,j}\in \mathbb R^{D_l}\right\}_{j=1}^{n_l} $ ,其中 $ n_l $ 为历史点击广告数量, $ D_l $ 为历史点击广告 embedding 维度。
    • 历史未点击广告集合获得了 $ n_u $ 个 embedding 向量 $ \left\{\mathbf{\vec x}_{u,q}\in \mathbb R^{D_u}\right\}_{q=1}^{n_u} $ ,其中 $ n_u $ 为历史未点击广告数量, $ D_u $ 为历史未点击广告 embedding 维度。

    注意:

    • $ \mathbf{\vec x}_t $ 包含了用户 embedding、广告 embedding 、上下文 embedding (如 query )。

    • $ \mathbf{\vec x}_{l,j},\mathbf{\vec x}_{u,q} $ 仅包含广告 embedding、上下文 embedding ,而不包含用户 embedding

      因为历史点击广告、历史未点击广告和目标广告都是同一个用户,没必要提供冗余的、重复的用户信息。

    • $ \mathbf{\vec x}_{c,i} $ 仅包含广告 embedding,而不包含用户 embedding、广告 embedding

      因为上下文广告和目标广告都是同一个用户、同一个上下文(如 query )。

20.1.2 DSTN

a. DSTN-Pooling

  1. 由于不同用户的辅助广告数量 $ n_c,n_l.n_u $ 可能千差万别,因此这为深度神经网络带来了问题。我们需要解决的第一个问题是:将每种类型的、可变长度的辅助实例auxiliary instance 处理未固定长度的向量。在 DSTN-Pooling 模型中,我们使用 sum 池化来实现该目标,模型结构如下图所示。

    $ n_c $ 个上下文广告的聚合 representation 向量 $ \mathbf{\vec x}_c $ 、 $ n_l $ 个历史点击广告的聚合 representation 向量 $ \mathbf{\vec x}_l $ 、 $ n_u $ 个历史未点击广告的聚合 representation 向量 $ \mathbf{\vec x}_u $ 分别表示为:

    $ \mathbf{\vec x}_c = \sum_{i=1}^{n_c} \mathbf{\vec x}_{c,i},\quad \mathbf{\vec x}_l = \sum_{j=1}^{n_l} \mathbf{\vec x}_{l,j},\quad \mathbf{\vec x}_u = \sum_{q=1}^{n_u} \mathbf{\vec x}_{u,q} $

    如果某种类型的辅助广告完全缺失(例如,根本没有上下文广告)则我们将全零向量作为其聚合representation 向量。

  2. 现在我们有了目标广告的 representation $ \mathbf{\vec x}_t $ 、不同类型辅助广告的 representation $ \mathbf{\vec x}_c, \mathbf{\vec x}_l,\mathbf{\vec x}_u $ ,下一个问题是融合这些representation 中包含的信息。

    具体而言,我们生成融合的 representation $ \mathbf{\vec v}\in \mathbb R^{D_v} $ 为:

    $ \mathbf{\vec v} = \mathbf W_t \mathbf{\vec x}_t + \mathbf W_c \mathbf{\vec x}_c+ \mathbf W_l \mathbf{\vec x}_l+\mathbf W_u \mathbf{\vec x}_u+ \mathbf{\vec b} $

    其中:

    • $ \mathbf W_t\in \mathbb R^{D_v\times D_t},\mathbf W_c\in \mathbb R^{D_v\times D_c},\mathbf W_l\in \mathbb R^{D_v\times D_l},\mathbf W_u\in \mathbb R^{D_v\times D_u} $ 为待学习的权重矩阵,它们将不同的类型的 representation 映射到相同的语义空间。
    • $ \mathbf{\vec b}\in \mathbb R^{D_v} $ 为待学习的 bias 向量。

    可以看到,我们实际上使用不同的权重来融合来自不同类型数据的输入。这是因为不同类型的辅助数据对于目标广告的影响程度可能不同,因此我们需要区分这些差异。

    此外,融合的representation $ \mathbf{\vec v} $ 具有以下特性:如果一种或者多种类型的辅助广告完全缺失,则融合的representation $ \mathbf{\vec v} $ 不受影响。例如,如果没有上下文广告,那么 $ \mathbf{\vec x}_c = \mathbf{\vec 0} $ 。结果导致 $ \mathbf W_c \mathbf{\vec x}_c=\mathbf{\vec 0} $ ,因此 $ \mathbf{\vec v} $ 不受影响。

  3. 如果我们将目标广告的 representation $ \mathbf{\vec x}_t $ 、不同类型辅助广告的 representation $ \mathbf{\vec x}_c, \mathbf{\vec x}_l,\mathbf{\vec x}_u $ 拼接为 $ \mathbf{\vec m} = \left[\mathbf{\vec x}_t||\mathbf{\vec x}_c||\mathbf{\vec x}_l||\mathbf{\vec x}_u\right] $ ,那么我们可以将上式重写为:

    $ \mathbf{\vec v} = \mathbf W\mathbf{\vec m}+\mathbf{\vec b} $

    其中: $ || $ 表示向量拼接; $ \mathbf W\in \mathbb R^{D_v\times (D_t+D_c+D_l+D_u)} $ 为所有权重矩阵的拼接; $ \mathbf{\vec b}\in \mathbb R^{D_v} $ 为待学习的 bias 向量。这种方式大大简化了模型。

    因此,DSTN-Pooling 模型最终的设计为:

    • 首先拼接各个representation 从而获得临时 representaion $ \mathbf{\vec m} $ 。

    • 然后将 $ \mathbf{\vec m} $ 通过若干个带 ReLU 激活函数的全连接层FC layer,从而利用高阶特征交互以及非线性变换。文献表明:ReLU 激活函数在收敛速度和模型效果方面比 tanh 激活函数具有明显的优势。

      $ \mathbf{\vec z}_1 = \text{ReLU}\left(\mathbf W_1 \mathbf{\vec m} + \mathbf{\vec b}_1\right)\\ \mathbf{\vec z}_2 = \text{ReLU}\left(\mathbf W_2 \mathbf{\vec z}_1 + \mathbf{\vec b}_2\right)\\ \vdots\\ \mathbf{\vec z}_L = \text{ReLU}\left(\mathbf W_{L} \mathbf{\vec z}_{L-1} + \mathbf{\vec b}_L\right) $

      其中: $ L $ 为全连接层的层数; $ \mathbf{\vec W}_l,\mathbf{\vec b}_l $ 表示第 $ l $ 层全连接层的、待学习的参数。

    • 全连接层输出向量 $ \mathbf{\vec z}_L $ 通过一个 sigmoid 函数来生成目标广告的预估 CTR

      $ \hat y = \frac{1}{1+\exp\left[-\left(\mathbf{\vec w}^\top \mathbf{\vec z}_L + b\right)\right]} $

      其中 $ \mathbf{\vec w},b $ 为待学习的参数。

此外,为了避免模拟过拟合,我们在每个全连接层之后应用 dropout

  1. 所有的模型参数通过最小化交叉熵损失函数来学习,其中损失函数定义为:

    $ \text{loss} = -\frac{1}{|\mathbb Y|}\sum_{y\in \mathbb Y}\left[y\log \hat y + (1-y)\log(1-\hat y)\right] $

    其中: $ y\in \{0,1\} $ 为目标广告的真实label; $ \hat y $ 为目标广告的预估CTR; $ \mathbb Y $ 为所有真实label 的集合。

  2. 可以看到:在 DSTN-Pooling 模型中,当给定用户在给定位置展示不同的目标广告时只有 $ \mathbf{\vec x}_t $ 发生变化,而所有的辅助representation $ \mathbf{\vec x}_c, \mathbf{\vec x}_l,\mathbf{\vec x}_u $ 都保持不变。这意味着辅助 representation 仅用作静态基础信息。

    而且,由于 $ \mathbf{\vec x}_c, \mathbf{\vec x}_l,\mathbf{\vec x}_u $ 是通过 sum 池化生成的,因此有用的信息很容易被淹没在噪声中。例如,如果目标广告是关于咖啡的,但是大多数历史点击广告是关于衣服的、少部分历史点击广告是关于咖啡的。那么,虽然关于衣服的这些历史点击广告对于目标广告的贡献很小,但是 sum 的结果显然是由这些关于衣服的历史点击广告所主导。

b. DSTN-Self Attention

  1. DSTN-Self Attention 模型:鉴于 DSTN-Pooling 的上述限制,我们考虑采用自注意力机制,即 DSTN-Self Attention 模型。

    在我们的 DSTN-Self Attention 模型中,我们在每种类型的辅助数据上应用自注意力从而强调更重要的信息。以上下文辅助广告为例,其聚合representation 向量建模为:

    $ \hat{\mathbf{\vec x}}_c = \sum_{i=1}^{n_c}\alpha_{c,i}\mathbf{\vec x}_{c,i} $

    其中 $ \alpha_{c,i} $ 为第 $ i $ 个上下文广告 representation 的注意力系数,它计算为:

    $ \alpha_{c,i} = \frac{\exp( \beta_{c,i} )}{\sum_{i^\prime=1}^{n_c} \exp( \beta_{c,i^\prime} )},\quad \beta_{c,i} = f(\mathbf{\vec x}_{c,i})\in \mathbb R $

    其中 $ f(\cdot) $ 为一个函数,它将上下文广告 representation 向量 $ \mathbf{\vec x}_{c,i} $ 映射为一个标量权重 $ \beta_{c,i} $ 。 $ f(\cdot) $ 的一个可能的实现方式是采用多层感知机 Multilayer Perceptron: MLP

    自注意力机制的优点在于:可以根据 self-attention 来加权不同的辅助广告 $ \mathbf{\vec x}_{c,i} $ ,从而可以强调有用的信息并抑制噪声。但是,它仍然具有以下局限性:

    • 权重 $ \beta_{c,i} $ 仅仅基于上下文辅助广告 $ \mathbf{\vec x}_{c,i} $ 来计算,它并未捕获这个上下文辅助广告和目标广告 $ \mathbf{\vec x}_t $ 之间的关系。例如,无论目标广告是关于咖啡还是衣服,上下文辅助广告的重要性都保持不变。
    • 归一化的注意力系数 $ \alpha_{c,i} $ 通过 $ \left\{\mathbf{\vec x}_{c,i}\right\}_{i=1}^{n_c} $ 之间的相对重要性来计算,并且 $ \sum_{i=1}^{n_c}\alpha_{c,i} = 1 $ 。结果,即使所有的上下文辅助广告 $ \left\{\mathbf{\vec x}_{c,i}\right\}_{i=1}^{n_c} $ 和目标广告 $ \mathbf{\vec x}_t $ 无关,由于归一化的存在,最终的注意力系数 $ \alpha_{c,i} $ 仍然很大。
    • 每种类型辅助广告的绝对数量也很重要,但是归一化并未捕获这种效果。例如,假设每个上下文辅助广告的重要性都相同,则采用归一化的注意力系数完全无法区分是 1 个上下文辅助广告、还是 100 个上下文辅助广告。

c. DSTN-Interactive Attention

  1. DSTN-Interactive Attention:鉴于 DSTN-Self Attention 的上述限制,我们考虑引入每种类型辅助广告和目标广告之间的显式交互,即 DSTN-Interactive Attention 模型,如下图所示。

    以上下文辅助广告为例,其聚合representation 向量建模为:

    $ \tilde{\mathbf{\vec x}}_c=\sum_{i=1}^{n_c}\alpha_{c,i}\mathbf{\vec x}_{c,i}\\ \alpha_{c,i} = \exp\left(\mathbf{\vec h}^\top \text{ReLU}\left(\mathbf W_{t,c}\left[\mathbf{\vec x}_t||\mathbf{\vec x}_{c,i} \right]+ \mathbf{\vec b}_{t,c,1}\right) + b_{t,c,2}\right) $

    其中: $ \mathbf{\vec h},\mathbf W_{t,c},\mathbf{\vec b}_{t,c,1},b_{t,c,2} $ 为模型参数。

    DSTN-Self Attention 相比,这里的 $ \alpha_{c,i} $ 现在是目标广告 $ \mathbf{\vec x}_t $ 和上下文辅助广告 $ \mathbf{\vec x}_{c,i} $ 的函数。通过这种方式, $ \alpha_{c,i} $ 基于目标广告 $ \mathbf{\vec x}_t $ 来动态调整上下文辅助广告 $ \mathbf{\vec x}_{c,i} $ 的重要性。

    此外, $ \alpha_{c,i} $ 现在还不依赖于其它上下文辅助广告 $ \left\{\mathbf{\vec x}_{c,i^\prime}\right\}_{i^\prime \ne i} $ ,也不需要进行归一化。如果没有任何上下文辅助广告能够提供信息,则所有的 $ \alpha_{c,i} $ 都会很小。

    类似地,我们为历史点击辅助广告生成 $ \tilde{\mathbf{\vec x}}_l $ 、为历史未点击辅助广告生成 $ \tilde{\mathbf{\vec x}}_u $ 。

  2. DSTN-Interactive Attention 模型最终得到融合的 representation 为:

    $ \mathbf{\vec v} = \mathbf W_t \mathbf{\vec x}_t + \mathbf W_c \tilde{\mathbf{\vec x}}_c+ \mathbf W_l \tilde{\mathbf{\vec x}}_l+\mathbf W_u \tilde{\mathbf{\vec x}}_u+ \mathbf{\vec b} $

    DSTN-Pooling 相比,可以看到:

    • 辅助representation $ \mathbf{\vec v} $ 现在不再使用静态基础信息,而是根据目标广告来动态调整。这意味着模型会针对目标广告自适应地提取辅助数据中的更多有用信息。

      例如,假设历史点击广告和咖啡、衣服、汽车相关。

      • 当目标广告 $ \mathbf{\vec x}_t $ 和咖啡有关时,历史点击的咖啡广告应该为 $ \tilde{\mathbf{\vec x}}_l $ 做出更大的贡献。
      • 当目标广告 $ \mathbf{\vec x}_t $ 和汽车有关时,历史点击的汽车广告应该为 $ \tilde{\mathbf{\vec x}}_l $ 做出更大的贡献。
    • 此外,模型仍然保留了使用不同的权重来融合不同类型辅助数据输入的特点。

    • 最后,模型中的权重 $ \alpha_{c,i} $ 并没有在所有上下文辅助广告之间进行比较,这避免了归一化导致的问题。

  3. 最后我们给出 DNN, DSTN-Pooling, DSTN-Interactive Attention 等模型的结构对比,如下图所示。

20.1.3 部署

  1. 我们在中国第二大搜索引擎 “神马搜索” 中部署了 DSTN-I(简称 DSTN )。下图给出了系统的体系架构,其中包括离线阶段、流式 streaming 阶段、在线阶段。

    • 离线阶段:在线用户行为(广告曝光/点击)不断地记录到离线用户日志数据库中。系统从日志数据库中提取训练数据,并训练 DSTN 模型。

      离线训练首先以 batch 方式执行,然后周期性地使用最新的日志数据对训练好的模型进行增量更新。

    • streaming 阶段:在线用户行为也会被发送到用户会话服务器User Session Server(延迟不超过 10s ),该服务器上维护并更新了每个用户历史记录的 hashmap

      为了减少内存需求和在线计算量,hashmap 保持了每个用户最近3 天内的最多5 个历史点击广告和5 个历史未点击广告。如果超过 5 个,则仅保留最新的 5 个。

    • 在线阶段:收到用户请求之后,Ad Server 首先从User Session Server 检索用户历史记录数据。然后 Ad ServerModel Server 请求一组候选广告的 pCTR

  2. 在线阶段的pCTR 请求是分为几个步骤来完成的。这是因为神马搜索现在每个 app 页面拥有 3-4 个广告位,因此需要为用户返回 3-4 个广告。而且,前面的广告是后面广告的上下文。

    • ①:Ad Server 将候选目标广告集合以及历史点击广告、历史未点击广告一起发送给 Model Server。此时没有上下文广告集合。

    • ②:Model Server 返回这些候选目标广告的 pCTR

    • ③:Ad Server 根据某些排序策略(依赖于 pCTR)选择 top 候选目标广告。假设该 top 候选目标广告是广告 2 ,然后广告 2 将成为其它目标广告的上下文广告。

      Ad Server 将剩余的候选目标广告集合以及上下文广告(广告 2 )、历史点击广告、历史未点击广告一起发送给 Model Server

    • ④:Model Server 将返回剩余候选目标广告的 pCTR

    理论上讲我们需要多次执行步骤 ③和④,从而依次挑选目标广告并更新上下文广告集合。但是考虑到预测准确率和服务延迟之间的折衷,我们仅执行步骤③和④一次,并在步骤④之后 Ad Server 选择2-3 个得分最高的剩余候选目标广告,并将最终广告列表发送给用户。

    本质是,在线预估的时候上下文广告集合是不确定的,依赖于在线策略的选择。

20.2 实验

  1. 这里我们对三个大型数据集进行实验,从而评估所提出的 DSTN 以及几种 state-of-the-artCTR 预估方法的效果

  2. 数据集:

    • Avito 广告数据集:该数据集包含来自俄罗斯最大的通用分类网站 avito.ru 的广告日志随机采样的样本。我们将 2015-04-28 ~ 2015-05-18 的广告日志用于训练,将 2015-05-19 的广告日志用于验证,将 2015-05-20 的广告日志用于测试。

      我们使用的特征包括:

      • 广告特征,如广告ID、广告标题、广告类别、广告的父类别parent category(类别的上一级类别)。
      • 用户特征,如用户 IDIP ID、用户 agent、用户 agent OS、用户设备。
      • query 特征,如搜索query、搜索位置location、搜索类别cateogry、搜索参数 parameter
    • Search 广告数据集:该数据集包含来自阿里巴巴商业搜索广告系统的广告曝光和点击日志随机采样的样本。我们将 20186 月连续7 天的广告日志用于训练,将下一天的广告日志用于验证,将下下一天的广告日志用于测试。

      我们使用的特征包括:

      • 广告特征,如广告ID、广告标题、广告行业。
      • 用户特征,如用户IDIP ID、用户 agent
      • query 特征,如搜索query、搜索位置location
    • News feed 广告数据集:该数据集来自阿里巴巴商业新闻 feed 广告系统的广告曝光和点击日志随机采样的样本。我们将 20187 月连续7 天的广告日志用于训练,将下一天的广告日志用于验证,将下下一天的广告日志用于测试。

      我们使用的特征包括:

      • 广告特征,如广告ID、广告标题、广告行业。
      • 用户特征,如用户ID、召回的广告主题 matched ad topic 的数量。
      • 交叉特征,如 AdType-AdResource

      该数据集中的辅助数据不包含上下文广告。这是因为在我们的新闻 feed 广告系统中,页面上仅显示一个广告。

    数据集的统计信息如下表所示,其中 avg 表示 averagectxt 表示 contextualpta 表示 per target ad 。可以看到 distinct 特征数量可以高达 4600 万。

  3. baseline 方法:

    • LR:逻辑回归模型Logistic Regression 。它是一个广义线性模型,建模了一阶特征重要性。

    • FM:因子分解机模型Factorization Machine。它同时对一阶特征重要性和二阶特征交互进行建模。

    • DNN:深度神经网络Deep Neural Network 。每个样本首先经过一个 embedding 层,然后经过几个全连接层。最后输出层利用 sigmoid 函数来预估 CTR

    • Wide&DeepWide&Deep 模型。它结合了 LR 模型(wide 部分)和 DNN 模型(deep 部分)。

    • DeepFMDeepFM 模型。它结合了 FM模型(wide 部分)和 DNN 模型(deep 部分),并且在 wide 部分和 deep 部分之间共享相同的输入和 embedding 向量。事实证明,DeepFM 的性能优于 Wide&Deep, FNN, PNN 等模型。

    • CRF:条件随机场Conditional Random Field 方法。它同时考虑了广告的特征、以及该广告和周围广告surrounding ad 的相似性。

      CTR 预估的对数几率通过 $ \mathbf{\vec w}^\top\mathbf{\vec x}-0.5\beta\times s $ 给出,其中: $ \mathbf{\vec w},\beta $ 为模型参数, $ \mathbf{\vec x} $ 为样本特征, $ s $ 为周围广告的相似性之和 。相似性是在广告标题和广告描述文本中的字符串上人工定义的manually defined

      CRF 在某种程度上是不切实际的,因为在商业广告系统中,无法预先知道目标广告下面的广告。因此,我们仅将上下文广告(即目标广告上方的广告)用作周围的广告。

    • GRUGated Recurrent Unit,最先进的 RNN 网络之一。它利用了用户的历史点击广告序列。

    • DSTN-PDSTN-Pooling 模型。它使用 sum 池化来聚合辅助数据。

    • DSTN-SDSTN-Self Attention 模型。它使用 self attention 来聚合辅助数据。

    • DSTN-IDSTN-Interactive Attention 模型。它引入了辅助数据和目标广告之间的显式交互。

    在所有这些方法中,CRF, GRU, DSTN 均考虑辅助广告,而所有其它方法都聚焦于目标广告上。具体而言:CRF 考虑了上下文广告,GRU 考虑了历史点击广告,DSTN 考虑了上下文广告、历史点击广告、历史未点击广告。

  4. 配置:

    • 每个特征的 embedding 向量维度设为 10。因为 distinct 特征数量太高,如果embedding 维度太大则参数规模异常巨大。
    • DNN, Wide&Deep, DeepFM, GRU, DSTN 中全连接层的层数设为 2,每层的维度分别为512,256
    • dropout rate 设为 0.5
    • GRU 的隐层维度设置为 128
    • DSTN-S 中的 $ f(\cdot) $ 函数是具有单隐层的 MLP,隐层维度为 128
    • DSTN-I 中的 $ \mathbf{\vec h} $ 的维度也设为 128
    • 所有方法都在Tensorflow 中实现,并通过 Adagrad 算法进行优化。batch size 设为 128
    • 我们使用用户最近 3 天的历史行为。为了降低内存需求,我们进一步限制 $ n_c\le 5,n_l\le5,n_u\le 5 $ 。也就是说,如果历史点击广告数量不超过 5 个,则我们全部使用;如果超过5 个,则我们使用最新的 5 个。
  5. 评估指标:测试集上的 AUC, logloss

    AUC 反映了对于随机选择的一个正样本和一个负样本,模型对正样本的rank 高于负样本的概率。

  6. 下表给出了实验结果。可以看到:

    • Wide&DeepLR, DNN 获得了更高的 AUC;同样地, DeepFMFM, DNN 获得了更高的 AUC

      这些结果表明:将 wide 部分和 deep 部分组合在一起可以提高整体的预测能力。

    • CRF 的效果比 LR 好得多,因为 CRF 可以通过一个系数来校正LR 的预测,该系数summarize 了当前广告和上下文广告的相似性。

      但是,这种相似性是基于原始字符串人工定义的,因此遇到了语义gap 的困扰。

    • GRU 在两个数据集上(除了 Search 数据集)的表现优于 LR, FM, DNN, Wide&Deep, DeepFM,因为 GRU 还利用了历史点击广告。

      GRU 的改善在 News Feed 广告数据集上最为明显。这是因为用户没有在 News Feed 广告中提交query,因此历史行为非常有信息量informative

    • DSTN-P 优于 GRU。原因有两个:

      • 首先,用户行为序列中的连续行为可能没有很好的相关性。例如,某个用户最近点击了零食和咖啡的广告。下一次点击的广告可能是关于牙膏的,而不是关于食品的。这仅仅取决于用户的需要,而不是与之前点击广告的相关性。因此,考虑用户行为序列可能不一定有助于提高预测性能。
      • 其次,DSTN-P 可以利用上下文广告、历史未点击广告中的信息。
    • 当我们比较 DSTN 的不同变体时,可以观察到: DSTN-S 的性能优于 DSTN-P,而DSTN-I 的性能进一步优于 DSTN-P

      这些结果表明:和简单的 sum 池化相比,self attention 机制可以更好地强调有用的信息。而interactive attention 机制显式地引入了目标广告和辅助广告之间的互动,因此可以自适应地抽取比 self attention 更多的相关信息。

    • 我们还观察到,logloss 不一定与 AUC 相关。即 AUC 更大的模型,其 logloss 不一定更小。尽管如此,DSTN-I 在所有数据集上的AUC 最大、 logloss 也最小,这显示了模型的有效性。

  7. 为了检查不同类型辅助数据的影响,我们在DSTN-I 模型中分别仅提供上下文广告、仅提供历史点击广告、仅提供历史未点击广告。为了衡量效果,我们定义并计算以下两个指标:

    • 绝对 AUC 提升absolute AUC improvement: AbsImp

      $ \text{AbsImp}(\text{ctxt}) = \text{AUC}(\text{DSTN-I with ctxt ads only}) - \text{AUC}(\text{DNN}) $

      其中 ctxt 是上下文的缩写。

    • 标准化的 AUC 提升 normalized AUC improvemen: NlzImp

      $ \text{NlzImp}(\text{ctxt}) =\frac{\text{AbsImp}(\text{ctxt})}{\text{Avgerage number of ctxt ads per target ad }} $

      这里我们针对平均辅助数据的规模进行归一化。

    AbsImp 考虑AUC 的整体提升,而 NlzImpAUC 提升效果针对单个辅助广告进行标准化。通常我们关注AUC 的绝对提升而不是相对提升,因为在工业实践中 AUC 的绝对提升更具有意义和指导性。

    实验结果如下图所示。

    • (a) 中可以看到:不同类型辅助数据的效果在不同数据集上有所不同。上下文广告在 Avito 数据集上的 AbsImp 最高,而历史未点击广告在Search 数据集上的 AbsImp 最高。

    • (b) 中可以看到:有意思的是,一旦标准化之后,上下文广告、历史点击广告的作用就比历史未点击广告高得多。

      这符合直觉,因为上下文广告可能会分散用户的注意力,而历史点击广告通常会反映出用户的兴趣。相反,历史未点击广告可能会产生很大的噪音:历史未点击可能表明用户对广告不感兴趣,或者用户根本没有查看广告。

  8. 为了检查全连接层深度的影响,我们在DSTN-I 模型中分别选择了三种不同配置的全连接层:单层 256 维、两层 512-256 维、三层 1024-512-256 维。实验结果如下图所示。

    可以看到:

    • 增加全连接层的数量可以在一开始改善 AUC,但是随后添加更多层时,提升的幅度会降低。
    • 最后,添加更多的层甚至可能导致轻微的性能降级degradation。这可能是由于更多的模型参数导致过拟合,以及更深的模型导致训练难度增加而导致的。

  9. 下图分别给出了NNDSTN-I 学到的 ad-embedding 的可视化(基于 t-SNE),不同颜色代表不同的子类目。这些广告是基于 5 个主类目(电子、服装、家具、计算机、个人护理)下的 20 个子类目。我们在每个子类目中随机选择 100 个广告。

    注意:这里可视化的是 target ad embedding,而这里的的 ad embedding 只有广告信息,不包含 query 信息和用户信息。

    可以看到:

    • 两种方法学到的 embedding 均显示了清晰的簇结构,每个簇代表一组相似的广告。
    • 尽管如此,DNN 还是将 iPhone 和 “三星手机” 混在一起,将 “床” 和 “橱柜” 混在一起,将 “礼服” 和 “鞋子” 混在一起。相比之下,DSTN-I 学习到了更清晰的簇,并清楚地区分了不同的子类目。

    这些结果表明,DSTN-I 可以借助辅助广告来学习更具代表性的 embedding

  10. 现在我们通过对 Avito 数据集的一些案例研究来检查 DSTN-I 辅助广告的注意力权重。我们很难分别检查每种类型的辅助广告,因为很难找到包含足够数量的、所有辅助类型广告的案例。

    • 上下文广告:下图给出了关于 YotaPhone 的目标广告。我们显示了三个上下文广告,分别是手机镜头、三星手机、HTC 手机。我们给出了上下文广告的注意力权重 $ \alpha_c $ 。

      可以看到:两个手机广告的权重相差不大(约 0.6),但是手机镜头广告(最不相似)的权重却要高得多(约 0.8)。

      这样的观察结果符合 《Relational click prediction for sponsored search》 中的分析,作者发现:周围的广告和目标广告越相似,目标广告的点击率就越低。这是因为相似的广告可以分散用户的注意力,因为所有这些广告都提供相似的产品或服务。

      相反,相异的广告可以帮助目标广告更加引人注目,因此 DSTN-I 将手机镜头广告给予较大的权重。

      因此对于上下文广告,和目标广告越相似,注意力权重越低。

    • 历史点击广告:目标广告是关于自拍杆。我们给出了历史点击广告的注意力权重 $ \alpha_l $ 。

      • 第一个历史点击广告是关于婴儿安全座椅,这显然与目标广告无关,其注意力权重为 0.5223
      • 第二个历史点击广告是关于闪光灯,闪光灯是用于摄影的数码相机的附件,其注意力权重( 0.7057 )要比婴儿安全座椅高得多。
      • 第三个历史点击广告是关于三脚架,三脚架和自拍杆更为相似,因此注意力权重更高(0.8449)。
      • 第四个历史点击广告也是关于自拍杆,其注意力权重最高(0.9776)。

      这些观察结果表明:历史点击广告和目标广告越相似,注意力权重越高。这是因为:如果用户曾经点击了和目标广告类似的广告,则用户也可能会点击目标广告。

    • 历史未点击广告:目标广告是关于 Sony 相机套装的。四个历史未点击广告分别与自行车、自拍杆、相机镜头、相机套装有关。我们给出了历史未点击广告的注意力权重 $ \alpha_u $ 。

      这些广告和目标广告的相似性依次递增,因此相应的注意力权重也在增加。

      这些观察结果表明:历史未点击广告和目标广告越相似,注意力权重越高。这是因为:如果用户过去没有点击和目标广告类似的广告,那么用户很可能也不会点击目标广告。

    将历史点击广告和历史未点击广告的注意力权重进行比较,我们发现一个有趣的现象:即使历史未点击广告和目标广告非常相似,历史未点击广告的平均权重也要比历史点击广告的平均权重小得多。这是因为历史点击广告会反映出可能的用户偏好,而历史未点击广告则更加模棱两可ambiguous

  11. 我们于 20191 月进行了为期两周的在线 A/B test 实现。基准模型是 Wide&Deep,这是我们最新的在线 serving 模型。我们的在线评估指标是 CTR

    在线实验结果表明:DSTN 的效果始终优于 Wide&Deep,两周的平均 CTR 提升在 6.92% 。这证明了 DSTN 在实际点击率预估任务中的有效性。目前我们已经在神马搜索中部署了 DSTN

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文