闲聊DNN CTR预估模型

原文:http://www.52cs.org/?p=1046

闲聊DNN CTR预估模型

Written by b manongb

作者:Kintocai, 北京大学硕士, 现就职于腾讯。

伦敦大学张伟楠博士在携程深度学习Meetup[1]上分享了Talk《Deep Learning over Multi-field Categorical Data – A Case Study on User Response Prediction in Display Ads》。他在2016 ECIR发表了篇同名的paper[2]。八卦一句, 熟悉推荐领域的人应该会知道此人, svdfeature[3]的作者之一, 11年、12年的KDDCUP都有他的身影。本文不打算完完整整详解Dr. Zhang的这篇文章, 而是希望借此来闲聊DNN在 CTR Prediction 问题上的一些设计思路。

基于Neural Network 解决CTR Prediction并不是很新的想法, 虽然我无从追溯最早尝试实用NN解决CTR Prediction 问题的年份, 但是可以确定2010年已经有了很多NN的尝试, 2012年KDDCUP Track 2 腾讯搜索广告CTR 预估Task上亚军团队使用单隐层的ANN了(包括ANN单模型以及基于ANN的Ensemble)[4]。NN是典型的连续值模型,而CTR Prediction 的输入更多时候是离散特征。理所当然地可以把离散特征全部设计成连续特征(表现为各种similarity、ctr等等), 而事实上大量的特征并不适合设计成连续值特征, 比如搜索广告的历史点击query 序列。如何支持大规模离散DNN一直是工业界面临的难题。

2012年 ICML  Online Advertising Workshop上google 的researcher Greg Corrado 分享了Talk 《Deep Networks for Predicting Ad Click Through Rates》[5]。针对DNN CTR Prediction, Google 提出的方案如下:

Embedding的思路应该说历史悠久了, 可以追溯了Hinton 1986的论文《Learning distributed representations of concepts》, 伴随这NNLM的兴起而火起来, 更多的人应该是从Mikolov的Word2vec[6]开始认识它的。从离散到连续, embedding确实是非常合适的方案, embedding可以把离散特征嵌入到高纬连续空间, 而且embedding 可以通过BP训练求解。

Embedding解决了离散到连续的transform并不代表解决了所有的问题。CTR Prediction已经步入了千亿样本、千亿特征的时代[7],Google Play App 推荐都已经是5000亿样本了[8]。 如果每个离散特征都对应一个representation vector,假设dimension 为50, 那么就是50 * 千亿 级别的参数。毫无疑问, 训练如此庞大参数规模的模型是非常困难的,甚至不可为。解决这个问题可以有很多思路, 比如砍掉低频特征、降低representation vector dimension、特征选择、设计连续值特征等等。试着回想一下离散特征体系, 很容易可以发现离散特征总量是千亿级别, 但是category  field (feature set或则叫feature slot)总数一般也就几十到几百, 那么一种很显而易见的思路就是把离散特征的representation vector 都归一到每个category field上, 如此一来dnn的输入规模瞬间回到了 num_category_field * dimension 的复杂度。

再看看google的这个模型, 脱去所有隐层, 明显就是FM(factorization machines)了[10]。

FM的前半部分可以看成是Logistic Regression, 后半部分是Feature Interaction。看到这里,有经验的人肯定会想到,train 一个FM模型就可以得到embedding, 然后再把FM 学到的模型输入给DNN。Dr. Zhang 在此思路设计的DNN 模型如下:

这里Dr.Zhang 有一个假设:每个category field 有且只有唯一 positive value。

如上图所示, FM可以得到每个离散特征的feature vector, 基于上面的假设,所有的离散特征都可以归一到所属category field下, 每个category field 可以用w 以及一个feature vector 表示。下一步就是产生输入层, Dr.zhang的设计非常有意思, 如下图:

他通过使用每个category field的feature vector 做inner product 或则 outer product 来产生dnn 输入层(也就是上图里面的Product Layer)。这种做法有助于特征的交叉,同时也会导致另外一个问题: 输入层的膨胀。假设有100个category  field, inner product 就会产生接近5000个输入节点, outer product 那就更多了。 为解决这个问题作者又引入了一个矩阵分解的方法来优化, 也算是比较常见的优化方法吧。除此之外,文章还提到了一些包括激活函数选择、 隐层数选择、dropout 概率选择等等trick, 这些都不是我今天想要讲的重点, 有兴趣的同学可以参看对应的paper。

