论文笔记 | SIGIR2019 | Warm Up Cold-start Advertisements: Improving CTR Predictions via Learning to L...

meta-embedding-title.jpg
meta-embedding-fig3.jpg

论文地址:https://arxiv.org/abs/1904.11547

官方代码:https://github.com/Feiyang/MetaEmbedding

一 为什么读这篇

最近在做提高时效性的工作,范围放大点就是解决所谓item冷启动问题,恰逢读完DIN,看到参考DIN的论文有这么一篇,题目就很扣题了,正是瞌睡遇上枕头,第一时间读下,参考一下思路,看看对于解手头问题有没有帮助。

二 截止阅读时这篇论文的引用次数

2019.9.29 1次。毕竟今年4月才出,另外解决的问题域也确实更细分点,所以引用很少。

三 相关背景介绍

19年4月挂到arXiv上,中了19年的SIGIR。中科院出品,也有清华的唐平中老师加持,一作“肥羊”就有意思了,玩kaggle时各种屠榜,现在是中科院的博士生,也在蚂蚁实习,估计阿里星没跑了。

四 关键词

CTR

Embedding

Cold Start

meta-learning

learning to learn

五 论文的主要贡献

1 引入元学习来解决冷启动问题

2 给ID Embedding更好的初始化

六 详细解读

0 摘要

为了解决冷启动问题,本文提出Meta-Embedding,这是一种基于元学习的方法,可以习得为新广告ID生成理想的初始化Embedding。该方法通过基于梯度的元学习,利用之前习得过的广告来为新广告ID训练Embedding生成器,即本文方法是学习如何更好的学习Embedding。当遇到一个新广告时,训练生成器通过输入它的内容和属性来初始化Embedding。接着,生成的Embedding可以加速模型在warm up阶段(当有很少的标签样本可用时)的拟合。

1 介绍

在工业界,相比没有ID输入的方法,一个被学得很好的广告ID Embedding能极大提升预测准确率。尽管有许多成功的方法,但它们都需要相当多的数据来学习Embedding向量。而且对于一些只有很少训练样本的“小”广告来说,它们训练得到的Embedding很难和“大”广告一样出色,这些问题就是业界所谓的冷启动问题。

如图1所示,KDD2012的数据,5%的广告占据了超过80%的样本。

meta-embedding-fig1.jpg

本文方法的主要理念包括,利用广告特征的参数函数作为ID Embedding生成器,通过两阶段模仿在旧ID上训练生成器,使用基于梯度的元学习来提升冷启动和warm-up阶段的效果。

本文的两个目标:

  1. 在冷启动阶段更好
  2. 在warm-up阶段更快

为了达到这两个目标,针对手中的“大”广告设计了冷启动和warm-up两个阶段的模拟。在冷启动阶段,需要为没有标签的ID赋Embedding初值,在有少量标签样本的warm-up阶段,通过模拟模型拟合过程来更新Embedding,用这种方式来学习如何学习。

本文方法的本质就是将CTR预估问题转化为元学习问题,将学习每个广告视为任务。提出的基于梯度的训练算法有着“与模型无关的元学习”(Model-Agnostic Meta-Learning MAML)的优势。MAML在许多领域快速适应上是成功的,但它对每个任务都训练一个模型,所以当有上百万个任务(广告)时不能直接用于CTR预估。为此,本文将MAML泛化为一个基于内容的Embedding生成器。同时构建同统一的优化目标来平衡冷启动和warm-up的效果。本文方法易于实现,可以应用在离线和在线环节。也可以应用在其他ID特征的冷启动,如用户ID,广告主ID。

本文方法也可以扩展应用在E&E和active learning这两个领域。

本文贡献主要如下:

1 提出Meta-Embedding来学习如何学习新广告的Embedding

2 提出一个简单有效的算法来训练Meta-Embedding生成器,它通过利用反向传播时的二阶导数来使用基于梯度的元学习

3 本文方法可以很容易的在在线冷启动实现。一旦Embedding生成器训练好,它就可以代替简单的随机初始化来进行新ID的Embedding

4 在3个大规模真实数据集上验证了本文方法的有效性。6个SOTA的CTR模型都在冷启动上得到了极大的提升。

2 背景和公式

输入特征x可以划分为三部分\mathbf{x}=\left(\mathbf{i}, \mathbf{u}_{[\mathbf{i}]}, \mathbf{v}\right),包括

1 i表示广告ID

2 \mathbf{u}_{[\mathbf{i}]}表示特定广告i的特征和属性,可能有多个字段

3 v表示不是必须与广告关联的特征,如用户特征,上下文信息

