Improving Deep Learning For Airbnb Search(KDD20)

本文是一篇偏实践的文章,不讲太多虚的,什么有效什么无效,您请细品!

将深度学习应用于搜索排名是Airbnb最具影响力的产品改进之一。但在推出深度学习模式之后,接下来会发生什么呢?在本文中,我们描述了超越的历程,讨论了我们所说的改进搜索的ABC:

  • A表示体系结构;
  • B表示偏差;
  • C表示冷启动。

对于体系结构,我们描述了一个新的ranking神经网络,重点放在我们现有的DNN超越完全连接的两层网络的过程。在处理ranking中的位置偏差时,我们描述了一种新的方法,这种方法导致了DNN在处理库存方面最显著的改进,而DNN在历史上发现这种改进具有挑战性。为了解决冷启动,我们描述了我们对这个问题的看法,以及我们为改善平台上new listing所做的改变。

我们希望向深度学习过渡的rangking团队将发现这是一个如何迭代DNNs的实际案例研究。

在实践过程中,我们发现:

  • 增加网络层对于卷积神经网络是一种有效的技术,但不一定对所有的dnn都有效。对于像我们这样完全连通的网络,两个隐藏层就足够了,模型容量不是我们的问题;
  • 我们尝试了一些架构,可以更明确地处理Query和列表之间的交互,比如deep和wide,其中查询列表特性交叉被添加到wide部分。其次是各种基于注意力的网络。其目的是使从查询特征派生的隐藏层将注意力集中在从列表特征派生的隐藏层的某些部分上。对这些努力的简短总结是,他们也未能带来太多帮助;
  • 在尝试将成功的深度学习体系结构导入到产品应用程序中时,在翻译过程中经常会丢失的是,体系结构的成功与其应用程序上下文密切相关。报告的体系结构性能增益来自于解决与之相比的基线的某些缺点。由于深度学习普遍缺乏可解释性,因此很难准确推断新体系结构解决了哪些缺陷以及如何解决这些缺陷。因此,确定这些缺陷是否也困扰着国内的产品,就成了一个猜测。
  • 为了能提升成功的概率,我们放弃了下载论文 实现 A/B测试的循环,我们切换为用户lead,模型跟随。

这里的想法是首先量化一个用户问题。模型调整是在用户问题之后进行的。

沿着这些思路,我们观察到,之前描述的一系列成功的排名模型发布不仅与预订量的增加有关,而且与搜索结果的平均价格的降低有关。这表明模型迭代更接近客人的价格偏好,这低于之前模型的估计。我们怀疑,即使在连续降价之后,这款模型的价格选择与客人的喜好之间也可能存在差距。为了量化这一差距,我们研究了客人看到的搜索结果的中间价和客人预订的物品价格之间的差异分布。差价是在取了价格的后计算出来的,因为价格服从对数正态分布。图1描绘了差异是如何分布的。

我们的预期是预订价格将对称分布在搜索结果的中间价周围,并且类似于以零为中心的正态分布。相反,它的负面影响很大,表明客人倾向于低价。这给了我们一个具体的用户问题来调查:

  • 是否更低的价格列表更加倾向于用户喜好的价格。

考虑到两个普通房源与其他房源相同,我们的直觉理解是,客人更喜欢经济实惠的房源。我们的排名模型真的明白这个“便宜就是更好”的原则吗?我们不完全确定。

我们对模型如何解释上市价格缺乏清晰的解释,是因为它是一个DNN。常见的工具,如在logistic回归模型中检查相应的权重或绘制GBDT模型的部分依赖图,在DNN环境中不再有效。为了使得价格更加具有解释性,我们使用下面的方案:

这个−tanh()项允许我们通过提高价格来单调地降低产出分数,从而实现更便宜更好。易于解释的w和参数b使我们能够描绘出价格的确切影响。对于参数的学习值,w=0.33和b=−0.9。

线上的A/B实验,相较于两层隐藏层的DNN,搜索结果的平均价格下降了5.7%,与离线分析结果一致。但由于预订量下降了1.5%,价格的可解释性付出了沉重的代价。我们的假设是,价格与其他特征有很大的相互作用。将价格与模型分离会导致欠拟合。这一假设得到了训练和测试的NDCG都下降的事实的支持。

为了保留模型中更便宜更好的直觉,同时允许价格与其他特性交互,我们开始研究DNN体系结构。

我们构建了如上图所示的体系结构,除了TensorflowTM中本机存在的那些节点之外,它不依赖于任何专门的计算节点。我们讨论了该体系结构的逐步构造,确保从输入价格节点到最终输出的所有路径对价格是单调的:

