一、背景

Airbnb 平台包含数百万种不同的房源,用户可以通过浏览搜索结果页面来寻找想要的房源,我们通过复杂的机器学习模型使用上百种信号对搜索结果中的房源进行排序。 当用户查看一个房源时,他们有两种方式继续搜索:

  • 返回搜索结果页,
  • 查看房源详情页的「相似房源」(会推荐和当前房源相似的房源)。

我们 99% 的房源预订来自于搜索排序和相似房源推荐。

  • 介绍 Airbnb 开发和部署的房源嵌入(Listing Embedding)技术
  • 如何用此来改进相似房源推荐和搜索排序中的实时个性化。

这种嵌入是从搜索会话(Session)中学到的 Airbnb 房源的一种矢量表示,并可用此来衡量房源之间的相似性。 房源嵌入能有效地编码很多房源特征,比如位置、价格、类型、建筑风格和房屋风格等等,并且只需要用 32 个浮点数。我们相信通过嵌入的方法来做个性化和推荐对所有的双边市场平台都非常有效。

嵌入的背景

将词语表示为高维稀疏向量 (high-dimensional, sparse vectors) 是用于语言建模的经典方法。不过,在许多自然语言处理 (NLP) 应用中,这一方法已经被基于神经网络的词嵌入并将词语用低维度 (low-dimentional) 来表示的新模型取代。新模型假设经常一起出现的词也具有更多的统计依赖性,会直接考虑词序及其共现 (co-occurrence) 来训练网络。 随着更容易扩展的单词表达连续词袋模型 (bag-of-words) 和 Skip-gram 模型的发展,在经过大文本数据训练之后,嵌入模型已被证明可以在多种语言处理任务中展现最佳性能。

最近,嵌入的概念已经从词的表示扩展到 NLP 领域之外的其他应用程序。来自网络搜索、电子商务和双边市场领域的研究人员已经意识到,就像可以通过将句子中的一系列单词视为上下文来训练单词嵌入一样,我们也可以通过处理用户的行为序列来训练嵌入用户操作,比如学习用户点击和购买的商品或浏览和点击的广告。 这样的嵌入已经被用于 web 上的各种推荐系统中。

房源嵌入

我们的数据集由 N 个用户的点击会话 (Session) 组成,其中每个会话定义为一个由用户点击的 n 个房源 id 组成的的不间断序列;同时,只要用户连续两次点击之间的时间间隔超过30分钟,我们就会认为是一个新的会话。 基于该数据集,我们的目标是学习一个 32 维的实值表示方式来包含平台上所有的房源,并使相似房源在嵌入空间中处于临近的位置。

列表嵌入的维度被设置为,这样的设置可以平衡离线性能(在下一节中讨论)和在线搜索服务器内存中存储向量所需的空间,能够更好地进行实时相似度的计算。

目前有几种不同的嵌入训练方法,在这里,我们将专注于一种称为负抽样 (Negative Sampling) 的技术。 首先,它将嵌入初始化为随机向量,然后通过滑动窗口的方式读取所有的搜索会话,并通过随机梯度下降(stochastic gradient descent)来更新它们。 在每一步中,我们都会将中央房源的向量更新并将其推向正向相关房源的向量(用户在点击中心房源前后点击的其他房源,滑动窗口长度为),并通过随机抽样房源的方式将它从负向相关房源推开(因为这些房源很大几率与中央房源没有关系)。

 

  • 使用最终预订的房源作为全局上下文 (Global Context) :我们使用以用户预订了房源(上图中紫色标记)为告终的用户会话来做这个优化,在这个优化的每个步骤中我们不仅预测相邻的点击房源,还会预测最终预订的房源。 当窗口滑动时,一些房源会进入和离开窗口,而预订的房源始终作为全局上下文(图中虚线)保留在其中,并用于更新中央房源向量。

  • 适配聚集搜索的情况:在线旅行预订网站的用户通常仅在他们的旅行目的地内进行搜索。 因此,对于给定的中心房源,正相关的房源主要包括来自相同目的地的房源,而负相关房源主要包括来自不同目的地的房源,因为它们是从整个房源列表中随机抽样的。 我们发现,这种不平衡会导致在一个目的地内相似性不是最优的。 为了解决这个问题,我们添加了一组从中央房源的目的地中抽样选择的随机负例样本集。

http://wemedia.ifeng.com/89455165/wemedia.shtml

