Airbnb个性化搜索推荐:Real-time Personalization using Embeddings for Search Ranking at Airbnb

Airbnb个性化搜索推荐:Real-time Personalization using Embeddings for Search Ranking at Airbnb

概述

  • KDD’2018 Best Paper
  • Airbnb的一个工业级工作,算法设计和Airbnb自身的业务有比较强的耦合

背景

  • 任务:Airbnb是一个沟通旅客和房主的短租房中介公司,这个工作主要用在Airbnb的房源搜索排序平台和相似房源推荐平台,99%的预订行为都是发生在这两个平台上的。

  • 监督学习 v.s. 无监督学习:本文使用的是类似word2vec的无监督学习的方式,利用listing的共现关系或user和listing的共现关系训练listing embedding和user embedding(这篇文章里的"listing"指的是搜索/推荐列表里的一个房源)。

  • 短期兴趣 v.s. 长期兴趣:针对用户的短期兴趣长期兴趣,分别设计了listing embeddinguser/listing-type embedding. listing embedding是针对每个listing id的embedding;user/listing-type embedding是将user和listing按一定的规则做聚类,每一个类对应一个embedding,这么做的目的是解决稀疏性问题(顺带也直接解决了冷启动问题)。在Airbnb中,短期兴趣主要来自于用户最近的同城的搜索、点击记录,长期兴趣主要是用户长期的跨城市的使用记录。

  • 本文的术语:

    • listing: 搜索或推荐列表中的一个房源
    • market: 房源的一个地理位置属性,一般是一个城市。因为用户在查找房源的时候通常只会在同一个城市之内查找,一个城市就形成一个market

listing embedding

  • 数据构建:某个用户按时间的listing点击序列,超过30分钟会被视为是两个序列。
  • 模型:word2vec的skip-gram模型。几点改进:
    • 在有预订行为的序列中,所有skip-gram的sliding window都加入最后一个booked listing作为全局信息
    • 随机负例采样之外增加和当前listing在一个market之内的listing作为负例
    • listing冷启动问题:对于新的listing,通过上传listing时附加的额外信息对应到已有的最接近的3个listing求平均作为新listing的embedding
      Airbnb个性化搜索推荐:Real-time Personalization using Embeddings for Search Ranking at Airbnb

user-type embedding & listing-type embedding

问题

利用历史的用户预订信息训练user embedding和listing embedding面临以下问题:

  • 预订数据远少于点击数据
  • 很多用户只有一次预订记录,长度为1的预订序列无法学习
  • 通过上下文学习embedding至少需要对应实体出现5-10次,平台上大部分listing被预订的次数太少
  • 用户两次连续的预订之间可能有很长的时间间隔,期间用户的兴趣可能发生变化

user-type和listing-type的构建

  • 采用特征分桶的方式定义user-type和listing-type的聚类规则

  • 随着时间推移用户可能被落入不同的type中

  • 聚类方法可以顺便处理user和listing的冷启动问题
    Airbnb个性化搜索推荐:Real-time Personalization using Embeddings for Search Ranking at Airbnb
    Airbnb个性化搜索推荐:Real-time Personalization using Embeddings for Search Ranking at Airbnb

模型

  • 把user-type和listing-type放在同一个向量空间进行embedding训练
  • user-type和listing-type在序列中交替排列
  • 加入拒绝信号:在Airbnb中,房主可以拒绝用户。因此,在负例中增加一类负例表示该listing-type拒绝该user-type
    Airbnb个性化搜索推荐:Real-time Personalization using Embeddings for Search Ranking at Airbnb

应用

相似房源推荐

  • 查找listing embedding距离最近的listing_id

  • A/B测试表明listing embedding在相似房源推荐上带来了21%的点击率提升

  • 增加了4.9%的用户在相似房源推荐中产生了预订行为

房源搜索排序

基础排序模型

query特征、listing特征以及交叉特征用带Lambda的GBDT计算一个回归问题拟合用户行为分数(曝光但未点击-0分,点击-0.01分,联系房主但未预订-0.25分,预订-1分,房主拒绝预订-0.4分)

listing embedding的应用

为每个用户维护一个两周的历史记录,并将历史记录里的listing分成如下6类:

  • 点击的listing
  • 长点击的listing: 点击并在页面停留时间超过60秒
  • 曝光但没有点击的listing
  • 收藏的listing
  • 联系了房主但是没有预订的listing
  • 预订的listing

搜索排序的时候将候选的listing与6类listing的embedding求相似度得到6个特征加入搜索模型的GBDT. 具体来说,对于每一类的历史listing, 会按照不同的market求平均,当前的候选listing embedding与每个market的平均listing embedding求cosine相似度,将各个market中的最大相似度作为这个类的特征。

user-type & listing-type embedding的应用

求当前用户的user-type embedding与候选listing的listing-type embedding的cosine相似度作为特征。

  • embedding相关的特征一览
    • Coverage: 特征覆盖率
    • Feature Importance (a/b): 该特征在所有特征(共104个)中的重要性排名
      Airbnb个性化搜索推荐:Real-time Personalization using Embeddings for Search Ranking at Airbnb

线上结果

在Airbnb的搜索平台上A/B测试,可以看到在bookings提升的同时,rejections并没有特别大的增长
Airbnb个性化搜索推荐:Real-time Personalization using Embeddings for Search Ranking at Airbnb