回过头,我们来看看Dr.Zhang模型的一些问题, 第一个问题是category 有且仅有一个positive value这个假设大部分时间是不成立的。比如用户的兴趣特征, 很可能有多个兴趣标签, 也可能缺失。当然这个问题也很好解决, 多个的话可以选择average(类似于Word2vec的隐层处理), 缺失的话可以选择均值默认填充。第二个问题,dropout的真的好么?直观上广告特征输入的稀疏性很强, 大量的category field 缺失, dropout 很可能会极大稀疏性, 引起效果损失。但是用不用dropout没有绝对性, 和特征覆盖以及样本数量强相关, 比如你和百度凤巢或则Google一样拥有数千亿样本, 就没有必要使用dropout。第三个问题, 输入层是否真的需要做inner product或则outer product?这应该是学术界的方法, Dr.zhang引用的那篇文章还没公开发表, 所以暂时没有对比数据。但是只要展开w 以及feature vector, 隐层潜在就会完成outer  product,通过隐层数以及隐层节点数可以控制交叉程度。 输入层复杂度增加会影响整个系统的吞吐,如果样本数据量足够大, 尽可能设计简单一些的模型, 提高吞吐量, 大数据本身就可以解决很多问题。

Google Brain的同学曾经带来了一次关于Tensorflow的讲座, 其中就讲到了Google的App 推荐系统的DNN模型设计。之后没多久Google 公布了实现细节的paper[8]并且在Tensorflow r0.9 提供了对应的高级API[11]。Wide and Deep Learning模型设计:

这个模型的特点是结合了离散LR 以及 Deep Neural Network,category feature 通过embedding的方式输入到DNN学习, 其他一些特征通过LR 方式学习。LR部分通过Feature Cross 精细刻画场景, DNN部分则强调Generalization, Combine 二者尝试得到更优的效果。这种设计虽然好玩, 但是相对于纯Dense Feature的模型设计优势也没有多大, 毕竟有一些问题可以通过特征和数据解决。不过可以换一个角度看这个问题, DNN的每一个隐层都可以有新的输入, 那么这个模型其实就是在最后一个隐层增加输入而已, 这也是很常见的设计方案。相反但是这种模型设计在一些特定的地方是非常有帮助的, 比如需要增加position bias 特征的时候, 把position bias 特征放在最后一个隐层就很有意义(有一些特征真的不适合乱交叉)。

最后我们来回顾DNN CTR Prediction模型的设计, 综合学术界以及工业界的经验, 整个模型的设计思路大致如下:

通过embedding的方式把离散特征转化为Dense Feature, 输入层同时可以增加其他Dense 特征, 比如CTR统计特征、similarity 特征、pv、click等等。每一个隐层都可以增加新的特征输入, 尤其是最后一个隐层。

工业上很多时候都会选择基于FM来产生representation,包括比较有名的百度凤巢、今日头条、阿里。【注:其实不是基于FM产生representation的方法最优秀, 只是国内大部分公司都没有复杂模型自主研发能力, 如果TF、MxNet之类开源DNN Lib没有现成支持离散特征Embedding版本的话就只好如此了。还有一种原因是线上迁移成本以及实际应用场景缘故导致的, 比如线上也想用FM\LR的预估。】输入层可以使用 FM产生的所有数据,包括feature vector、w,同时可以引入其他统计值特征以及新设计的连续值特征。学术界以及一些比赛当中会有一些CNN预估模型, 设计方案也特别令人印象深刻, 这里就不多展开了。

DNN 虽然已经是非常常见的模型了, 而且工业界应用非常广泛了, 但是杀鸡焉用牛刀, 离散LR依然是二分类问题场景的首选方案。不可小看大离散LR, 设计精良的离散LR效果杠杠的, 足够解决大部分实际问题。

到此本文结束, 本文旨在介绍模型设计, DNN的设计细节有兴趣可以未来再探讨。水平有限, 仓促写作, 如有错误或理解错误, 随时沟通!

参考文献

  1. http://techshow.ctrip.com/archives/1149.html
  2. Deep Learning over Multi-field Categorical Data – A Case Study on User Response Prediction. Weinan Zhang
  3. http://svdfeature.apexlab.org/wiki/Main_Page
  4. http://www.kddcup2012.org/
  5. https://sites.google.com/site/admlworkshop/schedule
  6. https://code.google.com/p/word2vec/
  7. Large-scale Deep Learning at Baidu - CIKM 2013. Kai Yu.
  8. Wide & Deep Learning for Recommender Systems. Heng-Tze Cheng,Levent Koc
  9. http://mp.weixin.qq.com/s?__biz=MzAwNDI4ODcxNA==&mid=2652243946&idx=2&sn=de8bb9a36fe9f2f0c97f30aaec87063f&scene=2&srcid=0727O4JXBdr5NU7sFOD48J69&from=timeline&isappin
  10. Factorization Machines. Steffen Rendle.
  11. https://www.tensorflow.org/versions/r0.10/tutorials/wide_and_deep/index.html
时间: 2024-08-06 12:38:07

闲聊DNN CTR预估模型的相关文章

