Py学习  »  机器学习算法

Airbnb搜索:深度学习排序算法如何进化?

大数据与机器学习文摘 • 3 年前 • 586 次点击  

(点击上方公众号,可快速关注)

转自:深度学习排序艺术

【导读】:

本文将基于Airbnb KDD 2018年到2020年的论文,介绍深度学习在Airbnb搜索排序场景落地的宝贵经验,对工业界搜索、推荐、广告算法的改进,具有很好的指导意义。


2018年,Airbnb提出基于 GBDT + embedding高级特征的排序模型,基于用户的点击、预定序列学习 item的embedding表示,并设计高级特征添加到GBDT排序模型中,线上订单量显著提升,作为将深度学习应用到搜索排序模型中的初步尝试。


2019年,Airbnb提出基于GBDT+FM+DNN的排序模型,尝试在DNN中融入更多的信息。


2020年,Airbnb提出Two Tower排序模型,同时关注解决搜索中经典的Bias、Cold start问题;并提出基于RNN和Two Tower的重排模型,解决搜索结果的多样性问题。



1.Airbnb搜索系统


Airbnb(爱彼迎),是2008年成立于美国硅谷的在线度假租赁市场公司,提供住宿安排,主要是寄宿家庭或旅游体验,是估值百亿美元左右的独角兽公司(2020年)。

在Airbnb的搜索排序问题中,用户的query包含的信息可能有地点、时间、入住人数等,排序系统需要返回最匹配用户需求的搜索结果供用户选择,优化目标主要是优化成交订单数。


如下图所示,用户(user)在每次发出请求后,搜索结果是一个多个item构成的结果页列表(Airbnb中每一个item被称作一个listing, 即一个民宿),最终用户可能预订某个listing。



下图为一个实际的Airbnb搜索例子:



2. Airbnb搜索排序:基于 GBDT + embedding高级特征的模型


Airbnb搜索:Embedding表示学习这篇文章里,我们介绍了KDD 2018 Real-time Personalization using Embeddings for Search Ranking at Airbnb这篇经典的Airbnb Embedding表示学习论文,作者首先基于用户在Airbnb的点击序列、购买序列,用改进的Skip-gram model学习得到每个listing的embedding,然后基于学习的embedding, 设计了个高级排序特征,应用到GBDT搜索排序模型中。



2.1 基于改进Skip-gram model的listing embedding学习


从下图中可以看出,embedding表示学习,已经能很好地学习到listing的类型、风格、价格等信息。



2.2 GBDT排序模型中融入基于embedding的高级特征


然后作者基于学习的embedding, 设计了个应用于搜索排序的8个实数高级排序特征,应用到GBDT排序模型中。


分别基于用户最近2周点击、跳过、点击长时间停留、收藏、联系、预定的listing序列,和待排序的listing之间,计算相似度值。同时作者基于最后一次点击和待排序相似度、用户类型和listing类型相似度设计了另外两个特征。


例如,对于EmbClickSim特征,先对2周点击listing序列根据地点进行分组:例如有两个组,分别在NY(纽约)和LA(洛杉矶),对每个分组计算组内listing的embedding的平均值,并和待排序listing的embdding计算cosine相似度,最后取所有分组的最大相似度作为特征。表示为公式为:


其中M是所有的分组,l是待排序的listing, h是分组内的listing。


离线实验结果:加入基于embedding计算的8个高级排序特征,离线NDCU提升了2.27。


特征重要性分析,显示基于embedding的特征,在104个排序特征中重要性排名较高,对排序结果又重要的影响。同时,线上实验也证明了订单量显著提升。

 



3. Airbnb搜索排序:基于GBDT+FM+DNN的排序模型


在KDD 19 Applying Deep Learning To Airbnb Search这篇论文中,作者详细介绍了Airbnb深度学习排序模型的演进过程。




下图显示了,Airbnb搜索排序模型2017-2018的演进过程,以及对应的在线上订单的相对增益。




3.1 2017/04,Airbnb首先尝试了Simple NN模型


模型输入:使用和GBDT相同的特征。

模型结构:包含一个隐藏层(32个单元,ReLU激活)的全连接网络

损失函数:和GBDT相同,预测用户是否会预定listing,采用L2回归损失,正负样本的label分别是1和0。


3.2 2017/06, Airbnb使用了Lambdarank NN


利用Lambdarank的思想,直接优化NDCG:

  • 采用pairwise的方式,以{booked listing, not-booked listing}作为训练 样本,计算正负样本的分数差,然后和都是1的向量计算cross entropy损失。

  • 对pairwise loss加权:权重为交换pair中两个listing的位置,NDCG的差值。这样加权的好处是,将listing从位置2提升到1,比将位置从10提升到9,权重更大。在实际的搜索系统中,top-3的结果非常重要,所以这样做对提升线上效果很有意义。

Lambdarank NN的具体pairwise loss的Tensorflow实现为:


3.3 2018/03,Airbnb尝试了GBDT/FM + NN模型