线上的结果非常相似,导致预订量下降了1.6%。该体系结构要求模型输出在任何情况下都是单调递减的w.r.t价格。这种结构的失败认为价格的单调性是一个过于严格的约束。

虽然第2.3节中描述的体系结构揭示了DNNs在支持模型约束方面的多功能性,但它也教会了我们DNNs的另一个特点:它们的行为就像团队中的另一位明星工程师。

考虑到一个问题,他们通常会想出一个合理的解决方案。但是强迫朝某个方向走,灾难很快就会接踵而至。所以在下一次迭代中,我们决定通过设置上下文而不是控制来管理DNN。我们没有强制要求模型输出相对于价格是单调的,而是添加了一个软提示,即越便宜越好。通常,每个训练示例都包含一对列表,一个已预订,另一个未预订。将DNN应用于这两个列表的特征会生成相应的logit,损失的定义如下图所示。

为了添加price提示,我们为每个训练示例引入了第二个标签,指示成对中哪个列表的价格较低,哪个列表的价格较高。然后按表2所示修改损失。alpha-hyperparameter提供了一种方法来控制结果是按相关性排序还是按价格排序。

为了解决价格的提示,我们引入每个训练样本的第二个label,表示两个列表中哪个列表的价格较低,哪个列表的价格较高。然后按下面的方式修改损失。alpha-hyperparameter提供了一种方法来控制结果是按相关性排序还是按价格排序

为了测试该想法,我们依据最小值调整alpha参数,在线下的测试中,我们可以得到和Baseline一样的NDCG,这允许我们再不伤害相关性的情况下push “越便宜越好”的想法,在线上的A\B测试中,我们发现价格有平均3.3%的下降,在booking上又0.67%的下降。在在线测试中,将新训练的模型应用于整个库存,揭示了将价格损失作为训练目标一部分的真实成本。

降价实验带来的灾难让我们处于一种自相矛盾的状态:搜索结果中的挂牌价格似乎高于客人喜欢的价格,但压低价格却让客人不高兴。为了理解新模型的不足之处,有必要比较基准模型是如何利用价格特征的,但这被完全连接的DNN缺乏可解释性所掩盖。如前所述,像部分依赖plots这样的概念是没有用的,因为它们依赖于给定特征对模型影响的假设与其他特征无关。在DNNs的情况下,这根本不是真的。试图描绘价格的部分依赖产生了平缓倾斜的直线,这表明DNN对价格有一些轻微的线性依赖,这与我们所知道的一切都是矛盾的.

为了取得进展,我们缩小了DNN的可解释性问题。我们没有试图对价格如何影响DNN做一般性的陈述,而是专注于一次解释一个搜索结果。借用单个条件期望(ICE)plots的思想,我们从单个搜索结果中获取列表,在保持所有其他特征不变的情况下横扫价格范围,并构建模型得分图。示例图如图所示。这些图表明,模型已经了解到的完全连接的双层DNN更便宜。

对从日志中随机选择的搜索集合重复ICE分析进一步加强了这一结论。由于试图进一步压低价格,失败的体系结构在质量上正在妥协。

暴政这就产生了一个假设,即图1后面的DNN正遭受着大多数人的暴政,集中在价格和质量的权衡上,这些权衡是针对占主导地位的最受欢迎的地点调整的。将这些折衷推广到尾部查询效果不佳,而且模型无法适应局部条件.于是我们采用双塔结构。

对应的代码如下:

  • 在在线的测试结果中,我们发现双塔的效果获得了0.6%的增益。

我们再看价格的ICE图,我们发现一个明显的改变,而不是地块总是向下倾斜,价格强调一个更便宜的是更好的解释,我们看到分数峰值在某些价格的周围,如上图所示。这更接近“right price for the trip”的正确解释。

在这种情况下,一个经常被提出的问题是,低质量的上市公司是否可以仅仅通过确定一个价格就获得新模式的排名。仔细观察ICE曲线发现,某些价格附近的得分峰值只出现在高质量的上市公司,而这些上市公司通常一开始就排名靠前。对于大多数普通房源,该地块的价格仍然保持着单调递减的曲线。

正确价格和理想清单的概念是围绕query tower生成的向量展开的,因此接下来自然要研究这些向量到底是什么样子的。为了进行分析,我们在随机的搜索样本上运行了双塔DNN,并收集了查询塔的输出向量。由于100-d矢量不是人类可解释的,我们应用t-SNE将其简化为2-d矢量,如下图所示。