【转】- 从FM推演各深度CTR预估模型(附代码)

从FM推演各深度CTR预估模型(附代码) 2018年07月13日 15:04:34 阅读数:584 作者: 龙心尘 && 寒小阳 时间:2018年7月 出处: 龙心尘 寒小阳 原文地址:https://www.cnblogs.com/suanec/p/9328336.html

几句话总结一个算法之CTR预估模型

背景 假设现在有个商品点击预测的任务,有用户端特征性别.年龄.消费力等,商品侧特征价格.销量等,样本为0或者1,现在对特征进行one hot encode,如性别特征用二维表示,男为[1,0],女为[0,1],其他特征相同处理后拼接起来一共有n维,n是所有特征的类别数之和. Logistic Regression(LR)与二阶 线性模型,y = sigmoid(w, x),w有n维,优点是简单易解释,缺点是太简单,无法挖掘特征组合的情况,如男性+游戏类商品可能是个很强特征.为了弥补这个缺点往往需

为什么CTR预估使用AUC来评估模型?

ctr预估简单的解释就是预测用户的点击item的概率.为什么一个回归的问题需要使用分类的方法来评估,这真是一个好问题,尝试从下面几个关键问题去回答. 1.ctr预估是特殊的回归问题 ctr预估的目标函数为 f(x)=P(+1|x) 特殊之处在于目标函数的值域为[0,1],而且由于是条件概率,具有如下特性 如果将ctr预估按照一般的回归问题处理(如使用Linear Regression),面临的问题是一般的linear regression的值域范围是实数域,对于整个实数域的敏感程度是相同的,所以

CTR预估---传统模型

传统CTR预估模型包括:LR.FM.GBDT等,其优点是:可解释性强.训练和部署方便.便于在线学习. (一)CTR预估 1.在cost-per-click:CPC广告中广告主按点击付费.为了最大化平台收入和用户体验,广告平台必须预测广告的CTR,称作predict CTR:pCTR.对每个用户的每次搜索query,有多个满足条件的广告同时参与竞争.只有pCTR x bid price最大的广告才能竞争获胜,从而最大化eCPM:eCPM=pCTR x bid 基于最大似然准则可以通过广告的历史表现

计算广告之CTR预估-FM模型解析

原文:Factorization Machines 地址:http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.393.8529&rep=rep1&type=pdf 一.问题由来 在计算广告和推荐系统中,CTR预估(click-through rate)是非常重要的一个环节,判断一个商品的是否进行推荐需要根据CTR预估的点击率来进行.传统的逻辑回归模型是一种广义线性模型,非常容易实现大规模实时并行处理,因此在工业界获得了广泛应用,

(读论文)推荐系统之ctr预估-Wide&Deep模型解析

在读了FM和FNN/PNN的论文后,来学习一下16年的一篇Google的论文,文章将传统的LR和DNN组合构成一个wide&deep模型(并行结构),既保留了LR的拟合能力,又具有DNN的泛化能力,并且不需要单独训练模型,可以方便模型的迭代,一起来看下吧. 更好的阅读体验请点击这里. 原文:Wide & Deep Learning for Recommender Systems 地址: [https://arxiv.org/pdf/1606.07792.pdf](https://arxiv

GBDT与LR融合提升广告点击率预估模型

1GBDT和LR融合 LR模型是线性的,处理能力有限,所以要想处理大规模问题,需要大量人力进行特征工程,组合相似的特征,例如user和Ad维度的特征进行组合. GDBT天然适合做特征提取,因为GBDT由回归树组成所以, 每棵回归树就是天然的有区分性的特征及组合特征,然后给LR模型训练,提高点击率预估模型(很多公司技术发展应用过,本人认为dnn才是趋势). 例如,输入样本x,GBDT模型得到两颗树tree1和tree2,遍历两颗树,每个叶子节点都是LR模型的一个维度特征,在求和每个叶子*权重及时L

深度学习在CTR预估中的应用

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由鹅厂优文发表于云+社区专栏 一.前言 二.深度学习模型 1. Factorization-machine(FM) FM = LR+ embedding 2. Deep Neural Network(DNN) 3. Factorisation-machine supported Neural Networks (FNN) 4. Product-based Neural Network(PNN) 5. Wide & Deep Lear

CTR预估中GBDT与LR融合方案

http://www.cbdio.com/BigData/2015-08/27/content_3750170.htm 1.背景 CTR预估,广告点击率(Click-Through Rate Prediction)是互联网计算广告中的关键环节,预估准确性直接影响公司广告收入.CTR预估中用的最多的模型是LR(Logistic Regression)[1],LR是广义线性模型,与传统线性模型相比,LR使用了Logit变换将函数值映射到0~1区间 [2],映射后的函数值就是CTR的预估值.LR,逻辑