美团搜索是美团 App 链接用户与商家的一种重要方式,而排序策略则是搜索链路的关键环节,对搜索展现效果起着相当重要的效果。目前,美团的搜索排序流程为多层排序,分别是粗排、精排、异构排序等,多层排序的流程主要是为了平衡效果和性能。其中搜索核心精排策略是 DNN 模型,美团搜索始终贴近业务,而且结合先进技术,从特征、模型结构、优化目标角度对排序效果进行了全面的优化。git
近些年,基于 Transformer[1] 的一些 NLP 模型大放光彩,好比 BERT[2] 等等,将 Transformer 结构应用于搜索推荐系统也成为业界的一个潮流。好比应用于对 CTR 预估模型进行特征组合的 AutoInt[3]、行为序列建模的 BST[4] 以及重排序模型 PRM[5],这些工做都证实了 Transformer 引入搜索推荐领域能取得不错的效果,因此美团搜索核心排序也在 Transformer 上进行了相关的探索。github
本文旨在分享 Transformer 在美团搜索排序上的实践经验。内容会分为如下三个部分:第一部分对 Transformer 进行简单介绍,第二部分会介绍 Transfomer 在美团搜索排序上的应用以及实践经验,最后一部分是总结与展望。但愿能对你们有所帮助和启发。算法
Transformer 是谷歌在论文《Attention is all you need》[1] 中提出来解决 Sequence to Sequence 问题的模型,其本质上是一个编解码(Encoder-Decoder )结构,编码器 Encoder 由 6 个编码 block 组成,Encoder 中的每一个 block 包含 Multi-Head Attention 和 FFN(Feed-Forward Network);一样解码器 Decoder 也是 6 个解码 block 组成,每一个 block 包含 Multi-Head Attention、Encoder-Decoder Attention 和 FFN。具体结构如图 1 所示,其详细的介绍可参考文献[1,6]。性能优化
考虑到后续内容出现的 Transformer Layer 就是 Transformer 的编码层,这里先对它作简单的介绍。它主要由如下两部分组成:微信
Multi-Head Attention网络
Multi-Head Attention 其实是 h 个 Self-Attention 的集成, h 表明头的个数。其中 Self-Attention 的计算公式以下:性能
其中,Q表明查询,K表明键,V表明数值。学习
在咱们的应用实践中,原始输入是一系列 Embedding 向量构成的矩阵 E
,矩阵 E 首先经过线性投影:优化
获得三个矩阵:编码
而后将投影后的矩阵输入到 Multi-Head Attention。计算公式以下:
Point-wise Feed-Forward Networks
该模块是为了提升模型的非线性能力提出来的,它就是全链接神经网络结构,计算公式以下:
Transformer Layer 就是经过这种自注意力机制层和普通非线性层来实现对输入信号的编码,获得信号的表示。
Transformer 在美团搜索排序上的实践主要分如下三个部分:第一部分是特征工程,第二部分是行为序列建模,第三部分是重排序。下面会逐一进行详细介绍。
在搜索排序系统中,模型的输入特征维度高但稀疏性很强,而准确的交叉特征对模型的效果又相当重要。因此寻找一种高效的特征提取方式就变得十分重要,咱们借鉴 AutoInt[3] 的方法,采用 Transformer Layer 进行特征的高阶组合。
咱们的模型结构参考 AutoInt[3] 结构,但在实践中,根据美团搜索的数据特色,咱们对模型结构作了一些调整,以下图 2 所示:
相比 AutoInt[3],该结构有如下不一样:
Embedding Layer 部分:众所周知在 CTR 预估中,除了大规模稀疏 ID 特征,稠密类型的统计特征也是很是有用的特征,因此这部分将全部的稠密特征和稀疏 ID 特征都转换成 Embedding 表示。
Transformer 部分:针对用户行为序列、商户 、品类 、地理位置等 Embedding 表示,使用 Transformer Layer 来显示学习这些特征的交叉关系。
MLP 部分:考虑到 MLP 具备很强的隐式交叉能力,将全部特征的 Embedding 表示 concat 一块儿输入到 MLP。
实践效果及经验
效果:离线效果提高,线上 QV_CTR 效果波动。
经验:
理解用户是搜索排序中一个很是重要的问题。过去,咱们对训练数据研究发现,在训练数据量很大的状况下,item 的大部分信息均可以被 ID 的 Embedding 向量进行表示,可是用户 ID 在训练数据中是十分稀疏的,用户 ID 很容易致使模型过拟合,因此须要大量的泛化特征来较好的表达用户。这些泛化特征能够分为两类:一类是偏静态的特征,例如用户的基本属性(年龄、性别、职业等等)特征、长期偏好(品类、价格等等)特征;另外一类是动态变化的特征,例如刻画用户兴趣的实时行为序列特征。而用户实时行为特征可以明显增强不一样样本之间的区分度,因此在模型中优化用户行为序列建模是让模型更好理解用户的关键环节。
目前,主流方法是采用对用户行为序列中的 item 进行 Sum-pooling 或者 Mean-pooling 后的结果来表达用户的兴趣,这种假设全部行为内的 item 对用户的兴趣都是等价的,于是会引入一些噪声。尤为是在美团搜索这种交互场景,这种假设每每是不能很好地进行建模来表达用户兴趣。
近年来,在搜索推荐算法领域,针对用户行为序列建模取得了重要的进展:DIN 引入注意力机制,考虑行为序列中不一样 item 对当前预测 item 有不一样的影响[7];而 DIEN 的提出,解决 DIN 没法捕捉用户兴趣动态变化的缺点[8]。DSIN 针对 DIN 和 DIEN 没有考虑用户历史行为中的 Session 信息,由于每一个 Session 中的行为是相近的,而在不一样 Session 之间的差异很大,它在 Session 层面上对用户的行为序列进行建模[9];BST 模型经过 Transformer 模型来捕捉用户历史行为序列中的各个 item 的关联特征,与此同时,加入待预测的 item 来达到抽取行为序列中的商品与待推荐商品之间的相关性[4]。这些已经发表过的工做都具备很大的价值。接下来,咱们主要从美团搜索的实践业务角度出发,来介绍 Transformer 在用户行为序列建模上的实践。
在 Transformer 行为序列建模中,咱们迭代了三个版本的模型结构,下面会依次进行介绍。
模型主要构成:全部特征(user 维度、item 维度、query 维度、上下文维度、交叉维度)通过底层 Embedding Layer 获得对应的 Embedding 表示;建模用户行为序列获得用户的 Embedding 表示;全部 Embedding concat 一块儿送入到三层的 MLP 网络。
第一个版本:由于原来的 Sum-pooling 建模方式没有考虑行为序列内部各行为的关系,而 Transformer 又被证实可以很好地建模序列内部之间的关系,因此咱们尝试直接将行为序列输入到 Transformer Layer,其模型结构如图3 所示:
行为序列建模
输入部分:
输出部分:对 Transformer Layer 输出的向量作 Sum-pooling (这里尝试过Mean-pooling、concat,效果差很少)获得行为序列的最终 Embedding 表示。
该版本的离线指标相比线上 Base(行为序列 Sum-pooling) 模型持平,尽管该版本没有取得离线提高,可是咱们继续尝试优化。
第二个版本:第一个版本存在一个问题,对全部的 item 打分的时候,用户的 Embedding 表示都是同样的,因此参考 BST[4],在第一个版本的基础上引入 Target-item,这样能够学习行为序列内部的 item 与 Target-item 的相关性,这样在对不一样的 item 打分时,用户的 Embedding 表示是不同的,其模型结构以下图4 所示:
该版本的离线指标相比线上 Base(行为序列 Sum-pooling) 模型提高,上线发现效果波动,咱们仍然没有灰心,继续迭代优化。
第三个版本:和第二个版本同样,一样针对第一个版本存在的对不一样 item 打分,用户 Embedding 表示同样的问题,尝试在第一个版本引入 Transformer 的基础上,叠加 DIN[7] 模型里面的 Attention-pooling 机制来解决该问题,其模型结构如图5 所示:
该版本的离线指标相比第二个版本模型有提高,上线效果相比线上 Base(行为序列 Sum-pooling)有稳定提高。
实践效果及经验
效果:第三个版本(Transformer + Attention-pooling)模型的线上 QV_CTR 和 NDCG 提高最为显著。
经验:
在引言中,咱们提到美团搜索排序过去作了不少优化工做,可是大部分都是集中在 PointWise 的排序策略上,未能充分利用商户展现列表的上下文信息来优化排序。一种直接利用上下文信息优化排序的方法是对精排的结果进行重排,这能够抽象建模成一个序列(排序序列)生成另外一个序列(重排序列)的过程,天然联想到可使用 NLP 领域经常使用的 Sequence to Sequence 建模方法进行重排序建模。
目前业界已有一些重排序的工做,好比使用 RNN 重排序[10-11]、Transformer 重排序[5]。考虑到 Transformer 相比 RNN 有如下两个优点:(1)两个 item 的相关性计算不受距离的影响 (2)Transformer 能够并行计算,处理效率比 RNN 更高;因此咱们选择 Transformer 对重排序进行建模。
模型结构参考了 PRM[5],结合美团搜索实践的状况,重排序模型相比 PRM 作了一些调整。具体结构如图 6 所示,其中 D1,D2,...,Dn 是重排商户集合,最后根据模型的输出 Score(D1),Score(D2),...,Score(Dn)按照从大到小进行排序。
主要由如下几个部分构成:
模型细节:
实践效果及经验
效果:Transformer 重排序对线上 NDCG 和 QV_CTR 均稳定正向提高。
经验:
2019 年末,美团搜索对 Transformer 在排序中的应用进行了一些探索,既取得了一些技术沉淀也在线上指标上取得比较明显的收益,不过将来还有不少的技术能够探索。
除了上面提到的三点,考虑到美团搜索上承载着多个业务,好比美食、到综、酒店、旅游等等,各个业务之间既有共性也有本身独有的特性,而且除了优化用户体验,也须要知足业务需求。为了更好的对这一块建模优化, 咱们也正在探索 Partition Model 和多目标相关的工做,欢迎业界同行一块儿交流。
肖垚,家琪,周翔,陈胜,云森,永超,仲远,均来自美团 AI 平台搜索与 NLP 部负责人。
美团搜索核心排序组,长期招聘搜索推荐算法工程师,坐标北京。欢迎感兴趣的同窗发送简历到:tech@meituan.com(邮件标题请注明:美团搜索核心排序组)
阅读更多技术文章,请扫码关注微信公众号-美团技术团队!