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

2023-11-15

今天的博客主要参考了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 次数影响则不大。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Airbnb深度学习在搜索领域的探索总结 的相关文章

随机推荐

  • 如何理解时钟周期及公式CPU执行时间 = CPU时钟周期数/主频

    因为用OneNote制作的 公式复制不过来太麻烦 直接截图了 下面看一下时钟周期的定义 CPU时钟周期 通常为节拍脉冲或T周期 即主频的倒数 它是CPU中最小的时间单位 每个动作至少需要一个时钟周期 其实就是把前面的式子中的秒这个单位忽略掉
  • Python3 安装 MySQL-python错误解决

    目的 解决 python3 利用 pip 安装 MySQL python 问题 参考错误信息 apps svr python3 bin pip3 install MySQL python Collecting MySQL python Us
  • shuqian

    h1 Bookmarks h1 dl p p dt h3 h3 dt dl
  • 【Nexus】安装配置与使用

    1 为什么使用Nexus 如果没有私服 我们所需的所有构件都需要通过maven的中央仓库和第三方的Maven仓库下载到本地 而一个团队中的所有人都重复的从maven仓库下 载构件无疑加大了仓库的负载和浪费了外网带宽 如果网速慢的话 还会影响
  • Constructing Roads In JGShining's Kingdom

    点击打开链接 Problem Description JGShining s kingdom consists of 2n n is no more than 500 000 small cities which are located i
  • Python3+pyshark捕获数据包并保存为文件

    一 直接使用wireshark捕获数据包并保存为文件 可以使用wireshark通过图形界面的操作来实现捕获数据包并保存为文件 wireshark默认捕获的数据包保存为临时文件 如果最后退出时不选择保存那么临时文件将会被删除 可以在 菜单栏
  • 汉明距离(Hamming Distance)

    汉明距离 Hamming Distance 定义 汉明距离以美国数学家理查德 卫斯里 汉明的名字命名 表示两个相同长度的字符串在相同位置上不同字符的个数 用d x y 来表示x和y两个字符串的汉明距离 汉明距离可以用来计算两个文本之间的相似
  • diff和patch命令——Linux命令解析(一)

    个人学习记录使用 一 说明 patch命令和diff命令 往往是要搭配使用的 patch 利用提供的补丁文件 给源文件打补丁 diff 比较两个文件 生成需要修改的补丁文件 二 diff命令 生成补丁文件 1 命令格式 diff optio
  • Cygwin 、MSYS、MinGW 的区别与联系是怎样的?

    讲区别联系之前 我们先看一下这几个东东的前世今生 Cygwin 原 Cygnus 出品 已被红帽收购 目前是 RedHat 名下的项目 项目的目的是提供运行于 Windows 平台的类 Unix 环境 以 GNU 工具为代表 为了达到这个目
  • Java 中的Lock锁对象(ReentrantLock/ReentrantReadWriteLock)详解

    目录 1 Lock Objects 详解 2 Java 中的 Lock Objects 的实现原理 3 ReentrantLock 详解 4 ReentrantReadWriteLock 详解 5 Lock锁的等待和唤醒 6 Lock 和
  • 代码的执行原理

    代码的执行原理 一 代码段 什么是代码段 一个script标签就是一个代码段 JS代码在执行时 是一个代码段一个代码段执行 二 代码执行的步骤 JS代码在执行时分两个阶段 1 预编译 2 代码执行 每一个阶段做的事情是不一样的 先了解一下定
  • UE5 Rokoko Studio Live(动捕实时链接)

    UE5 Rokoko动作捕捉实时 一 新建初始化项目 添加插件 打开UE5 1 1 新建 第三人称游戏 文件夹筛选找到模板自带的关卡 新建动画蓝图 gt 然后选择到UE的小白人骨骼 因为我们需要Rokoko的实时动捕 需要在项目里添加Rok
  • IDEA常用快捷键

    IDEA常用快捷键 快捷键 描述 Ctrl Shift R 全局搜索 替换 Ctrl Shift F 全局搜索 Ctrl F 局部搜索 Shift双击 搜索类 接口等 Ctrl 鼠标点击类名称 进入类的内部 Ctrl Alt O 清除不使用
  • 气候数据处理代码实现

    案例 根据站点降雨量日数据求月总降雨量 年总降雨量 月降雨天数 年降雨天数等 数据 部分数据如下 统计结果
  • 怎么理解KMP算法中的next数组(为甚有时候加一有时候不加一?)

    KMP算法怎么来的和找规律 以及对于BF算法他的主要区别就不再赘述我们 我们来说一下怎么用最快的速度加上已知规律找到给定字符串的next数组 C语言中和java中都适用 我们已经找到了部分规律 next数组中的值可能和已匹配部分字符串的前缀
  • 关于RabbitMQ的面试题

    关于RabbitMQ的面试题 整理了一下面试中问到rabbitmq消息队列时 面试官可能会问到的问题 面试题1 为什么使用rabbitmq 什么时候用 怎么用 一开始写项目 架构比较单一 使用的是单体结构 把所有的业务都堆积在一个项目里 随
  • [1220]hue数据导出

    1 执行要下载的sql语句 2 执行完成后 点击下面导出 3 选择所有 4 选择每个人对应的文件夹 没有自己名称的可以创建一个 5 选择导出 6 右面是导出执行时的界面 7 选择已经执行的文件 8 按照下面截图提示 就可以将文件下载到本地了
  • iOS上架报错:无法添加以供审核

    无法提交以供审核 要开始审核流程 必须提供以下项目 您必须为要添加的 app 提供版权信息 您在提交 app 审核时遇到的问题是因为需要提供版权信息 而您的 app 缺少相关的版权信息 以下是解决此问题的步骤 确认您是否拥有 app 的版权
  • kettle 关于数据库事务操作的解释说明

    事务与数据库 1 数据库连接只在执行作业或转换时使用 在作业里 每一个作业项都打开和关闭一个独立的数据库连接 转换也是如此 但是因为转换里的步骤是并行执行的 每个步骤都打开一个独立的数据库连接并开始一个事务 尽管这样在很多情况下会提高性能
  • Airbnb深度学习在搜索领域的探索总结

    今天的博客主要参考了Airbnb发表的paper Applying Deep Learning To Airbnb Search 这篇paper介绍了近2年Airbnb在搜索场景下所使用模型的演进路线 以及一些失败的总结和经验的总结 最难能