搜索引擎主题模型优化(本文不会针对深度学习的构建核心引擎中的借鉴意义)
优采云 发布时间: 2021-12-01 20:11搜索引擎主题模型优化(本文不会针对深度学习的构建核心引擎中的借鉴意义)
%e6%b7%b1%e5%ba%a6%e5%ad%a6%e4%b9%a0%e6%90%9c%e7%b4%a2%e5%bc%95%e6%93%8e%e5 %ae%9e%e8%b7%b5%ef%bc%8d%e6%a8%a1%e5%9e%8b%e5%8f%91%e5%b1%95%e5%8e%86%e7%a8 %8b/
将深度学习应用于 Airbnb 搜索引擎
文章是在KDD 2019上发布的Airbnb搜索引擎主要算法的文章,主要介绍了Airbnb的算法演进。依旧是Airbnb一贯朴实无华的作风:我不在乎有多少创新,更多的是行业结合业务的算法工程。文章的难点在于,文章不仅介绍了Airbnb的算法,以及使用该算法的出发点和考虑,还记录了中间的各种坑,甚至一些失败的实验。真是无私的经验分享。写法更像是各大厂内网的技术总结分享文章。对一般研究开发具有很强的参考作用。
在技术细节上,Airbnb的场景是低频的,作为一个平台,需要同时考虑需求端(用户/网民)和供应端(Airbnb是民宿)。另外,民宿预订具有很强的地理属性,所以文章中的算法对于低频场景和LBS场景的搜索推荐有很强的参考作用。飞猪、携程、马蜂窝酒店、旅游预订等低频场景;谷歌地图、百度地图、高德地图等场景的LBS属性。
抽象的
搜索引擎一直是airbnb成功的重要因素。之前的实现主要是用树模型来实现核心算法,但是出现了瓶颈,所以airbnb后来用深度学习来优化自己的搜索引擎。
本文不会在深度学习算法上进行创新,而是会讨论使用深度学习构建核心引擎的一些细节。一路顺风
介绍
搜索场景是airbnb的一个重要场景。一开始,系统使用了手动评分功能。然后使用gbdt进行特征组合,这是一个比较大的改进,经历了更多的迭代。现在开始转向深度学习。
图:搜索会话示例
典型的搜索引擎在用户查看了一系列listing(相当于其他文章中的item)后完成预订工作。
记录系统运行中途的日志,然后离线训练新的模型模型,将预订房源的排序尽可能排在前列。然后在线使用ab test进行验证。
本文描述的方法是从特征工程和系统工程的介绍。最后,回顾一下内容。
模型进化
模型的迭代也是循序渐进的。深度学习是巅峰表现,是最后逐步迭代的结果,过程中走了很多弯路。
图:展示了离线 ndcg 在每次模型迭代上的改进:
图:展示了每个模型在线转化的相对增长:
Dustinsea:如你所见,在DeepNN完全集成之前,它已经获得了很多好处,并且DeepNN将效果提升到了一个更高的水平。
阶段 1:简单的神经网络
论文12提到的不是英雄,但是我们一开始是从复杂的nn模型开始的,最后我们只得到了复杂的结构和耗时的循环。
在nn上也花了不少时间,把gbdt模型的输出作为nn模型的输入。这个过程最重要的贡献是建立一个特征管道。
阶段 2:LAMBDARANK NN
使用 lambda rank 直接优化离线 ndcg。
第三阶段:GBDT/FM NN
另外一行,gbdt在优化的过程中发现了一个有趣的现象:gbdt的作用和nn对索引的作用相似,但是它们的排序结果不同。受这种现象的启发,gbdt/fm 和 nn 的架构被合并。FM的最终输出直接作为nn的特征,树模型的节点索引作为nn的特征输入(和2014年facebook发表的论文gbdt+lr的思路是一样的)。模型*敏*感*词*如下:
图:NN与GBDT模型融合方法示例
第四阶段:DEEP NN
模型
最后,使用带有两个隐藏层的 nn。配置如下:
特征
大部分特征直接输入,没有过多的特征工程,少部分特征作为其他模型的输出,会经过特殊处理。
价格特点:用模型加工。
相似性特征:使用当前函数的嵌入进行处理。
当使用17亿个样本进行训练,以ndcg作为评价指标时,可以达到收敛的效果。
评估过程中的一个非常难点是我们如何比较模型的结果和人类认知评估的结果。图像中的人物可以作为一个标准的绝对增值来评价,但绝对增值在我们的数据中是看不到的,因为这些绝对因素隐藏得更深。这与视频或音频领域不同。
失败的模型
一般来说,在叙述的时候,每个人都在谈论成功的案例,但这实际上只是整个过程的一小部分。让我向您介绍失败的尝试。因为失败的尝试比较多,这个地方挑了两个。模型。
第一次失败的尝试:直接使用listing ids embedding
在nlp或者电商视频推荐中,使用embedding for item比较成熟,实践证明效果更好。但是在airbnb环境下,因为数据量比较稀缺,即使是最火的民宿一年也只能有365个预订,而且更多的民宿数据很少,所以很难学会stable embedding。基本上都是过拟合,所以使用listing ids会失败。
Dustinsea:所以当 Airbnb 嵌入时,对于人群/POI 组的嵌入比对用户/单个 POI 的嵌入更多。
图:加入listing id embedding后,过拟合问题明显严重
第二种:多任务学习
多任务处理是许多推荐搜索场景中常用的技术。多任务处理是一种听起来很有道理的奇特技术。Airbnb也尝试过。
此外,在文章中尝试的方向是认为需要很长时间浏览的列表应该与预订行为有很强的相关性。因此,进行了多任务学习。学习过程中有两个子任务,一个是预定的子任务,一个是估计用户浏览时间的子任务。
多任务模型在下层共享嵌入,在上层将其分成两个任务,并在损失函数中对预定样本进行加权。在线使用时,仅使用预订的子任务进行估算。
但最终上网的结果是,用户的浏览是浏览市场确实变长了,但预订量基本没有变化。经过分析,可能的原因如下
首先是推荐的内容描述会比较长,或者描述中收录了一些独特的东西,甚至更搞笑,让用户的浏览时间变得更长,但不会影响相应的预订。
第二个可能的原因是该模型倾向于推荐价格较高的房源,让用户浏览,但最终没有预订。因此,多任务处理是一个更具挑战性的方向,需要继续研究。
Dustinsea:多任务学习是大势所趋,理论上是合乎逻辑的,但实际应用时,需要更多的投入,包括对问题的详细分析,所以可以作为在成熟期突破的手段系统的阶段,但在系统的开拓阶段,不一定是好的选择。
图:订单率分布
特征工程
传统的特征工程需要大量的时间和经验,中间有很多技巧可以提高当前的效果,但是这些经验和方法不一定适用于最新变化的数据(因为用户的行为是动态变化的,之前的手册(可能已经迁移了特征工程的人类经验知识)
nn的优点之一是可以自由组合特征,但是我们仍然需要一部分特征工程,但是我们的特殊工程不再关注我们的选择以及如何进行特征变化,而是更多地关注数据的统一预测。处理,以便nn可以更正确地转换和组合特征。
特征归一化
gbdt值与特征的相对顺序有关,而nn会与特征的值有关,所以对特征进行归一化。
图:特征归一化方法
第一种相对z-score处理
第二种,如果分布符合指数分布,则进行日志处理
特征分布
更重要的是从特征的角度确保特征是平滑的。因为如果一般特性不平衡,就会出现问题。检查特征是否平滑有以下好处:
检查数据类型是否有bug
检查如何进行特征转换,例如在文本中,lng/lat 转换为用户和列表之间的距离
图:经纬度特征分布
超参数
dropout:一般dropout是防止你和nn的标准配置,但是在这种场景下效果并不好。文章中给出的解释是dropout更像是数据增强,相当于引入了噪声。文中介绍了人工构造的噪声,离线ndcg提高了1%,但在线没有变化
初始化:使用xavier初始化方法,比默认设置参数为0要好
Optimizer:文章最后使用了LazyAdamOptimizer,因为Adam在实验中发现效果很难优化
文末推荐dnn作为一个方向,因为它可以让大家在很大程度上摆脱特征工程,站在更高的角度考虑优化目标的问题。但是整个过程比较耗时,笔者认为他们的DNN工作才刚刚开始。
图:发展历程