令人欣慰的是,在类似的参数值(如客流量和行程长度)周围形成了大型集群。在大的城市群中,直觉上相似的城市被放置在相对较近的地方。

在旅游领域的机器学习应用中,任何时候都有很大一部分用户是新用户,或者是在很长一段时间后才使用产品的。出于所有实际目的,用户处于持续冷启动状态,处理用户级冷启动是核心排名公式本身的一部分。因此,当提到冷启动问题时,我们将注意力集中在项目级别的冷启动(即,如何处理排名中的新列表)。正如在第2.1节中对DNN架构的改进一样,我们的探索的出发点不是文献调查,而是对用户问题的观察。

1. Approaching Cold Start As Explore-Exploit

排名策略可以通过利用对当前库存的了解,在短期内专门优化预订,并且只押注那些有可靠业绩记录的上市公司。但为了市场的长期成功,它需要付出一些成本来探索新的库存。这种折衷可以实现为一个显式的排名提升为新的上市公司,分配更高的排名比什么是由DNN决定。这样一来,新房源就可以以较低的预订成本收集客人的反馈。提升可以进一步细化,通过印象计数或引入时间衰减来封顶。我们的第一次迭代就是测试这样一个增强。通过在线A/B测试,我们将新上市排名提升调整为预订中性,而不是没有提升,同时将8.5%的额外首页曝光分配给新的listings。

在explore和exoloit的机制下存在许多的挑战:

  • 新的listing排名提升被两股相反的力量拉向了不同的方向:1)短期内由于搜索结果的相关性降低而导致用户体验下降(我们可以准确衡量这一影响),而2)长期内由于库存的增加而导致用户体验的改善(我们发现这一影响相当严重)难以量化)。缺乏一个明确而客观的最佳激励量定义导致了激烈的内部辩论,没有一个解决方案能满足每一个感兴趣的团队;
  • 即使在任意确定了探索的费用的总预算之后,预算的适当使用显然取决于某一地点的供需情况。当有高需求时,探索的容忍度很高,但当一个地区的需求不足时,容忍度就没有那么高。而且,在良好供应受到限制的地区,探索和扩大库存的必要性很高。当大量高质量的上市公司处于空置状态时,几乎没有动力承担探索成本。供应和需求又取决于地理位置、季节性和客流量等参数。因此,为了最佳地利用全球探索预算,需要数千个本地化参数,这是一项无法手动完成的任务。

2. Estimating Future User Engagement

为了使系统更易于管理,我们退了一步问:**什么使新的listings不同?**答案是,当然,没有用户生成的参与功能,如预订数量,点击,评论等。其他属性,如价格,位置,便利设施是众所周知的一样,其余的上市。从理论上讲,如果我们有一个oracle来预测一个100%准确的新上市公司的接洽特征,它可以最佳地解决冷启动问题。

与其将cold-start作为一个探索利用的tradeoff,我们将其重新构建为一个参与度预估的问题,重新定义这个问题可以解锁一些重要的东西:它允许我们将这个问题定义一个理想的目标,并不断地朝着这个目标努力。为了解决冷启动问题,我们引入了一个新的组件,该组件为DNN提供了一个新的列表,在训练和评分时预测了用户参与特性:

为了评估estimator的准确性,我们按下面的步骤来做:

  • 从logs里面采样O(100M)个搜索结果,对于每个搜索结果,随机从top100的位置采样一个listing,这代表了一个样本的清单,已收到充分的关注,从guests,所以他们的参与特征充分收敛;
  • 我们令表示从logs中采样的listings的排名,我们将rank表示为真实,以表明listings的参与特征是真实客人互动的结果。根据rank,我们计算实际的discounted 的rank:;
  • 接下来,对于每个样本列表,我们移除所有的参与(engagement)特征,并用测估计器预测的特征替换它们。我们用预测的参与度特征对列表进行评分,在相应的日志搜索结果中找到它的新排名,然后从中计算discounted的排名。我们用对其表示;
  • 对于每个采样的listing,我们计算参与度估计的误差,
  • 为了获取整体误差,我们将所有的采样listings的engagement预测的误差求平均;

为了验证,我们比较了两种估计方法。基线是生产中使用的系统,它为缺少的特性(包括新列表的engament特性)指定默认值。默认值是通过手动分析相应功能而构建的常量。这一比较结果与一个评估器的结果相反,该估计器通过平均新listing附近listings的参与特征来预测参与特征。

