首页 > 人工智能 > 机器学习 > 深度学习在美团搜索广告排序的应用实践
http://blog.itpub.net/31542492/viewspace-2156223/
机器人 基于AI技术,美团搭建了世界上规模最大,复杂度最高的多人、多点实时智能配送调度系统;基于AI技术,美团推出了业内第一款大规模落地的企业应用级语音交互产品,为50万骑手配备了智能语音系统;基于AI技术,美团构建了世界上最大的菜品知识库,为200多万商家、3亿多件商品绘制了知识图谱,为2.5亿用户提供了精准的用户画像,并构建了世界上用户规模最大、复杂度最高的O2O智能推荐平台。
另外,业界第一部全面讲述互联网机器学习实践的图书《美团机器学习实践》也即将上市,敬请期待。
在计算广告场景中,需要平衡和优化三个参与方——用户、广告主、平台的关键指标,而预估点击率CTR(Click-through Rate)和转化率CVR(Conversion Rate)是其中非常重要的一环,准确地预估CTR和CVR对于提高流量变现效率,提升广告主ROI(Return on Investment),保证用户体验等都有重要的指导作用。
美团海量的用户与商家数据,广告复杂的场景下众多的影响因素,为深度学习方法的应用落地提供了丰富的场景。本文将结合广告特殊的业务场景,介绍美团搜索广告场景下深度学习的应用和探索。主要包括以下两大部分:
CTR/CVR预估基于深度学习模型的线下训练/线上预估的工程优化。
2.1 场景与特征
结合上述场景,我们抽取了以下几大类特征:
· 人口属性:用户年龄,性别,职业等。
· 建模特征:基于用户的行为序列建模产生的特征等。
· 属性特征:品类,城市,商圈,品牌,价格,促销,星级,评论等。
· 图像特征:类别,建模特征等。
Query特征
上下文特征
· 广告曝光位次。
用户的消费场景
· “指定区域(商圈)”请求:寻找指定区域的商户,这个区域的属性可作为该流量的信息表征。
· “家/公司”: 用户部分的消费场所为“家” 或 “公司”,比如寻找“家”附近的美食,在“公司”附近点餐等,根据用户画像得到的用户“家”和“公司”的位置来识别这种场景。
针对美食、酒店、休娱、丽人、结婚、亲子等众多品类的消费习惯以及服务方式,将数据拆分成三大部分,包括美食、酒店、综合(休娱、丽人、结婚、亲子等)。其中美食表达用户的餐饮需求,酒店表达用户的旅游及住宿需求,综合表达用户的其他生活需求。
实验中发现用户的实时行为对表达用户需求起到很重要的作用。比如用户想找个餐馆聚餐,先筛选了美食,发现附近有火锅、韩餐、日料等店,大家对火锅比较感兴趣,又去搜索特定火锅等等。用户点击过的商户、品类、位置,以及行为序列等都对用户下一刻的决策起到很大作用。
搜索广告CTR/CVR预估经历了从传统机器学习模型到深度学习模型的过渡。下面先简单介绍下传统机器学习模型(GBDT、LR、FM & FFM)及应用,然后再详细介绍在深度学习模型的迭代。
GBDT又叫MART(Multiple Additive Regression Tree),是一种迭代的决策树算法。它由多棵决策树组成,所有树的结论累加起来作为最终答案。它能自动发现多种有区分性的特征以及特征组合,并省去了复杂的特征预处理逻辑。Facebook实现GBDT + LR[5]的方案,并取得了一定的成果。
LR可以视作单层单节点的“DNN”, 是一种宽而不深的结构,所有的特征直接作用在最后的输出结果上。模型优点是简单、可控性好,但是效果的好坏直接取决于特征工程的程度,需要非常精细的连续型、离散型、时间型等特征处理及特征组合。通常通过正则化等方式控制过拟合。
FM可以看做带特征交叉的LR,如下图所示:
从神经网络的角度考虑,可以看做下图的简单网络搭建方式:
模型覆盖了LR的宽模型结构,同时也引入了交叉特征,增加模型的非线性,提升模型容量,能捕捉更多的信息,对于广告CTR预估等复杂场景有更好的捕捉。
例如,在搜索广告场景中,假设将特征划分到8个Field,分别是 用户、广告、Query、上下文、用户-广告、上下文-广告、用户-上下文及其他 ,相对于FM能更好地捕捉每个Field的信息以及交叉信息,每个特征构建的隐向量长度8*k, 整个模型参数空间为8kn+n+1。
·支持FFM模型的分布式训练。
从GBDT模型切到FFM模型,积累的效果如下所示,主要的提升来源于对大规模离散特征的刻画及使用更充分的训练数据:
DNN
· 通过改进模型结构,加入深度结构,利用端到端的结构挖掘高阶非线性特征,以及浅层模型无法捕捉的潜在模式。
· 充分利用图片和文本等在简单模型中不好利用的信息。
Wide & Deep
在完成场景与特征部分介绍的特征工程后,我们基于Wide & Deep模型进行结构调整,搭建了以下网络:
在搜索广告的场景中,上图的Part_1包含离散型特征及部分连续型特征离散化后的结果 (例如用户ID、广告ID、商圈ID、品类ID、GEO、各种统计类特征离散化结果等等)。离散化方式主要采用等频划分或MDLP[7]。每个域构建自己的embedding向量 (缺失特征和按照一定阈值过滤后的低频特征在这里统一视作Rare特征),得到特征的Representation,然后通过Pooling层做采样,并拼接在一起进行信息融合。
在美团搜索广告的场景下,用户的实时行为有非常强的指代性,但是以原始形态直接送入神经网络,会损失掉很多信息,因此我们对它进行了不同方式描述和表示,再送入神经网络之中进行信息融合和学习。另一类很有作用的信息是图像信息,这部分信息的一种处理方式是,可以通过end-to-end的方式,用卷积神经网络和DNN进行拼接做信息融合,但是可能会有网络的复杂度过高,以及训练的收敛速度等问题,也可以选择用CNN预先抽取特征,再进行信息融合。
用户实时行为
· Item Embedding 对用户的行为实体构建embedding向量,然后进行Sum/Average/Weighted Pooling,和其他特征拼接在一起。实验发现,上层属性实体(C_Type, O_Type, C_Loc, O_Loc)的表现很正向,离线效果有了很明显的提升。但是C_P, O_P, Q, S这些实体因为过于稀疏,导致模型过拟合严重,离线效果变差。因此,我们做了两方面的改进:
2. 使用以上方法产生的行为实体embedding作为模型参数初始值,并在模型训练过程中进行fine tuning。同时为了解决过拟合问题,对不同域的特征设置不同的阈值过滤。
· Pattern特征 用户最近期的几个行为实体序列(例如A-B-C)作为Pattern特征,它表示了行为实体之间的顺序关系,也更细粒度地描述了用户的行为轨迹。
· 描述 商户的头图在App商品展示中占据着很重要的位置,而图片也非常吸引用户的注意力。
· E2E model 将Wide & Deep模型和图片分类模型结合起来,训练端到端的网络。
华为诺亚方舟团队结合FM相比LR的特征交叉的功能,将Wide & Deep部分的LR部分替换成FM来避免人工特征工程,于是有了DeepFM[8],网络结构如下图所示:
比起Wide & Deep的LR部分,DeepFM采用FM作为Wide部分的输出,在训练过程中共享了对不同Field特征的embedding信息。
广告预估场景中存在多个训练任务,比如CTR、CVR、交易额等。既考虑到多个任务之间的联系,又考虑到任务之间的差别,我们利用Multi-Task Learning的思想,同时预估点击率、下单率,模型结构如下图所示:
· 由于CTR、CVR两个任务非常类似,所以采用“Hard Parameter Sharing”的结构,完全共享网络层的参数,只在输出层区分不同的任务。
· 输出层在不同任务上单独增加所需特征。
除了以上对网络结构的尝试,我们也进行了多组超参的调优。神经网络最常用的超参设置有:隐层层数及节点数、学习率、正则化、Dropout Ratio、优化器、激活函数、Batch Normalization、Batch Size等。不同的参数对神经网络的影响不同,神经网络常见的一些问题也可以通过超参的设置来解决:
网络宽度深度适当调小,正则化参数适当调大,Dropout Ratio适当调大等。
网络宽度深度适当调大,正则化参数调小,学习率减小等。
合适的激活函数,添加Batch Normalization,网络宽度深度变小等。
调大Learning Rate,合适的优化器,减小Batch Size等。
增加Batch Normalization,网络宽度深度变小等。
· 网格搜索/Grid Search: 这是在机器学习模型调参时最常用到的方法,对每个超参数都敲定几个要尝试的候选值,形成一个网格,把所有超参数网格中的组合遍历一下尝试效果。简单暴力,如果能全部遍历的话,结果比较可靠。但是时间开销比较大,神经网络的场景下一般尝试不了太多的参数组合。
· 分阶段调参 :先进行初步范围搜索,然后根据好结果出现的地方,再缩小范围进行更精细的搜索。或者根据经验值固定住其他的超参数,有针对地实验其中一个超参数,逐次迭代直至完成所有超参数的选择。这个方式的优点是可以在优先尝试次数中,拿到效果较好的结果。
在搜索广告数据集上,不同超参的实验结果如下:
2.3 小结
三、基于深度学习模型的工程优化
TensorFlow程序如果单机运行中出现性能问题,一般会有以下几种问题:
选择正确的IO方式。
在模型的试验阶段,为了快速试验,数据预处理逻辑与模型训练部分都耦合在一起,而数据预处理包含大量IO类型操作,所以很适合用HadoopMR或者Spark处理。具体流程如下:
2、将libfm格式的数据转为易于TensorFlow操作的SparseTensor方式:
将原始数据转换为TensorFlow Record。
TensorFlow读取数据的方式主要有2种,一般选择错误会造成性能问题,两种方式为:
· RecordReader 这种方式是tf在Graph中将读取数据这个操作看做图中一个operation节点,减少了一个copy的过程。同时,在tf中还有batch与threads的概念,可以异步的读取数据,保证在GPU或者 CPU 进行计算的时候,读取数据这个操作也可以多线程异步执行。静态图中各个节点间的阻塞:在一个复杂的DAG计算图中,如果有一个点计算比较慢时,会造成阻塞,下游节点不得不等待。此时,首先要考虑的问题是图中节点参数所存储的位置是否正确。比如如果某个计算节点是在GPU上运算,那么如果这个节点所有依赖的variable对象声明在CPU上,那么就要做一次memcpy,将其从内存中copy到GPU上。因为GPU计算的很快,所以大部分时间花在拷贝上了。总之,如果网络模型比较简单,那么这种操作就会非常致命;如果网络结构复杂,比如网络层次非常深,那么这个问题倒不是太大的问题了。
优化过程
2、MR输出为TensorFlow Record格式,避免使用Feed_dict。
4、程序通过TensorFlow提供的TFrecordReader的方式读取本地磁盘上的数据,这部分的性能提升是最为明显的。原有的程序处理数据的性能大概是1000条/秒,而通过TFrecordReader读取数据并且处理,性能大概是18000条/秒,性能大概提升了18倍。
此时,性能已经基本达到我们的预期了。例如整体数据量是2亿,按照以前的性能计算1000条/秒,大概需要运行55个小时。而现在大概需要运行87分钟,再加上预处理(15分钟)与预拉取数据(10分钟)的时间,在不增加任何计算资源的情况下大概需要2个小时以内。而如果是并行处理,则可以在分钟级完成训练。
线上流量是模型效果的试金石。离线训练好的模型只有参与到线上真实流量预估,才能发挥其价值。在演化的过程中,我们开发了一套稳定可靠的线上预估体系,提高了模型迭代的效率。
我们开发了一个高可用的同步组件:用户只需要提供线下训练好的模型的HDFS路径,该组件会自动同步到线上服务机器上。该组件基于HTTPFS实现,它是美团离线计算组提供的HDFS的HTTP方式访问接口。同步过程如下:
2、同步时,随机链接HTTPFS机器并限制下载速度。
同步过程中,如果发生错误或者超时,都会触发报警并重试。依赖这一组件,我们实现了在2min内可靠的将模型文件同步到线上。
当前我们线上有两套并行的预估计算服务。
TF Serving是TensorFlow官方提供的一套用于在线实时预估的框架。它的突出优点是:和TensorFlow无缝链接,具有很好的扩展性。使用TF serving可以快速支持RNN、LSTM、GAN等多种网络结构,而不需要额外开发代码。这非常有利于我们模型快速实验和迭代。
1、并发请求。一个请求会召回很多符合条件的广告。在客户端多个广告并发请求TF Serving,可以有效降低整体预估时延。
TF Serving服务端的性能差强人意。在典型的五层网络(512*256*256*256*128)下,单个广告的预估时延约4800μs,具体见下图:
· 定制的模型计算实现
例如全连接DNN模型中使用Relu作为激活函数时,我们可以使用滚动数组、剪枝、寄存器和CPU Cache等优化技巧,具体如下:
// 滚动数组 int nextLayerIndex = currentLayerIndex ^ 1 ; System.arraycopy(bias, bOff, data[nextLayerIndex], 0, nextLayerSize); for (int i = 0; i < currentLayerSize; i ++) { float value = data[currentLayerIndex][i]; // 剪枝 if (value > 0.0) { // 寄存器 int index = wOff + i * nextLayerSize; // CPU 缓存友好 for (int j = 0; j < nextLayerSize; j++) { data[nextLayerIndex][j] += value * weights[index + j]; } } } for (int i = 0; i < nextLayerSize; k++) { data[nextArrayIndex][i] = ReLu(data[nextArrayIndex][i]); } arrayIndex = nextArrayIndex;
模型效果
四、总结与展望
参考文献
<p white-space:normal;background-color:#ffffff;"="" style="margin-top: 0px; margin-bottom: 0px; padding: 20px 0px 0px; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); font-family: -apple-system, 'SF UI Text', Arial, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'WenQuanYi Micro Hei', sans-serif; line-height: 2; color: rgb(51, 51, 51); text-align: justify; white-space: normal; word-break: break-all; background-color: rgb(255, 255, 255);"> [1] Chapelle, O., Manavoglu, E., & Rosales, R. (2015). Simple and scalable response prediction for display advertising. ACM Transactions on Intelligent Systems and Technology (TIST), 5(4), 61.[2] Friedman, J. H. (2001). Greedy function approximation: a gradient boosting machine. Annals of statistics, 1189-1232.[3] Rendle, S. (2010, December). Factorization machines. In Data Mining (ICDM), 2010 IEEE 10th International Conference on (pp. 995-1000). IEEE.[4] Juan, Y., Zhuang, Y., Chin, W. S., & Lin, C. J. (2016, September). Field-aware factorization machines for CTR prediction. In Proceedings of the 10th ACM Conference on Recommender Systems (pp. 43-50). ACM.[5] He, X., Pan, J., Jin, O., Xu, T., Liu, B., Xu, T., … & Candela, J. Q. (2014, August). Practical lessons from predicting clicks on ads at facebook. In Proceedings of the Eighth International Workshop on Data Mining for Online Advertising (pp. 1-9). ACM.[6] Cheng, H. T., Koc, L., Harmsen, J., Shaked, T., Chandra, T., Aradhye, H., … & Anil, R. (2016, September). Wide & deep learning for recommender systems. In Proceedings of the 1st Workshop on Deep Learning for Recommender Systems (pp. 7-10). ACM.[7] Dougherty, J., Kohavi, R., & Sahami, M. (1995). Supervised and unsupervised discretization of continuous features. In Machine Learning Proceedings 1995 (pp. 194-202).[8] Guo, H., Tang, R., Ye, Y., Li, Z., & He, X. (2017). Deepfm: A factorization-machine based neural network for CTR prediction. arXiv preprint arXiv:1703.04247.[9] Ma, X., Zhao, L., Huang, G., Wang, Z., Hu, Z., Zhu, X., & Gai, K. (2018). Entire Space Multi-Task Model: An Effective Approach for Estimating Post-Click Conversion Rate. arXiv preprint arXiv:1804.07931.[10] Bergstra, J., & Bengio, Y. (2012). Random search for hyper-parameter optimization. Journal of Machine Learning Research, 13(Feb), 281-305.
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29829936/viewspace-2199849/ ,如需转载,请注明出处,否则将追究法律责任。