Real-time Personalization using Embeddings for Search Ranking at Airbnb

本来4天长假,还想做点什么… 然而只读了半篇Paper,看了好几天电影和电视剧,韩剧恶之花还挺不错的…(大雾

这篇是Airbnb在KDD’18 Best Paper, 简单清晰, 适合阅读.

Link:

Airbnb的Embedding经典论文. 讲给定用户的点击序列,如果做listing(房源) embedding. 主要的想法对点击序列里面的listing做skip-gram word embedding.

这篇论文其实是分了两部分.

  • 前一部分,讨论了怎么做listing(房源) embedding.
  • 后一部分,讨论了怎么做user’s long-term intersets embedding. 貌似前半部分更有名一些.

3 Methodology

3.1 List Embeddings

对房源的embedding. 每个click session是一个listing sequence, click session可以分成两类:

  • booked sessions. 看了看订房了
  • exploratory sessions. 看了看就跑了

对于这个特定场景提出了一些改进:

  • Negative sampling: word embedding的基本操作, 取一些随机序列来作为负样本.
  • Booked Listing as Global Context: 对点击序列中的所有房间, 最终预订的房间,始终出现在他的context里面.
  • Adapting Training for Congregated Search: 如果Negative sampling是随机取样的话,可能会随机分散到不同的城市, 这样很容易从地理位置就区分正负样本,从而不能训练出有效的embedding. 改进方法是,在同一个城市随机生成负样本.
  • Cold start listing embeddings: 新上架的房间,需要一个初始化的embedding,方法是取几个地理位置靠近的,特征一致的几个房间,取平均.

## 3.2 User-type & Listing-type Embeddings

3.1部分也可以理解成是user’s short-term interests embedding,即当下in-session personalization. 长期而言,用户的行为是cross-market的,比如说,我去西雅图旅游之后,以后出去旅游很可能不会再去西雅图了.

对用户的embedding,存在数据稀疏的问题:

  • 1 booked session占比例非常少.
  • 2 很多用户只订过一次房, 比如我…
  • 3 很多房间被订的次数少于5-10次…
  • 4 同一用户的相邻两次booked session,时间间隔太长,用户的喜好可能以及发生了偏移,比如用户更富了,选的房子价格更高了.

因此我们手工设计feature dims,把用户和房源映射到特征空间. 然后再将两个特征空间中的users和listings embed到同一个向量空间.

一个直观的解释是, user type和listing type是两种不同语言,我们有一些这两种语言相似单词对(user/listing type pair from booked session), 和反义单词对(booked but rejected by host pair),然后我们要把这两种语言embed到一个同一个词义空间中,这样给定任意来自user type的单词可以翻译成listing type的单词,或者求listing type语言中词义相近的单词.

训练方法就是让相似的尽可能近,相反的尽可能远.

感觉这部分和word2vec没啥相似的…

4 Experiments

未完待续

4.1 Training Listing Embeddings

Trainning setting:

  • 800 million click session,
  • oversample booked session 5x,
  • embedding dims d = 32,
  • context window size m = 5,
  • perform 10 iterations.

每天重新训练全新的model,并不增量式训练过去的model.

4.2 Offline Evaluation of Listing Embedding

把booked sessions拿出来,然后将booked listing和candidates按照embedding的相似度排序,booked listing排名越靠前,embedding越好.

d32 book + neg胜出.

4.3 Similar Listings using Embeddings

Airbnb每个页面底部的一个功能,Similar Listing,做了A/B testing, 比传统方法提高了20%的CTR.

4.4 Real time personalization in Search Ranking using Embeddings

Ranking就是对每一个listing进行估分,然后sort输出.

训练集就是listing的features X和相对应的分值Y. 分值Y有5种{0, 0.01, 0.25, 1, -4}. 设计如下:

  • 如果booked, y = 1.
  • 如果联系过, y = 0.25,
  • 如果点击过, y = 0.01,
  • 如果被拒绝, y = -0.4,
  • 如果没点击, y = 0.

Features:

  • 有一些常规listing features: price per night, number of rooms, rejection rate, etc.
  • 一些user features: avg booked price, guest rating, etc.
  • 还有交叉features: distance between query location and listing location, etc.
  • 还有一些Listing Embedding Features,下文会详细介绍.

有了(X,Y), 我们把这个问题当作pairwise regression, 训练方法是GBDT, 评分标准是NDCG.

重点是接下来的Listing Embedding Features. 大体上来讲,就是计算一下listing与user点击过的listing的近似度. 有8个近似度需要计算:

  • EmbClickSim
  • EmbSkipSim
  • EmbLongClickSim
  • EmbWishlistSim
  • EmbInqSim
  • EmbBookSim
  • EmbLastLongClickSim
  • UserTypeListingTypeSim

前几项是短期行为近似,取样用户最近两周的click行为:

  • H_c: clicked listing_ids
  • H_{lc}: long clicked listing_ids
  • H_s: skipped listing_ids
  • H_w: wishlisted listing_ids
  • H_i: inquired listing_ids
  • H_b: booked listing_ids

相似度计算方法如下:

\[EmbClickSIm(l, H_c) = \max_{m \in M} cos(v_l, avg(\sum_{l_h \in m, l_h \in H_c} v_{l_h}))\]

EmbLastLongClickSim是计算listing和最后一个长停留的listing相似度.

UserTypeListingTypeSim是计算UserType和ListingType的相似度.