为了提高准确性,它只考虑与新房源的客流量相匹配的相邻房源,并计算滑动时间窗口内的平均值,以考虑季节性。例如,要估算两人入住的新盘的预订数量,需要计算两人入住的新盘小半径内所有房源的平均预订数量。这在概念上类似于naivebayes推荐器,后者使用生成方法估计丢失的信息.

在离线分析中,与使用默认值相比,上述接合估计器将接合估计误差降低了42%。

在在线A/B实验中,我们观察到新创建的列表的预订量提高了14%,同时第一页结果的impression也增加了14%。除了对新房源的影响外,整体预订量增加了0.38%,表明用户体验整体改善。

我们调查position bias的出发点与此完全无关。与新上市公司净利润率较低的观察结果类似,另一个表现低于预期的细分市场是精品酒店和传统床和早餐,这一细分市场作为库存的一部分正在迅速增长。从观察中得出的一个假设是,由于位置偏差,在训练数据中历史上代表性不足的库存没有得到最佳排序。但与在new lisitings和冷启动之间的联系不同,没有强有力的理由相信位置偏差是本案的唯一罪魁祸首;还有其他多种假设。虽然我们发现关注用户问题比简单地从文献调查中导入想法要好得多,但这本身并不是万能的。在用户问题和模型中的缺陷之间建立因果关系远非易事。在当前场景中,我们是在黑暗中探索的。但在这期间,我们决定去寻找解释观察结果的模型中最大的差距。而文献调查对于确定我们的模型中潜在的主要差距是至关重要的。

给定用户u,该用户进行了问题的查询q,用户搜索的结果会被分为两大块:

我们将用户booking一个listing的概率表示为两个分解的概率的乘积:

虽然构建propensity model通常涉及干扰搜索结果以收集反事实的示例,但描述了在不进行额外干预的情况下构建propensity model的方法。

我们的解决方案有两个关键亮点。首先,它是非侵入性的,不需要对搜索结果进行任何随机化。我们依赖Airbnb搜索结果的一些独特属性,这些属性使得列表出现在不同的位置,即使它们在排名时的相应分数或多或少是不变的.

  • Listings表示在给定日期范围内只能预订一次的实体。当listings被预订并从搜索中消失时,它会改变剩余listings的位置。
  • 每个Listings都有其独特的日历可用性,因此不同的listings会出现在不同的位置,以便跨日期范围进行类似的查询。

我们的解决方案的第二个亮点是,我们没有建立一个明确的倾向模型。相反,我们在DNN中引入位置作为一个特征,通过dropout进行正则化。在得分过程中,我们将位置特征设置为0。本节的其余部分描述了为什么这样做的直觉。

在基于基于position的模型假设之下,将位置作为一个控制变量有效的从listing ranking中降低了position bias,但是却引入了新的问题,相关性的预测是依赖于位置作为特征的,在预测的时候将其设置为0,我们发现加不加会有1.3%的影响,所以将position作为控制变量看起来会影响相关性的预测。

为了降低position特征的相关性依赖预测,我们使用dropout,在训练的时候,我们将listing设置为0,由dropout率来控制。dropout率在无噪声访问位置特征以准确推断位置偏差和使位置特征噪声化以使其远离相关预测之间进行折衷。我们试图通过以下步骤找到一个平衡点:

我们通过AB测试来评估我们的想法,我们评估了之前的模型以及加入了position bias的网络并在线进行测试,我们发现存在0.7%的gap;与此同时,我们得到了1.8%的收益的提升,这也表明了position bias的重大影响。

深度学习在Airbnb的搜索排名中继续蓬勃发展。我们由衷地感谢社区提供了深入的学习生态系统、开放的思想交流,以及通过分享我们自己的经验参与对话的机会。但我们旅程的亮点是意识到,要突破我们的DNNs的界限,灵感不会来自外部。为此,我们必须遵循用户的引导。