密集矩阵\Phi通常被称为Embedding矩阵,或者查找表。给定Embedding矩阵\Phi和ID i的Embedding \phi_{[\mathbf{i}]},我们就能得到作为判别模型的参数化函数:
\hat{p}=f_{\boldsymbol{\theta}}\left(\phi_{[\mathbf{i}]}, \mathbf{u}_{[\mathbf{i}]}, \mathbf{v}\right)
图2a展示了该模型的基本结构

meta-embedding-fig2.jpg

\boldsymbol{\theta}\Phi用SGD同时更新。

如果一个ID \mathbf{i}^{*}从未在系统中出现过会发生什么?因为从没有见过该广告的标签数据,所以Embedding矩阵对应的行仍然是初始状态,例如是零值附近的随机数。为了解决这个问题,本文设计的Embedding生成器结构如图2b所示,它的初始化用公式表示如下:
\phi_{\left[i^{*}\right]}^{\text {init }}=h_{w}\left(\mathbf{u}_{\left[\mathbf{i}^{*}\right]}\right)
问题来了。

1 如何训练这种Embedding生成器

2 更新参数的目标函数是什么

3 学习如何学习新广告的ID Embedding

3.1 将CTR预估转化为元学习

以元学习的视角来看,本文会引入新的符号,对于给定的ID i,将预测模型写为:
\hat{p}=g_{[\mathrm{i}]}\left(\mathbf{u}_{[\mathrm{i}]}, \mathbf{v}\right)=f_{\boldsymbol{\theta}}\left(\phi_{\mathbf{i}}, \mathbf{u}_{[\mathrm{i}]}, \mathbf{v}\right)
注意g_{[\mathrm{i}]}(\cdot, \cdot)实际上和f_{\theta}\left(\phi_{[i]}, \cdot, \cdot\right)是一样的,参数都是\theta\phi_{[\mathbf{i}]}。用这种方式,可以看到通过将学习问题视为每个广告ID的一项任务,就可以将CTR预估视为元学习的一个实例。对于ID \mathbf{i}=1,2, \cdots,相应的任务t_{1}, t_{2}, \cdots是学习特定任务的模型g_{[1]}, g_{[2]}, \cdots。它们共享来自基模型的参数\theta,同时有自己任务相关的参数\phi_{[1]}, \phi_{[2]}, \cdots

考虑可以访问ID \mathbf{i} \in \mathcal{I}的先前任务t_{\mathbf{i}},这个集合是已知ID的集合,及每个任务的训练样本。这个数据上原始的(预)训练可以提供一组已经学习好的共享参数\theta,以及对于所有先前的ID \mathbf{i} \in \mathcal{I} 特定任务的\phi_{[\mathbf{i}]}参数。然后对于新的ID \mathbf{i}^{*} \notin \boldsymbol{I},无法得知\phi_{\left[i^{*}\right]},因此可以考虑从那些老的ID中学习如何学习\phi_{\left[i^{*}\right]}。这就是以元学习的视角考虑CTR预估的冷启动问题。

3.2 Meta-Embedding

因为共享参数\theta通常通过相当多的历史数据去训练,我们对它的效果是有信心的,所以当训练Meta-Embedding时,可以在整个过程中冻结\theta,不用去更新它。本文只考虑如何学习新ID的Embedding。

对于一个新ID \mathbf{i}^{*},另
\phi_{[i]^{*}}^{\mathrm{init}}=h_{w}\left(\mathbf{u}_{\left[\mathbf{i}^{*}\right]}\right)
作为生成的初始Embedding。此时通过生成的Embedding,模型可以表示为
g_{\text {meta }}\left(\mathbf{u}_{\left[\mathbf{i}^{*}\right]}, \mathbf{v}\right)=f_{\boldsymbol{\theta}}\left(\phi_{\left[\mathbf{i}^{*}\right]}^{\text {init }}, \mathbf{u}_{\left[\mathbf{i}^{*}\right]}, \mathbf{v}\right)
所以这的g_{\text {meta }}(\cdot, \cdot)是一个模型(元学习器),输入为特征,输出为预测,并且不涉及Embedding矩阵。可训练参数是来自h_{\boldsymbol{w}}(\cdot)的元参数w

考虑每个旧ID i的任务t_{\mathbf{i}},会有\mathcal{D}_{[\mathrm{i}]}=\left\{\left(\mathbf{u}_{[\mathrm{i}]}, \mathbf{v}_{j}\right)\right\}_{j=1}^{N_{\mathrm{i}}}这么多训练样本,其中N_{\mathbf{i}}是给定ID的样本个数。

开始的时候,随机选择\mathcal{D}_{[i]}^{a}\mathcal{D}_{[i]}^{b}两个不相交的minibatch标签数据,每个都有K个样本。假设K相当小,例如K<<N_{\mathrm{i}} / 2

