Airbnb深度学习在搜索领域的探索总结

今天的博客主要参考了Airbnb发表的paper《Applying Deep Learning To Airbnb Search》。这篇paper介绍了近2年Airbnb在搜索场景下所使用模型的演进路线,以及一些失败的总结和经验的总结,最难能可贵的是作者对每一次尝试的失败和调参都给出了详细的分析说明,感觉给我们这些做模型的人做了个很好的样例(要清晰的知道自己的模型好为什么好,不好为什么不好)。

首先来大致梳理一下其介绍其模型的演进路线,和工业界大部分公司一样,其搜索场景下的模型也经历了从传统机器学习到深度学习的转换过程,在深度学习部分尝试了Simple NN => Lambdarank NN => Decision Tree/Factorization Machine NN => Deep NN 这样一个过程。
其实这些模型在之前的博客里都有介绍,其中Simple NN、Lambdarank NN 基础模型都是多层感知机,只不过损失函数上稍有不同,Deep NN只不过网络层数更多了而已, Decision Tree/Factorization Machine NN的结构如下图所示:
在这里插入图片描述
即先用GBDT对原始数据进行特征转换,然后把GBDT对应的叶子节点的Embedding,其他特征作为后面多层神经网络的输入。整个过程比较简单,模型结构图也比较清晰,这里就不再赘述了。

其实下面我来梳理一下作者认为自己在这2年多的探索中遇到的失败模型和一些调参经验:
2个失败的尝试:
1 List Embedding
即对每一个带出租的房子进行Embedding化处理(和广告场景中对每一个商品Embedding的思路是一样的),这个一般看上去会非常make sense,但是最后的效果确不好。作者分析可能因为这些房子的分布非常不均匀,大量的房子都只在记录中出现了很少的次数,导致模型的训练不充分所致;

2 Multi-task
即使用多任务框架,底层的特征表示部分在不同的task之间共享,提高特征的泛化能力。
在这里插入图片描述
这个同样看上去非常make sense(也是广告、NLP等领域的常见手段)。这里使用的两个task一个是房子是否被预订,另一个是房子是否被长时间浏览了,虽然看上去这两个指标有一定的相似性即都标识了用户对该房子的兴趣程度,但是最后的效果确实差强人意。最后作者分析后发现,那些被长时间浏览的房子有些是因为房子的描述很长、房子本身很精致或者房子很独特好玩(可能在这种情况下用户长时间浏览只是因为觉得好玩而不是真正的想去预订)。

下面介绍几种作者提出的很实用的运用在特征工程和实验结果分析步骤中的一些方法和技巧:

1 特征归一化
1.1 对于近似成正态分布的特征,采用 ( f e a t u r e v a l u e − μ ) / σ (feature_{value}-\mu)/\sigma (featurevalueμ)/σ 方式进行归一化

1.2 对于进行幂律(长尾)分布的特征,采用 l o g 1 + f e a t u r e v a l u e 1 + m e d i a n v a l u e log \frac{1+feature_{value}}{1+median_{value}} log1+medianvalue1+featurevalue方式进行归一化

2 在深度学习模型架构之下,什么的样的特征具有更好的泛化能力?即如何对原始特征进行处理可以使训练得出的模型有更好的泛化能力?
作者从深度学习每一层参数的分布分析入手,来观测一下这些特征分布的变化,最终绘图值是将每一个神经元的输出值进行 l o g 2 ( 1 + r e l u o u t p u t ) log_2(1+reluoutput) log2(1+reluoutput)处理
在这里插入图片描述
从上到下依次是模型的输出层,隐藏层和输入层,可以发现随着数据进入到模型后,其分布是逐渐变的光滑,作者推测之所以深度学习有泛化能力可能和特征分布光滑有关系。因为原始特征输入到深度学习网络中后,会存在非常复杂的特征交叉操作,而训练数据往往受限于数据量只包含少部分的特征交叉,故如果能使入模特征变的更光滑,最终模型的整体泛化性能一定能有所提高。

最后作者提出了一种检测模型泛化能力的方法,即在训练集上训练好模型后,对测试集数据中的某一维特征全部倍乘(x2,x3,x4等),如果最终预测结果的NDCG等指标没有明显变化,则说明模型的泛化能力比较好。

3 特征重要性检测方法。
因为深度学习和树模型不一样,其在预测的时候进行了大量特征交叉和非线性的操作,所以不是非常容易对某一维特征进行重要性判断。也许有人会说,可以对测试集数据的某一维特征进行Permutation操作,看最终模型效果下降的百分比,这样的话如果两个特征之间有关联的话,就很难分析判断出来了。作者这里介绍了一种很巧妙的方式,即按照模型最终的预测概率对样本进行排序,然后取高概率段部分数据和低概率段数据做针对某一维特征的分布差异对比,如果分布差异大说明这个特征对模型最终的预测结果影响较大,而如果分布差异不大的话说明这个特征对模型最终预测的结果影响不是很大。一个样例如下所示:
在这里插入图片描述
左边的分布差异是比较大的,右边的则是变化比较小的,说明了price对用户是否最终产生预订行为的影响更大一些,而review 次数影响则不大。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值