双塔模型在Airbnb搜索排名中的应用相关推荐

  1. 推荐搜索炼丹笔记:双塔模型在Airbnb搜索排名中的应用

    作者:一元,公众号:炼丹笔记 Improving Deep Learning For Airbnb Search(KDD20) 本文是一篇偏实践的文章,不讲太多虚的,什么有效什么无效,您请细品! 将深 ...

  2. 深度学习在Airbnb搜索推荐中的应用实践

    这周分享一篇文章:Applying Deep Learning To Airbnb Search,内容如论文标题所示,介绍了爱彼迎如何在自己的搜索工程中应用深度学习. 我个人是很喜欢这篇文章的风格,讲 ...

  3. 推荐系统中的双塔模型

    文章目录 1. 为什么要学习DSSM双塔模型 2. DSSM模型理论知识 2.1 DSSM模型的原理 2.2 DSSM深度语义匹配模型整体结构 2.2.1 输入层 2.2.2 表示层 2.2.3 匹配 ...

  4. 从DSSM语义匹配到Google的双塔深度模型召回和广告场景中的双塔模型思考

    ▼ 相关推荐 ▼ 1.基于DNN的推荐算法介绍 2.传统机器学习和前沿深度学习推荐模型演化关系 3.论文|AGREE-基于注意力机制的群组推荐(附代码) 4.论文|被"玩烂"了的协 ...

  5. 抖音seo优化源码搭建/搜索排名系统,技术理论分析搭建中。

    抖音seo系统源码SaaS+源码私有化部署搭建,抖音seo源码,抖音seo系统源码,抖音seo系统搭建部署,抖音已经成为了当今最为流行的短视频平台之一,拥有着庞大的用户群体和海量的视频资源.对于一些商 ...

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

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

  7. 双塔模型DSSM及各种变体塔

    本文是由参考1和参考2整合而来. 本文主要介绍项目中用于商业兴趣建模的DSSM双塔模型.作为推荐领域中大火的双塔模型,因为效果不错并且对工业界十分友好,所以被各大厂广泛应用于推荐系统中召回阶段. 通过 ...

  8. DSSM双塔模型及pytorch实现

    本文介绍用于商业兴趣建模的 DSSM 双塔模型.作为推荐领域中大火的双塔模型,因为效果不错并且对工业界十分友好,所以被各大厂广泛应用于推荐系统中. 通过构建 user 和 item 两个独立的子网络, ...

  9. 这是 Google 工程师 Amit Singhal 发表在 Google 官方博客的一篇文章,讲述了 Google 搜索排名背后的一些技术,涉及到 Google 对网页,对语义,对用户意图的理解。

    XEIM这是 Google 工程师 Amit Singhal 发表在 Google 官方博客的一篇文章,讲述了 Google 搜索排名背后的一些技术,涉及到 Google 对网页,对语义,对用户意图的 ...

最新文章

  1. 帝豪gs车机系统wince_吉利新款帝豪GS,内饰升级大双屏,还不涨价,7万多就能买...
  2. 数据结构--二叉树(1)
  3. 动画延迟效果css,每个子元素都有延迟的CSS动画
  4. apiCloud中api.ajax方法跨域传参获取数据
  5. Spark读取配置源码剖析
  6. jMeter HTTP Request Defaults 的学习笔记
  7. C语言--第2次作业
  8. Python升级pip并安装opencv、moviepy包
  9. layer根据内容动态改变窗口高度
  10. ssm框架验证码图片加载不出_基于SSM框架的文件图片上传/下载功能实现
  11. sublime text3创建文件时生成头部注释
  12. linux忘记mysql密码
  13. JavaScript函数和对象
  14. 使用Office 365抓取PM2.5数据
  15. Android版抢票神器使用指南及下载地址
  16. 网易云android国内版,网易云音乐Android版产品体验报告
  17. 大数据开源舆情分析系统-数据采集技术架构浅析
  18. 干货---ARCGIS拓扑规则说明详细讲解
  19. C语言新手入门成长帖(1)
  20. 【安安教具】-【数学】-【一阶线性齐次方程】模拟器 教你如何用python制作一阶线性齐次方程模拟器 python项目小发明

热门文章

  1. java条件运算符类型转换_Java运算符,条件表达式,类型转换
  2. Mysql中文乱码问题解决
  3. linux查看进程自身全路径,在linux环境下如何查看进程的全路径
  4. aso优化师是什么_2019最新ASO优化常见问题精选(下)
  5. miui微博html5版关闭,MIUI10迎来最后一波开发版推送 可关闭广告消息
  6. am5718_基于TI AM5718 车牌识别系统解决方案 - 飞凌嵌入式行业资讯 - 保定飞凌嵌入式技术有限公司...
  7. esp8266 php 接口,ESP8266_SDK基础(5)智能插座_完整项目代码
  8. wxpython制作表格界面_wxpython入门第二步(布局)
  9. mysql获取后一天_MySQL根据某一Date值获取相关时间(前一天,后一天等)
  10. 窗体 局部变量转换为全局_从嵌入式编程中感悟「栈」为何方神圣?