3.2.1 冷启动阶段

首先在第一个minibatch \mathcal{D}_{[i]}^{a}上使用g_{\text {meta }}(\cdot, \cdot)做预测,如下式所示:
\hat{p}_{a j}=g_{\text {meta }}\left(\mathbf{u}_{[i]}, \mathbf{v}_{a j}\right)=f_{\boldsymbol{\theta}}\left(\phi_{[i]}^{\text {init }}, \mathbf{u}_{[\mathbf{i}]}, \mathbf{v}_{a j}\right)
其中下标aj表示来自batch \mathcal{D}_{[i]}^{a}的第j个样本,接着计算这些样本上的平均损失:
l_{a}=\frac{1}{K} \sum_{j=1}^{K}\left[-y_{a j} \log \hat{p}_{a j}-\left(1-y_{a j}\right) \log \left(1-\hat{p}_{a j}\right)\right]
到这里也就完成了冷启动阶段:通过生成器h_{w}(\cdot)生成了\phi_{[i]}^{\text {init }}的Embedding,并在第一个batch上评估它得到损失l_{a}

3.2.2 Warm-up阶段

接着用第2个batch \mathcal{D}_{[i]}^{b}模拟Warm-up阶段的学习过程。

通过计算\phi_{[i]}^{\text {init }}初始Embedding损失l_{a}的梯度,以及一步梯度下降,可以得到更新的Embedding:
\phi_{[i]}^{\prime}=\phi_{[i]}^{\mathrm{init}}-a \frac{\partial l_{a}}{\partial \phi_{[\mathrm{i}]}^{\mathrm{init}}}
接着可以在第2个batch上用最小数量的数据训练得到的新Embedding评估。与之前类似,做预测如下:
\hat{p}_{b j}=g_{[i]}^{\prime}\left(\mathbf{u}_{[i]}, \mathbf{v}_{b j}\right)=f_{\theta}\left(\phi_{[i]}^{\prime}, \mathbf{u}_{[i]}, \mathbf{v}_{b j}\right)
同时计算平均损失:
l_{b}=\frac{1}{K} \sum_{j=1}^{K}\left[-y_{b j} \log \hat{p}_{b j}-\left(1-y_{b j}\right) \log \left(1-\hat{p}_{b j}\right)\right]

3.2.3 统一优化目标

从两方面来评估初始Embedding的好坏:

1 对于新广告的CTR预估错误应尽可能小

2 在收集一小部分标签数据后,一点梯度更新就应该有很快的学习

惊喜的是,本文发现l_{a}l_{b}两个损失可以分别完美地适配这两个方面。在第1个batch,因为用生成的初始Embedding做预测,l_{a}是一个评估冷启动阶段生成器的天然指标。在第2个batch,因为Embedding已经更新过一次,所以在warm-up阶段用l_{b}评估样本效率就相当直接了。

为了统一这两个损失,这里提出Meta-Embedding的最终损失函数,即l_{a}l_{b}的加权和:
l_{\text {meta }}=\alpha l_{a}+(1-\alpha) l_{b}
其中系数\alpha \in[0,1]用于平衡两个阶段。

