前沿重器[19] | 预训练在美团搜索广告中的应用
前沿重器
栏目主要给大家分享各种大厂、顶会的论文和分享,从中抽取关键精华的部分和大家分享,和大家一起把握前沿技术。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。
近期,我再次总结了我的历史文章,累积起来有50w字,百余篇文章了,有兴趣可以拿来看看,获取方式:七夕清流,百余篇累计50w字文章合集发布。
往期回顾
美团的技术输出和分享总是不断,内容也丰富,看着也收获不少,绝对值得推荐。最近又发现一篇不错的文章,特此拿来分享。
现在的大环境对广告、推荐的内容更为友好,然而这篇文章里,我们能读出很多关于NLP,关于预训练使用的技术细节和技巧,我们可以在平时的应用中也能使用到,我就挑选这些部分详细讲,当然为了保证知识的完整性,对背景和思路也会有详细的讲解。
分享原文在这里:https://zhuanlan.zhihu.com/p/440877757
背景
一个技术的设计,总离不开这个技术产生的背景。搜索广告是广告,但总离不开搜索,因为搜索过程用户的明确需求和广告商的需求总是有矛盾的,因此要平衡两者的关系一直是搜索广告场景需要面临的问题,而要满足用户的需求,首先就是要对用户query进行充分理解,要保证的就是query和广告内容的相关性。
然而,在美团场景下,大家可以想象一下,美团搜索的物料通常是信息丰富甚至可以说是多样性强且有些非结构化的性质,文本的组合又带有大量的冗余和歧义,而且很多广告商其实并不是大型的,而是小商铺,这里没有严格的竞价关键词,且很多店铺的名称也千奇百怪,这些问题都会给搜索广告和用户query的相关性带来巨大挑战。
另外补充一个细节,从文章的讨论和个人理解来看,其实是物料的理解难度较高,这好像也是这篇文章考虑的较多的点,在Query理解技术相对成熟的大背景下,丰富性、业务性强的物料理解任务难度其实更为突出,说白了,太通用的方法还不好解决。
算法的技术探索
和常规的搜索类似,搜索广告的相似度就是围绕结构化信息匹配、文本匹配和语义匹配这三大角度去分析的,而尤其在美团这种场景,三者更是缺一不可。
结构化信息匹配:Query分析结果对POI的类目、属性进行匹配。 文本匹配:结合query文本层面的信息进行匹配,例如和term的共现数、覆盖率以及TF-IDF、BM25之类的计算。 语义匹配:现在较为流行的,泛化能力较强的语义表征和语义相似度计算方法。又分为传统的基于LDA、W2V计算相似度的方式和基于深度学习的方式,显然前者在现在的研究和技术下相对没那么强了。
前两者的计算方式都比较明确,而第三种现在的选择则比较多了,美团选用的是Transformer+ESIM的模式,这种模式的好处自然不用多说,但是也会缺点,而这些缺点也是文章重点讨论的内容。
训练数据中出现的诸如标错、正负分布不均匀等问题。 物料文本信息冗余,内部包含了团单、商品信息等问题。 模型对文本的长度是有限制的,而相关性计算对长文本的处理一直以来都是难题,当然还有效率性能的问题。
针对这些问题,当然也有一系列的应对措施。
数据
上来就是一条很重要的经验:
由于BERT模型微调阶段所需数据量相比ESIM模型更少,并且对数据覆盖全面度、标签准确度、数据分布合理性等因素更为敏感。
这应该不做过实验就一定不知道的坑了,这里很显然是对训练数据的要求。先不着急做什么增强啥的,先弄清楚我们需要什么样的数据:
涉及众多的商品、团单等信息,业务也较为复杂,所以数据需要尽可能覆盖各个场景和主要服务,对数据的广度要求很高。 标注和时间成本都很高,因此能增强、挖掘出可靠的样本很重要。
在这些思考的基础上,可以开始想方案了,美团在这块的心思还是挺多的:
增强上,采用正样本置信加权、负样本分层构造(跨业务、同业务、同类目的负样本)、频次平滑和分布一致性。 关键信息抽取,对长文本中的关键信息进行抽取,一方面用NER的方式过滤不必要的成分,另一方面使用关键词抽取的方式获取核心信息,降低文本的冗余信息。
模型
基于美团当前的产品特点,对业务的区分是非常明显的,餐饮、休娱亲子等,而场景的差异也比较大,虽然基于基于业务对子模型的优化比对全局通用模型的效果更好,但是多业务下的模型维护成本更高且训练数据稀疏难以学到正确的文本表征,因此还是选用了全场景联合训练,这种方式能一定程度的保留场景特性。这里,整体的模型架构用的是通用BERT共享+多个分类器的模式,小场景下各管各地维护对应的分类器做成子模型,训练阶段则采用全场景的联合训练。
除此之外,还需要将品类信息引入到预训练模型中也是非常有用的处理方式,很多时候从文本层面(字面)是很难考虑到这个信息,但有要求模型学到,所以在预训练的时候,会加入一些品类信息做为第三个分块,看下面这张图,可以看到这里的Segment Embedding多了一块,这是和常规语义相似度不一样的部分。
模型的压缩和蒸馏
这里单独聊压缩和蒸馏。
模型压缩应该是优化在线性能的常规操作了,这里主要用的是蒸馏,有两条蒸馏线,分别是从预训练通过蒸馏学到小的通用模型,另一条线是基于任务finetuning后的大模型经过业务数据进一步蒸馏为小模型,蒸馏大家都懂,但是从谁蒸馏到谁,又怎么蒸,是需要理解的。
知道蒸馏以后,要考虑再进一步优化性能,尤其是要抗千万级pqs的性能,文章提了很有意思的一个方案。现在的语义相似度是有两大流派,分别是表征式和交互式,这两种方式有他们各自的优点,非常鲜明,而要兼顾他们的优点,则可以找一个表征式和交互式之间的中间态。来看这个图吧:
前两张图是非常经典的交互式和表征式,交互式相比表征式在业务上相似度计算更为准确,但是双塔模型在物料层,又因为可以离线计算而省去了大量的在线资源消耗,两者比较好的结合就是第三张图,第三张图在强化了双塔模型中的交互计算,从而得到了更加精准的预测,但是这里的交互层仍会对在线有压力,所以美团提出了虚拟交互机制,也就是图4,这种虚拟交互的思路其实是把交互信息学到非交互里面里去,学习方式和蒸馏类似。
指的注意的是,交互模型和表征模型的差距在于对交互信息的表征,所以学习过程需要构造这个虚拟交互矩阵,显然虚拟交互阵的预测是根据两者的表征,而学习过程中让虚拟交互阵和实际交互模型得到的交互矩尽可能接近,推导如下:
经过实验,这种虚拟交互的方式能有和表征式接近的性能而超过表征式的效果,但这个效果并未超过MT-BERT-Large。
相关性
上面讲了模型的优化,但是作为搜索,常规的相关性仍旧不可缺少的,先提几个常见的:
Q和D的字符串包含关系(cqr、ctr等) 短语匹配数和匹配率。 BM25得分。
再者,相关性相似度计算都很可能会忽略一个还挺高频、体验敏感的问题,那就是原串匹配和核心词匹配了,毕竟用户搜了明确的一个词结果答案里压根就没有,这个体验是真的很差,所以这种信息还是需要放进去的。有了这些特征,可以考虑使用机器学习方案来把他们融合起来:LR、GBDT等,这里需要一些高质量的标注数据集,其实弄起来难度不是很高,毕竟需要的都是特征而不是query。
至于应用,精排不这么玩,但是做一些简单的工作还是非常有用的,例如过滤低质量的召回、重排序、TOP相关性评估等,还是很有用的。
部署
高达拼还不算难事,要让他跑起来,这就是一个非常大的工程了,而且一旦有了大模型,性能就会马上是个问题(这好像还是目前的技术瓶颈吧),美团给出了他的解决方案,来看示意图:
对于高频的,那是非常基本的操作了,用缓存手段即可快速处理,别小看这个缓存,可以多看看在线的数据,长尾效应非常明显,几千几万条其实就能覆盖在线绝大部分的流量,长尾的就是是预测了,文章里提到的占比是90%,这个非常可怕了,这其实缓存就是一个空间换时间的操作。
小结
搜索广告中对搜索广告的技术方案,尤其是nlp领域,有不错的了解,而和前面的文章(前沿重器[18] | KDD21-淘宝向量检索)对比来看,淘宝则在用户历史行为上的下足功夫,毕竟淘宝的搜索其实更像是有范围的推荐(想象一下,你就输入一个“电脑”,他出内容的逻辑是不是就应该是接近推荐了,相似度基本没什么问题,而更多要根据个性化来排序,毕竟带有电脑的商品太多了),而美团这块业务对品类更加敏感,个性化估计有但是这里并没有提的很多(当然可能和本文将预训练的原因有关),对单品类下的标题和信息的处理也更加细一些,对样本尤其是负样本的分层抽样、基于业务的关键词抽取以缩小句子长度、低质量内容过滤、虚拟交互,都体现了对业务细节的把握。