16、Real-time Personalization using Embeddings for Search Ranking at Airbnb的更多相关文章

  1. ABP(现代ASP.NET样板开发框架)系列之16、ABP应用层——数据传输对象(DTOs)

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之16.ABP应用层——数据传输对象(DTOs) ABP是“ASP.NET Boilerplate Project ...

  2. 16、Collection接口及其子接口Set和List(常用类LinkedList,ArrayList,Vector和Stack)

    16.Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements).一些Collection允许相同 ...

  3. 8、16、32-BIT系列单片机区别与特点

    一.8位单片机 8031/8051/8751是Intel公司早期的产品 1.8031的特点 8031片内不带程序存储器ROM,使用时用户需外接程序存储器和一片逻辑电路373,外接的程序存储器多为EPR ...

  4. mysql数据库优化课程---16、mysql慢查询和优化表空间

    mysql数据库优化课程---16.mysql慢查询和优化表空间 一.总结 一句话总结: a.慢查询的话找到存储慢查询的那个日志文件 b.优化表空间的话可以用optimize table sales; ...

  5. PHP进制转换[实现2、8、16、36、64进制至10进制相互转换]

    自己写了一个PHP进制转换程序,一个类吧,第一次写这个东东,写这个东东,在处理文本文件时能用得到.   可以实现: 10进制转换2.8.16.36.62进制2.8.16.36.62进制转换10进制 有 ...

  6. Ansi、GB2312、GBK、Unicode(utf8、16、32)

    关于ansi,一般默认为本地编码方式,中文应该是gb编码 他们之间的关系在这边文章里描写的很清楚:http://blog.csdn.net/ldanduo/article/details/820353 ...

  7. laravel基础课程---16、数据迁移(数据库迁移是什么)

    laravel基础课程---16.数据迁移(数据库迁移是什么) 一.总结 一句话总结: 是什么:数据库迁移就像是[数据库的版本控制],可以让你的团队轻松修改并共享应用程序的数据库结构. 使用场景:解决 ...

  8. 第3节 hive高级用法:16、17、18

    第3节 hive高级用法:16.hive当中常用的几种数据存储格式对比:17.存储方式与压缩格式相结合:18.总结 hive当中的数据存储格式: 行式存储:textFile sequenceFile ...

  9. 16、生命周期-BeanPostProcessor原理

    16.生命周期-BeanPostProcessor原理 16.1 打断点运行postProcessBeforeInitialization 可以看到先执行的顺序为: applyBeanPostProc ...

随机推荐

  1. dubbo调用外网接口 注册外网ip到zookeeper 暴露外网ip

    dubbo注册时会通过主机名寻找ip,会将内网ip注册到zookeeper 如果我们调用外网服务器server的话是找不到的 会报如下错误 [DUBBO] client reconnect to 12 ...

  2. Thread 设置 IsBackground true false 的 运行差别

    1.这是一个 后台线程,IsBackground=true,  主线程完成后,后台子线程也停止了,即使 子线程 还有没运行完,也要停止 class Program { static void Main ...

  3. PHP阿里大于发短信教程

    PHP阿里大于发短信教程 1 先去控制台 https://www.alidayu.com/center/user/account?spm=a3142.7791109.1999204004.5.ZtBQ ...

  4. Java的集合类之 List 接口用法

    集合其实在本质上面就是数据结构,它封装了一些底层的数据结构等操作进行操作. 集合的长度是可变的,用来存放对象的引用.常见的集合类有List集合.Set集合.Map集合. 1. List接口 List是 ...

  5. 罗辑思维首席架构师:Go微服务改造实践

    转自:http://www.infoq.com/cn/news/2018/05/luojisiwei 方圆 曾先后在 Cisco,新浪微博从事基础架构研发工作.十多年一直专注于后端技术的研发,在消息通 ...

  6. 【LeetCode】删除排序数组中的重复项&&移除特定元素【双指针,原地算法】

    给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. 示例 1 ...

  7. 长乐培训Day4

    T1 矩阵 题目 [题目描述] 从前有个 n×m 的矩阵,初始时每个位置均为 0.你需要依次执行 q 个操作,每个操作会指定一行或一列,然后将该行或该列的所有元素全部赋为一个相同的值. 输出操作完成后 ...

  8. Python的运算符和编码

    1.格式化输出 1.有两种方式: 1.1.%的方式 addr = "我家住在%s" % ("黄土高坡") 1.2.format()的方式 addr = &quo ...

  9. kali_Airmon-ng第一次渗透测试

    再看了一些资料之后,决定自己整理一下进行第一次测试,测试目标,自己宿舍的WIFI.教程仅供学习参考 断开kali连接的wifi,并检查网卡状态 airmon-ng 开启无线网卡的监控模式 airmon ...

  10. 平衡二叉树,B树,B+树的概念及区别

    1.平衡二叉树   由来:平衡二叉树是基于二分法的策略提高数据的查找速度的二叉树的数据结构 特点: 1.二叉树:意思是每个节点最多只能有两个子节点 2.平衡:因为平衡二叉树的查询性能与树的高度成正比, ...