GBDT侧:作者借鉴Facebook在ADKDD 2017的 Practical Lessons from Predicting Clicks on Ads at Facebook 论文中的方法,通过GBDT学习特征变换。即在叶子节点的索引信息,编码成embedding,加入NN。


Factorization Machine侧:直接将基于query, listing的预测结果,加入NN。


3.4 2018/06,Airbnb采用了Deep NN

模型输入:195维特征,包括类别embedding特征、实数特征


模型结构:两层全连接NN:127(Relu) , 83(Relu)


作者尝试学习listing id,并没有取得收益。原因是,embeddign学习一般要求在数据中出现次数比较多(例如至少5次),但Airbnb中很多listing的预定却很少。


特征工程经验:

  • NN中dense特征要做归一化:因为NN对数值特征很敏感,过大过小会严重影响学习。

       特征分布服从norm distribution时,采取Z-score normalization;

       接近power law分布时(例如price),采取log

       


    

    

  • 特征分布要平滑:对于特殊的特征,例如地理位置经纬度等,做特殊处理,使其分布尽可能平滑。作者可视化分析了NN中,output、 hidden layer的分布,解释NN有效的原因是:神经网络的有效性,是因为有强大的组合能力,虽然特征组合空间非常大,但是每一层都服从一个平滑的分布后,NN就能很好地预测。


初始化:Xavier初始化网络权重, random uniform {-1,1}初始化embedding。采用 LazyAdamOptimizer:比Adam效果更好。



4. Airbnb搜索排序:Two Tower模型


在KDD 2020 Improving Deep Learning For Airbnb Search这篇论文中,作者详细介绍了Airbnb搜索排序的Two Tower模型,以及如何解决bias, cold-start问题。



4.1 Two Tower排序模型



Query&User Tower和Target Listing Tower,分别学习100维的向量,计算euclidean distance。欧式距离:表示target listing距离query-user的理想listing的距离。


损失函数:基于pair-wise计算,基于Query&User和正样本、负样本的欧式距离,计算差值,然后和全为1的向量,计算cross entropy loss。

线上效果为:预定数提升0.6% ,营收提升0.75%。


4.2 Bias

在搜索推荐中,Bias问题(排名靠前的结果总是更容易被点击)一直是重要的问题、研究的热点。


作者提出了一个简单有效的方法来解决这个问题:即在DNN中加入poisition特征,在训练时使用dropout (dropout rate为0.15),预测时position特征置0。


作者给出这样做的原理解释如下:

对于query q, user u, listing l, DNN打分可以看成相关分和bias分数的乘积:


引入位置k后,公式变为:


而bias和listing无关,公式可简化为:


线上预测,position特征置0,对应的pbias为常数,公式简化为:

因此可以按照DNN的相关性部分(rel)打分。


4.3 Cold-start

对于new listing,使用地理位置邻近的listing信息来预测。



5. Airbnb搜索排序:基于RNN+Two Tower的重排序模型:

搜索系统中,排序(精排)模型对相似的item的打分通常相似。在实际的搜索中,直接用精排模型打分的结果来展示,会出现搜索结果相似度过高的问题,而用户通常有多样性的需求,即希望看到更多样丰富的搜索结果。例如用户在Airbnb闲逛或没有明确意图时,希望看到多种类型的民宿来做选择。在KDD 2020 Managing Diversity in Airbnb Search这篇论文中,作者介绍了基于RNN+Two Tower的重排序模型,优化搜索结果的多样性。






后记

GBDT作为搜索推荐最经典的模型之一,在Amazon搜索、Yahoo搜索 、Facebook广告 [5]、京东搜索推荐、搜狗搜索中,都曾在线上排序中发挥过关键的作用。


在深度学习排序时代,将线上原有传统机器学习模型和深度学习模型更好的结合,具有重要的价值。更多关于基于传统机器学习模型(GBDT)和深度学习结合的论文,可参考CIKM 2020 DMT [6]。


由于本人水平有限,难免有疏漏错误之处,文章中存在的问题,欢迎大家指正!


参考论文:

  1. Real-time Personalization using Embeddings for Search Ranking at  Airbnb, KDD 2018

  2. Applying Deep Learning To Airbnb Search,KDD 19

  3. Improving Deep Learning For Airbnb Search,KDD 20

  4. Managing Diversity in Airbnb Search,KDD 20

  5. Practical lessons from predicting clicks on ads at facebook. ADKDD     2017.

  6. Deep Multifaceted Transformers for Multi-objective Ranking in  Large-Scale E-commerce Recommender Systems, CIKM 2020.





- EOF -


推荐阅读  点击标题可跳转

1、Airbnb 搜索:Embedding 表示学习

2、揭秘为什么大公司搜索推荐都用CTR/CVR Cotrain的框架

3、OpenMMLab的这些CV开源库,你收藏了吗?


看完本文有收获?请转发分享给更多人

关注「大数据与机器学习文摘」,成为Top 1%

点赞和在看就是最大的支持❤️


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/74480
 
586 次点击