因为l_{meta}是初始Embedding的函数,可以通过链式法则来做元参数w的梯度反向传播:
\frac{\partial l_{\text {meta }}}{\partial w}=\frac{\partial l_{\text {meta }}}{\partial \phi_{[i]}^{\text {init }}} \frac{\partial \phi_{[i]}^{\text {init }}}{\partial w}=\frac{\partial l_{\text {meta }}}{\partial \phi_{[i]}^{\text {init }}} \frac{\partial h_{w}}{\partial w}
其中:
\frac{\partial l_{\text {meta }}}{\partial \phi_{[\text {i }]}^{\text {init }}}=\alpha \frac{\partial l_{a}}{\partial \phi_{[i]}^{\text {init }}}+(1-\alpha) \frac{\partial l_{b}}{\partial \phi_{[i]}^{\prime}}-a(1-\alpha) \frac{\partial l_{b}}{\partial \phi_{[\text {il }}^{\prime}} \frac{\partial^{2} l_{a}}{\partial \phi_{[i]}^{\text {init }}}
尽管有二阶导Hessian-vector存在,也可以很有效的在TensorFlow中实现。

训练算法如下图所示,一个ID的训练过程如图4所示。

meta-embedding-alg1.jpg
meta-embedding-fig4.jpg

3.3 架构和超参

3.3.1 h_{w}(\cdot)的架构

如图5所示

meta-embedding-fig5.jpg

不同字段的Embedding可以用不同的pooling方式。最后用于输出的密集层是生成器唯一需要训练的部分。

通过在最后一层使用三个trick,可以获得数值稳定的输出:

1 使用tanh激活

2 不要增加偏置项

3 使用L2正则惩罚权重

3.3.2 超参\alpha

因为实践上warm-up阶段比冷启动阶段需要更多的步数,因此推荐将\alpha设置为一个小值,使得元学习器更注意warm-up阶段来加速收敛。本文所有实验将该值设置为0.1。

4 实验

4.1 数据集

MovieLens-1M

腾讯2018社交广告比赛

KDD Cup 2012

4.2 基本模型

FM

Wide & Deep

PNN

DeepFM

每个输入字段的Embedding维度固定为256。对于NLP特征,首先将每个token(word)转化为256维的word-embedding,然后使用AveragePooling来得到字段(句子)级别的表示。

4.3 实验设置

4.3.1 数据集划分
meta-embedding-table1.jpg
4.3.2 实验pipeline

开始时先使用老的广告预训练基础模型,用于训练Meta-Embedding的样本个数可见表1。完成训练后,在新广告上进行测试。对于每个新广告,一个接一个的训练3个mini-batch,就好像它们是warm-up的数据,分别命名为batch-a,batch-b,batch-c,每个batch有K个实例,新广告的其他实例用于测试。具体实验步骤如下:

  1. 用老广告数据预训练基模型(1 epoch)
  2. 用训练数据训练Meta-Embedding(2 epoch)
  3. 用随机初始化或Meta-Embedding生成新广告的初始Embedding
  4. 在测试集上评估冷启动效果
  5. 用batch-a更新新广告的ID Embedding,同时计算在测试集上的评估指标
  6. 用batch-b更新新广告的ID Embedding,同时计算在测试集上的评估指标
  7. 用batch-c更新新广告的ID Embedding,同时计算在测试集上的评估指标
4.3.3 评估指标

用LogLoss和AUC,同时用百分比公式来展示相对提升:
\text { LogLoss_precentage }=\left(\frac{\mathrm{LogLoss}}{\mathrm{LogLoss}_{\text {base-cold }}}-1\right) \times 100 \%

\text { AUC_precentage }=\left(\frac{\mathrm{AUC}}{\mathrm{AUC}_{\text {base-cold }}}-1\right) \times 100 \%

4.4 实验结果

meta-embedding-table2.jpg

一个有趣的发现是相对提升在越小的数据集上越显著。

5 相关工作

5.1 解决冷启动问题的方法

有两种类型的方法,一种是通过设计决策策略,例如使用contextual-bandits,或通过为冷item或user设计interview来收集信息。本文属于第二种类型,是将冷启动视为在线监督学习,它通常使用side information用于冷启动阶段,例如使用user属性,item属性,关系数据等等。但是这些方法即没有考虑使用ID,也没有在warm-up阶段对它们做优化。本文不仅使用了全部可用特征,此外目的也是同时提升冷启动阶段和warm-up阶段的效果。

Dropout-Net通过在深度协同过滤模型上应用dropout来处理缺失输入,可以被视为一种用于预训练基础模型的成功训练方法。

5.2 元学习

本文研究的是如何warm-up冷启动广告,在元学习领域相关的问题就是few-shot learning和fast adaptation。本文受到MAML的启发,用基于梯度的元学习方法来学习共享模型参数。

七 小结

本文最大的亮点就是引入元学习来解决CTR预估中的冷启动问题,meta-learning,few shot learning,这些概念已经在CV里有不少应用,现在也迁移到推荐广告领域了。看了第三节感觉写的是真繁琐,说的很玄乎,看起来也很累,得一个字一个字扣,但看完后回味下,好像也没说什么啊,就是交替训练更新参数?另外本文第五节相关工作的梳理很值得一看。

素质四连

要解决什么问题

item冷启动问题

用了什么方法解决

引入元学习,用Meta-Embedding替代随机初始化Embedding

效果如何

离线效果都有提升,这个某种程度上应该也是,专门优化过的Embedding肯定优于随机初始化

还存在什么问题

实验结果那一小节,作者也提到,在腾讯的数据集上,Wide&Deep的对比实验并没有提升,反而有轻微下降,推测原因可能是Wide部分直接使用了原始输入。另外只给出相对提升,没给出原始值。还有对于线上效果如何,没有提到。

算法背后的模式和原理

引入元学习解决CTR问题,借花献佛

八 补充

Model-Agnostic Meta-Learning (MAML)模型介绍及算法详解 https://zhuanlan.zhihu.com/p/57864886

什么是meta-learning? https://www.zhihu.com/question/264595128/answer/743067364

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容