深度学习模型BERT在360搜索广告NLP任务中的应用

"\u003Cdiv\u003E\u003Cp class=\"ql-align-center\"\u003E\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp3.pstatp.com\u002Flarge\u002Fpgc-image\u002F3b0f1e013afb4d09a5f7c6b9812fd239\" img_width=\"1080\" img_height=\"605\" alt=\"深度学习模型BERT在360搜索广告NLP任务中的应用\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cp class=\"ql-align-center\"\u003E\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp\u003E分享嘉宾:高凯明 360算法专家\u003C\u002Fp\u003E\u003Cp\u003E编辑整理:Hoh Xil\u003C\u002Fp\u003E\u003Cp\u003E内容来源:DataFun AI Talk\u003C\u002Fp\u003E\u003Cp\u003E出品社区:DataFun\u003C\u002Fp\u003E\u003Cp\u003E注:欢迎转载,转载请注明出处。\u003C\u002Fp\u003E\u003Cp class=\"ql-align-justify\"\u003E360搜索广告成立于2012年,到今年是第8个年头了。\u003C\u002Fp\u003E\u003Cp class=\"ql-align-justify\"\u003E今天分享的内容分为两部分,第一部分是搜索广告和广告召回。我会介绍搜索广告的业务逻辑,以及召回模块的逻辑。第二部分是语义相关和深度学习,这部分会介绍语义相关的计算方法以及使用的深度学习模型。\u003C\u002Fp\u003E\u003Cp class=\"ql-align-justify\"\u003E\u003Cstrong\u003E▌搜索广告 & 广告召回\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp9.pstatp.com\u002Flarge\u002Fpgc-image\u002F971a2d729614418b930ee094265f8888\" img_width=\"1080\" img_height=\"604\" alt=\"深度学习模型BERT在360搜索广告NLP任务中的应用\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cp class=\"ql-align-justify\"\u003E\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp class=\"ql-align-justify\"\u003E360的搜索广告系统从逻辑上可以划分为三个模块:广告召回、广告排序和广告展示。\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli class=\"ql-align-justify\"\u003E广告召回:这个模块决定召回哪些广告,涉及到广告索引和相关性计算;\u003C\u002Fli\u003E\u003Cli class=\"ql-align-justify\"\u003E广告排序:这个模块决定展示哪些广告,涉及到点击率预估和竞价机制;\u003C\u002Fli\u003E\u003Cli class=\"ql-align-justify\"\u003E广告展示:这个模块决定如何展示广告,涉及到广告创意的选择。\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp class=\"ql-align-justify\"\u003E\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp9.pstatp.com\u002Flarge\u002Fpgc-image\u002F834cb17d50a7409db9d13b043945034c\" img_width=\"1080\" img_height=\"605\" alt=\"深度学习模型BERT在360搜索广告NLP任务中的应用\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cp class=\"ql-align-justify\"\u003E\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp class=\"ql-align-justify\"\u003E下面通过一个 Case,来说明360搜索广告系统的业务逻辑:\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli class=\"ql-align-justify\"\u003E假设,我们两个电商行业的广告主,都购买了某品牌吸尘器的广告。他们向广告系统提交了关键词,和出价。\u003C\u002Fli\u003E\u003Cli class=\"ql-align-justify\"\u003E召回模块会计算 query 与广告关键词的相关性,根据相关性来决定是否召回这两个广告,结果是两个广告都相关,所以两个广告都召回。\u003C\u002Fli\u003E\u003Cli class=\"ql-align-justify\"\u003E广告排序模块,会计算两个广告的点击率和质量分,并根据竞价机制,来决定他们是否可以展示,以及展示位置。\u003C\u002Fli\u003E\u003Cli class=\"ql-align-justify\"\u003E最后,广告展示模块会根据广告主提供的物料以及展示位置,来选择广告创意。\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp class=\"ql-align-justify\"\u003E\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp3.pstatp.com\u002Flarge\u002Fpgc-image\u002F6891992f799146ffaa18b83c625b2921\" img_width=\"1080\" img_height=\"605\" alt=\"深度学习模型BERT在360搜索广告NLP任务中的应用\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cp class=\"ql-align-justify\"\u003E\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp class=\"ql-align-justify\"\u003E接下来继续应用这个 Case 来说明广告召回模块的召回逻辑:左边是用户搜索的 query,右边是广告主购买的关键词,这里有俩种召回方式,第一种是精确匹配召回,第二种是语义相关召回。\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp1.pstatp.com\u002Flarge\u002Fpgc-image\u002Fe38c52ccedba426da9006f7a36aec1bd\" img_width=\"1080\" img_height=\"604\" alt=\"深度学习模型BERT在360搜索广告NLP任务中的应用\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cp class=\"ql-align-justify\"\u003E\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp class=\"ql-align-justify\"\u003E精确匹配召回对应的是一个 Match 的逻辑,可以理解成字符串的匹配,当然还有一些规则的匹配,比如这里会做一个切词之后的乱序的重排序,重排序之后如果能匹配上,我们也算是精确召回。\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp1.pstatp.com\u002Flarge\u002Fpgc-image\u002F8af8a1201bd64f33bb7f42559fd3d495\" img_width=\"1080\" img_height=\"605\" alt=\"深度学习模型BERT在360搜索广告NLP任务中的应用\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cp class=\"ql-align-justify\"\u003E\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp class=\"ql-align-justify\"\u003E语义相关召回对应的是一个 lookup 的逻辑,这里查找的是一个 query 到 bidwords 的映射表, 这个映射表是由一个离线挖掘的流程提供的。而离线挖掘的流程是一个漏斗的逻辑。漏斗的上方是多种数据挖掘方法,比如随机游走,文本检索,等。这些方法提供 query 到关键词的候选集。漏斗的下方是一个相关性模块,这个模块对候选集进行相关性过滤,把过滤后的数据提供给线上的映射表。\u003C\u002Fp\u003E\u003Cp class=\"ql-align-justify\"\u003E所以处在漏斗下方的相关性模块直接决定了线上数据的质量。\u003C\u002Fp\u003E\u003Cp class=\"ql-align-justify\"\u003E\u003Cstrong\u003E▌语义相关&深度学习\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cp class=\"ql-align-justify\"\u003E我们进入第二部分,语义相关和深度学习。\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp3.pstatp.com\u002Flarge\u002Fpgc-image\u002F0e26be626b3f4f3e8632edb4a1454661\" img_width=\"1080\" img_height=\"606\" alt=\"深度学习模型BERT在360搜索广告NLP任务中的应用\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cp class=\"ql-align-justify\"\u003E\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp class=\"ql-align-justify\"\u003E早些时候,计算语义相关性的方法,主要是特征工程 + GBDT。特征包括:文本相似度,embedding 相似度,bm25,以及搜索引擎提供的一些特征,等等。特征工程的问题在很难表征语义,所以准确率得不到保证。\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp9.pstatp.com\u002Flarge\u002Fpgc-image\u002F1548a2e83de9416d98ae09e5ac302e5d\" img_width=\"1080\" img_height=\"604\" alt=\"深度学习模型BERT在360搜索广告NLP任务中的应用\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cp class=\"ql-align-justify\"\u003E\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp class=\"ql-align-justify\"\u003E随着 DeepLearning 技术的发展,nlp 领域的多个任务,相继提出了深层语义模型。\u003C\u002Fp\u003E\u003Cp class=\"ql-align-justify\"\u003E2013年,web search 任务提出了 DSSM 模型,DSSM 对 query 和 doc 独立进行编码,编码层可以选择 FNN,CNN,或者 RNN,输出层用 cosine 和 sigmoid 来计算相关性。DSSM 的特点是 query 和 doc 独立编码,doc 的编码可以离线计算,线上只做 cosine 和 sigmoid 计算。\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp1.pstatp.com\u002Flarge\u002Fpgc-image\u002F554ce40cb2f14e6a891fd1196b24fe26\" img_width=\"1080\" img_height=\"605\" alt=\"深度学习模型BERT在360搜索广告NLP任务中的应用\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cp class=\"ql-align-justify\"\u003E\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp class=\"ql-align-justify\"\u003E2016年,language inference 提出了 ESIM 模型,ESIM 采用了两层 bidirectional LSTM,中间引入了 soft attention。这个模型广泛应用于智能客服系统。如果大家对智能客服了解的话,大概会知道客服系统一般会构建一个问答库,ESIM 用于计算问题和问题的相关性,然后把语义相同的问题归结到同一个答案上。这个就跟我们的广告词召回非常像了,我们的任务是让语义相同的 query 可以召回相同的广告关键词。\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp1.pstatp.com\u002Flarge\u002Fpgc-image\u002F3a300dcd2a1343b0ab9523d4fb1a5705\" img_width=\"1080\" img_height=\"603\" alt=\"深度学习模型BERT在360搜索广告NLP任务中的应用\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cp class=\"ql-align-justify\"\u003E\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp class=\"ql-align-justify\"\u003E2018年,也就去年,我们说,Bert 模型横空出世。Bert 采用了 pre-training 和 fine-tuning 的方式,真正意义上 实现了 NLP 领域的迁移学习。Bert 刷新了11项 NLP 任务的记录,其中就有两项语义相关的任务。\u003C\u002Fp\u003E\u003Cp class=\"ql-align-justify\"\u003E我想大家对 Bert 的评价主要是两种,第一种是,Bert 让我们看到了深层的 Transformer encoder 具有强大的语义表征能力。第二种更实际一点,是 Google 发布的 pretrain 的 model,中文方面就是那个 base 版的 Chinese model。他的意义在于,对于一些小样本的问题,我们用有限的样本,去 fine-tune 这个 model,就可以获得不错的效果。小样本使用大模型,这在之前是做不到的。\u003C\u002Fp\u003E\u003Cp class=\"ql-align-justify\"\u003E\u003Cstrong\u003E1. Models\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp1.pstatp.com\u002Flarge\u002Fpgc-image\u002Fbd7b6825829f4b49b2357fdf08cab0ec\" img_width=\"1080\" img_height=\"602\" alt=\"深度学习模型BERT在360搜索广告NLP任务中的应用\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cp class=\"ql-align-justify\"\u003E\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp class=\"ql-align-justify\"\u003E这是我们在实际工作中使用用的三个模型的参数对照。其中,DSSM 和 ESIM 参数数量都在 2M 这个量级。而 BERT 参数总量超过了 100M。之所有这么多的参数,是因为 bert 将 transformer 层累加了12层。而且每个 transformer 层又是一个 12 个 head 的 multi head Attention。\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp3.pstatp.com\u002Flarge\u002Fpgc-image\u002Fe820c57e8cbe4079af7c88760b5b8647\" img_width=\"1080\" img_height=\"605\" alt=\"深度学习模型BERT在360搜索广告NLP任务中的应用\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cp class=\"ql-align-justify\"\u003E\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp class=\"ql-align-justify\"\u003E我们知道,Google 发布的中文的 model 是12层的 base 版 ,没有发布24层的 large 版。出于一个贪婪的想法,我们在12层上又累加了4层 transformer block,这时候,参数量从 102M 增加到 130M。如果大家有足够的训练数据,可以往上增加层数,如果数据量不够的话,使用原始的12层是足够的。\u003C\u002Fp\u003E\u003Cp class=\"ql-align-justify\"\u003E\u003Cstrong\u003E2. Data\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp3.pstatp.com\u002Flarge\u002Fpgc-image\u002F4117392486004505b1652ce58a6867dd\" img_width=\"1080\" img_height=\"606\" alt=\"深度学习模型BERT在360搜索广告NLP任务中的应用\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cp class=\"ql-align-justify\"\u003E\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp class=\"ql-align-justify\"\u003E关于数据,我们把相关性的大小,定义为0到4的五个分值,相关性依次升高 。这和 bert 刷榜的11个任务中的 Semantic Text Similarity Benchmark 这个任务是一样的。同时,我们把 0分和1分定义为负例,把 2分,3分,和4分定义为正例。\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp3.pstatp.com\u002Flarge\u002Fpgc-image\u002Fe21a848a50e4449c9f5ba8189b8e755e\" img_width=\"1080\" img_height=\"603\" alt=\"深度学习模型BERT在360搜索广告NLP任务中的应用\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cp class=\"ql-align-justify\"\u003E\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp class=\"ql-align-justify\"\u003E我们维护了两个样本集。大样本集有近 11M 样本,主要是通过广告点击日志筛选出来的。通常我们的筛选方式是结合展示,点击,消费数据,然后再加上一个 baseline 的预测值,综合几个维度,按照经验阈值来筛选。这个样本集的特点是样本量大,混淆度也大。我们还有一个小样本集有近15万样本,通过长期的人工标注和运营同学反馈得来的。\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp1.pstatp.com\u002Flarge\u002Fpgc-image\u002F72052c35fe6e4d5a85203ac9595149c7\" img_width=\"1080\" img_height=\"606\" alt=\"深度学习模型BERT在360搜索广告NLP任务中的应用\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cp class=\"ql-align-justify\"\u003E\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp class=\"ql-align-justify\"\u003E两个数据集使用的方式:首先用大数据集,来做第一轮的 training 或 fine-tuning;然后,从小数据集中选取4\u002F5来训练第二轮,用剩余的1\u002F5 来做评测。\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp1.pstatp.com\u002Flarge\u002Fpgc-image\u002F3cb4e54c3ce9441db619ee1002b66da6\" img_width=\"1080\" img_height=\"604\" alt=\"深度学习模型BERT在360搜索广告NLP任务中的应用\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cp class=\"ql-align-justify\"\u003E\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp class=\"ql-align-justify\"\u003E这是我们在一个 Tesla P40 上,训练三个模型的耗时。可以看到, 由于采用了两层 LSTM,ESIM 的耗时是最长的。\u003C\u002Fp\u003E\u003Cp class=\"ql-align-justify\"\u003E\u003Cstrong\u003E3. 性能评测\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp3.pstatp.com\u002Flarge\u002Fpgc-image\u002F9e2522756996475c8481c9e71332dd58\" img_width=\"1080\" img_height=\"603\" alt=\"深度学习模型BERT在360搜索广告NLP任务中的应用\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cp class=\"ql-align-justify\"\u003E\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp class=\"ql-align-justify\"\u003E在衡量模型的指标上,我们选择了 AUC。DSSM 和 ESIM 的 auc 是比较接近的,ESIM 表现更好一些。通过分析 badcases,我们看到 DSSM 和 ESIM 还是比较依赖字面相关的,对语义的捕捉不是很好。而 Bert 的 Auc 达到了86%。\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp1.pstatp.com\u002Flarge\u002Fpgc-image\u002F3891b3a6a181456b903814a874cca057\" img_width=\"1080\" img_height=\"605\" alt=\"深度学习模型BERT在360搜索广告NLP任务中的应用\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cp class=\"ql-align-justify\"\u003E\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp class=\"ql-align-justify\"\u003E以前面的模型为基础,我们又尝试了一些特征工程。我们结合了 bert 和 dssm 和其他十几维特征,训练 tree booster,AUC 可以达到 87 %。不过考虑到特征工程的复杂性,我们没有采用这个方案。最终,只采用单独 BERT 去做相关性服务。\u003C\u002Fp\u003E\u003Cp class=\"ql-align-justify\"\u003E\u003Cstrong\u003E4. 离线挖掘\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cdiv class=\"pgc-img\"\u003E\u003Cimg src=\"http:\u002F\u002Fp1.pstatp.com\u002Flarge\u002Fpgc-image\u002F4d3ed9969f1641b69621dc6b39a45e7e\" img_width=\"1080\" img_height=\"604\" alt=\"深度学习模型BERT在360搜索广告NLP任务中的应用\" inline=\"0\"\u003E\u003Cp class=\"pgc-img-caption\"\u003E\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E\u003Cp class=\"ql-align-justify\"\u003E\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp class=\"ql-align-justify\"\u003E这是我们的一个离线挖掘流程:\u003C\u002Fp\u003E\u003Cp class=\"ql-align-justify\"\u003E整个流程是个漏斗的逻辑。首先是用一些离线挖掘的方法,从日志中找到 <query, bidword> pairs,或者用文本检索的方法,获取到候选集。然后通过相关性的预测,再通过 CTR 预测,最后把过滤后的结果发布到线上的 KV 系统。\u003C\u002Fp\u003E\u003Cp class=\"ql-align-justify\"\u003E所以,整个360的广告召回模块就是这样,按照两种召回方式,其中语义相关召回方式会提供一个非常大的空间,这个召回方式采用了一个离线的挖掘流程。然后采用相关性计算、CTR 预估过滤流程来提供映射表。这是今天分享的全部内容,谢谢大家。\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E"
发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();